使用javax.mail发送邮件(二)--带附件邮件

使用javax.mail发送邮件(二)--带附件邮件

package SendEmailTest;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.*;
import java.io.File;
import java.util.Properties;

/**
 * Created by mi on 2017/5/12.
 */
public class SendEmailWithAttach {
    public static void sendMail(String fromMail, String user, String password, String toMail, String mailTitle, String mailContent) {

        //加载一个配置文件
        Properties props = new Properties();

        // smtp:简单邮件传输协议
        // 设置邮件服务器主机名
        props.put("mail.smtp.host", "smtp.163.com");

        //发送服务器需要通过验证
        props.put("mail.smtp.auth", "true");

        //设置环境信息
        Session session = Session.getInstance(props);//根据属性新建一个邮件会话
        session.setDebug(true); //会打印一些调试信息。

        //由邮件会话新建一个消息对象
        MimeMessage message = new MimeMessage(session);

        Transport transport = null;
        //设置邮件内容
        try {
            message.setFrom(new InternetAddress(fromMail));//设置发件人的地址
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(toMail));//设置收件人,并设置其接收类型为TO
            message.setSubject(mailTitle);//设置标题
            //设置信件内容

            //因为需要加载附件,需要装载多个主体部件
            MimeMultipart partList = new MimeMultipart("mixed");
            message.setContent(partList);

            //创建一个部件
            MimeBodyPart part1 = new MimeBodyPart();
            part1.setText(mailContent);
            partList.addBodyPart(part1);

            //再创建一个部件
            MimeBodyPart part2 = new MimeBodyPart();

            // 添加附件的内容
            DataSource source = new FileDataSource("D:/export.xlsx");
            part2.setDataHandler(new DataHandler(source));

            //指定附件的名字,使用MimeUtility.encode()对中文进行编码
            part2.setFileName(MimeUtility.encodeText("数据报表.xlsx")); //设置的这个新的名字一定要带有后缀格式啊.xlsx!!!

            partList.addBodyPart(part2);

            //发送邮件
            transport = session.getTransport("smtp");
            transport.connect(user, password);
            transport.sendMessage(message, message.getAllRecipients());//发送邮件,其中第二个参数是所有已设好的收件人地址
        }catch (Exception e) {
            e.printStackTrace();
        }finally {
            try{
                transport.close(); //这个最好放到finally中哎
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        try{
            sendMail("[email protected]", "[email protected]", "xxx",
                    "[email protected]",
                    "Java Mail 正式邮件",
                    "这是一个特别重要的邮件:超级超级重要");
        }catch (Exception e) {
            e.printStackTrace();
        }

    }

}

That's all. Thank U~

你可能感兴趣的:(使用javax.mail发送邮件(二)--带附件邮件)