JAVA利用MimeMessage实现发送带附件的邮件

1, 配置邮件服务器

// 设置邮件端口信息
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)
props.setProperty("mail.smtp.host", "smtp.xxx.com"); // 发件人的邮箱的 SMTP 服务器地址
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.port", "000");
session = javax.mail.Session.getInstance(props);

2,准备邮件内容

//设置端口信息
MimeMessage message = new MimeMessage(session);
// 2. From: 发件人
message.setFrom(new InternetAddress("[email protected]", "人名", "UTF-8"));
// 3. To: 收件人(可以增加多个收件人、抄送、密送)
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("[email protected]"));

// 4,抄送人
message.addRecipient(MimeMessage.RecipientType.CC, new InternetAddress("[email protected]"));
       
// 5. Subject: 邮件主题
message.setSubject("xxx标题", "UTF-8");

// 6,设置邮件内容,混合模式
MimeMultipart msgMultipart = new MimeMultipart("mixed");
message.setContent(msgMultipart);

// 7,设置消息正文
MimeBodyPart content = new MimeBodyPart();
msgMultipart.addBodyPart(content);

// 8,设置正文格式
MimeMultipart bodyMultipart = new MimeMultipart("related");
content.setContent(bodyMultipart);

// 9,设置正文内容
MimeBodyPart htmlPart = new MimeBodyPart();
bodyMultipart.addBodyPart(htmlPart);
htmlPart.setContent("邮件内容,html格式", "text/html;charset=UTF-8");

// 10,设置附件
if (CollectionUtils.isNotEmpty(fileList)) {
    fileList.stream().forEach(file -> {
       if (file == null || !file.exists()) {
           return;
       }
       try {
           //设置相关文件
           MimeBodyPart filePart = new MimeBodyPart();
           FileDataSource dataSource = new FileDataSource(file);
           DataHandler dataHandler = new DataHandler(dataSource);
           // 文件处理
           filePart.setDataHandler(dataHandler);
           // 附件名称
           filePart.setFileName(file.getName());
           // 放入正文(有先后顺序,所以在正文后面)
           msgMultipart.addBodyPart(filePart);
       } catch (Exception e) {
           logger.error("send mail file error fileName={}", file.getName(), e);
       }
    });
}

// 11. 设置发件时间
message.setSentDate(new Date());

// 12. 保存文件准备发送
message.saveChanges();

return message;

3,采用线程异步进行邮件发送

emailPool.execute(() -> {
    Transport transport = session.getTransport();
    // a,连接邮箱
    transport.connect(“[email protected]”, "password");

    // b,第2步中准备的邮件内容
    MimeMessage message = createMimeMessage(mail);

    // c,开始发送邮件
    transport.sendMessage(message, message.getAllRecipients());
});

4,一些引入的类

import java.io.File;
​​​​​​​import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

 

你可能感兴趣的:(JAVA利用MimeMessage实现发送带附件的邮件)