写在前面
本章的代码实现,主要参考JavaMail官方文档,链接如下:
-
https://javaee.github.io/javamail/
目前,JavaMail的最新文档都已经搬家到了GitHub,想浏览的同学自行想办法。
Maven
<dependencies>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.0</version>
</dependency>
</dependencies>
发送邮件工具类
当下简单地采用了单例模式,将发送邮件的功能封装成了一个工具类,以下代码仅供参考。
@Slf4j
public enum SendMailHelper {
INSTANCE;
private Session session = null;
// 私有化构造方法
private SendMailHelper() {
String host = "smtp.exmail.qq.com"; // 当前以腾讯邮箱举例
Properties props = System.getProperties();
String smtpPort = "465";
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", smtpPort);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
props.put("mail.smtp.socketFactory.port", smtpPort);
props.put("mail.mime.charset", "UTF-8");
session = Session.getInstance(props, null);
}
/**
* 发送邮件带附件
* @param sendTo
* @param mailSubject
* @param mailContent
* @param attachmentFile
*/
public void sendMailWithAttachment(List<String> sendTo, String mailSubject, String mailContent, String attachmentFile) {
// 公共信息
String from = "notreply@qq.com";
String pwd = "ebf25b423c7a7d8b6e8662b6d7f37c27";
// 加解密处理(可省略)
try{
pwd = DesUtil.INSTANCE.decrypt(pwd);
}catch (Exception e) {
log.info("decrypt mail password error.", e);
}
// Debug模式(生产模式下建议处理成可配置)
boolean debug = false;
session.setDebug(debug);
try {
// 发件人
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
// 收件人
InternetAddress[] address = new InternetAddress[sendTo.size()];
for(int i=0,len=sendTo.size(); i<len; i++) {
address[0] = new InternetAddress(sendTo.get(i));
}
msg.setRecipients(Message.RecipientType.TO, address);
// 邮件主题
msg.setSubject(mailSubject);
// 邮件内容节点
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText(mailContent);
// 邮件附件节点
MimeBodyPart mbp2 = new MimeBodyPart();
mbp2.attachFile(attachmentFile);
// 汇集
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
msg.setContent(mp);
msg.setSentDate(new Date());
// 执行发送
Transport.send(msg, address, from, pwd);
} catch (Exception ioex) {
log.error("send mail error.", ioex);
}
}
}
这是一个带有附件内容的邮件发送工具类,如果想发送更加丰富的邮件信息,可以参阅官方文档中给出的Sample,里面提供了各种发送邮件的样例,大家伙儿可以下载阅读,入口如下(地址上面已经给出了哦):