最近剛剛寫個Java定時發送郵件 所以記錄下代碼,方便後面使用。
此郵件發送的是非匿名郵件,應爲多次測試發現大家習慣性把匿名郵件置爲垃圾郵件
這次用的是outlook的郵箱代碼,這個時候發生了一點小問題
大家看outlook端口爲 587 當時以爲發送郵件端口也是587,所以不能發送。。。。 實際端口爲25,JavaMeil默認發送端口也是25,下面代碼
package com.hand.jobs.job;
import com.sun.mail.util.MailSSLSocketFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;
/**
* @Auther:lkj
* @Date:2018/8/9 09:33
* @E-mail:
* @Description: 郵件發送工具
*/
public class MailUtil {
private static Logger logger = LoggerFactory.getLogger(MailUtil.class);
private static final String HOST = "smtp.partner.outlook.cn";// 郵箱服務器
private static final String USERNAME = "*****@uabsbattery.com";// 發件人
private static final String PASSWORD = "******";// 郵箱密碼
/**
* 郵件發送器
*
* @return 配置好的工具
*/
public static void sendMail(String to, String subject, String html) {
/**
*
* 功能描述: 郵件發送,只發送文本
*
* @auther:lkj
* @date:2018/8/9 上午11:46
* @param:[to 收件人, subject 主題, html 內容]
* @return:void
*
*/
Transport ts = null;
try{
Properties prop = new Properties();
prop.put("mail.host", HOST);
prop.put("mail.transport.protocol", "smtp");
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.starttls.enable", "true");
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.socketFactory", sf); //這句加上後才發送成功,不加的話就發送不成功
prop.put("mail.smtp.socketFactory.fallback", "false");
//使用JavaMail發送郵件的5個步驟
//1、創建session
Session session = Session.getInstance(prop);
//開啓Session的debug模式,這樣就可以查看到程序發送Email的運行狀態
session.setDebug(true);
//2、通過session得到transport對象
ts = session.getTransport();
//3、使用郵箱的用戶名和密碼連上郵件服務器,發送郵件時,發件人需要提交郵箱的用戶名和密碼給smtp服務器,用戶名和密碼都通過驗證之後才能夠正常發送郵件給收件人。
ts.connect(HOST, USERNAME, PASSWORD);
//4、創建郵件
//創建郵件對象
MimeMessage message = new MimeMessage(session);
//指明郵件的發件人
message.setFrom(new InternetAddress(USERNAME));
//指明郵件的收件人,現在發件人和收件人是一樣的,那就是自己給自己發
message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
//郵件的標題
message.setSubject(subject);
//郵件的文本內容
message.setContent(html, "text/html;charset=UTF-8");
//返回創建好的郵件對象
//5、發送郵件
ts.sendMessage(message, message.getAllRecipients());
ts.close();
logger.info("SendMail Success.>"+to);
}catch (Exception e){
e.printStackTrace();
logger.error(e.getMessage());
}
}
}