寫(xiě)在前面
本章的代碼實(shí)現(xiàn)惩激,主要參考JavaMail官方文檔介劫,鏈接如下:
-
https://javaee.github.io/javamail/
目前氨菇,JavaMail的最新文檔都已經(jīng)搬家到了GitHub哄褒,想瀏覽的同學(xué)自行想辦法兴猩。
Maven
<dependencies>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.0</version>
</dependency>
</dependencies>
發(fā)送郵件工具類(lèi)
當(dāng)下簡(jiǎn)單地采用了單例模式饲梭,將發(fā)送郵件的功能封裝成了一個(gè)工具類(lèi)乘盖,以下代碼僅供參考。
@Slf4j
public enum SendMailHelper {
INSTANCE;
private Session session = null;
// 私有化構(gòu)造方法
private SendMailHelper() {
String host = "smtp.exmail.qq.com"; // 當(dāng)前以騰訊郵箱舉例
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);
}
/**
* 發(fā)送郵件帶附件
* @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模式(生產(chǎn)模式下建議處理成可配置)
boolean debug = false;
session.setDebug(debug);
try {
// 發(fā)件人
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);
// 郵件內(nèi)容節(jié)點(diǎn)
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText(mailContent);
// 郵件附件節(jié)點(diǎn)
MimeBodyPart mbp2 = new MimeBodyPart();
mbp2.attachFile(attachmentFile);
// 匯集
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
msg.setContent(mp);
msg.setSentDate(new Date());
// 執(zhí)行發(fā)送
Transport.send(msg, address, from, pwd);
} catch (Exception ioex) {
log.error("send mail error.", ioex);
}
}
}
這是一個(gè)帶有附件內(nèi)容的郵件發(fā)送工具類(lèi)憔涉,如果想發(fā)送更加豐富的郵件信息订框,可以參閱官方文檔中給出的Sample,里面提供了各種發(fā)送郵件的樣例兜叨,大家伙兒可以下載閱讀穿扳,入口如下(地址上面已經(jīng)給出了哦):
JavaMail官網(wǎng)首頁(yè)部分截圖