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("xxxx@xx.com", "人名", "UTF-8"));
// 3. To: 收件人(可以增加多个收件人、抄送、密送)
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("xxx@xx.com"));
// 4,抄送人
message.addRecipient(MimeMessage.RecipientType.CC, new InternetAddress("xxx@.com"));
// 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(“xxx@xxx.com”, "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;