之前上網有看到過別人總結的使用java程序發送郵件,於是自己下來練習,把自己學習的一些心得總結出來.
首先我們這里需要采用兩個jar包:
需要的朋友可以自行上網去CSDN類似的網站上面找
順便把自己測試用例貼了出來,里面有些詳細的注釋,接下來會提醒寫demo的時候大家一些注意的地方.把中間有自己遇到的問題.貼出來供大家參考.
1.首先確保發送人的郵箱 跟 接收人的郵箱 的smtp協議開着. ------》可以上郵箱設置里面打開.
這里使用的QQ郵箱 我們可以在郵箱幫助中找到QQ郵箱的pop3跟smtp服務器地址已經開放的相應端口 一般是465,或者是587
2.極其重要一點:現在很多郵箱都采用授權碼的方式對第三方開放 pop3跟smtp服務 ,所以我們在用郵箱賬戶密碼登錄郵箱時,記得要把密碼換成相應的 授權碼.
(需要我們手機去發短信驗證的)
3.我們測試發送的郵件內容有可能被郵件服務器當成是垃圾郵件攔截掉,這里我們需要設置下.將其加入到郵件的白名單中,可避開反垃圾誤判
4.針對發送失敗的錯誤,我們可以仔細分析出錯的code碼,上網查找對應的錯誤碼信息,找到錯誤的原因.
這里針對發送郵箱是網易來說:
http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html
測試demo如下:
package Test;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Testmail {
// 發送郵件的賬號
public static String ownEmailAccount = "xxxxxxxxxx@163.com";
// 發送郵件的密碼------》授權碼
public static String ownEmailPassword = "xxxxxxxxxxx";
// 發送郵件的smtp 服務器 地址
public static String myEmailSMTPHost = "smtp.163.com";
// 發送郵件對方的郵箱
public static String receiveMailAccount = "xxxxxxxxxx@qq.com";
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
// 設置郵件傳輸采用的協議smtp
prop.setProperty("mail.transport.protocol", "smtp");
// 設置發送人郵件服務器的smtp地址
// 這里以網易的郵箱smtp服務器地址為例
prop.setProperty("mail.smtp.host", myEmailSMTPHost);
// 設置驗證機制
prop.setProperty("mail.smtp.auth", "true");
// SMTP 服務器的端口 (非 SSL 連接的端口一般默認為 25, 可以不添加, 如果開啟了 SSL 連接,
// 需要改為對應郵箱的 SMTP 服務器的端口, 具體可查看對應郵箱服務的幫助,
// QQ郵箱的SMTP(SLL)端口為465或587, 其他郵箱自行去查看)
/*final String smtpPort = "465";
prop.setProperty("mail.smtp.port", smtpPort);
prop.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
prop.setProperty("mail.smtp.socketFactory.fallback", "false");
prop.setProperty("mail.smtp.socketFactory.port", smtpPort);*/
// 創建對象回話跟服務器交互
Session session = Session.getInstance(prop);
// 會話采用debug模式
session.setDebug(true);
// 創建郵件對象
Message message = createSimpleMail(session);
Transport trans = session.getTransport();
// 鏈接郵件服務器
trans.connect(ownEmailAccount, ownEmailPassword);
// 發送信息
trans.sendMessage(message, message.getAllRecipients());
// 關閉鏈接
trans.close();
}
/**
* @Title: createSimpleMail
* @Description: 創建郵件對象
* @author: chengpeng
* @param @param session
* @param @return
* @param @throws Exception 設定文件
* @return Message 返回類型
* @throws
*/
public static Message createSimpleMail(Session session) throws Exception {
MimeMessage message = new MimeMessage(session);
// 設置發送郵件地址,param1 代表發送地址 param2 代表發送的名稱(任意的) param3 代表名稱編碼方式
message.setFrom(new InternetAddress("xxxxxxxxx@163.com", "張三", "utf-8"));
// 代表收件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress(receiveMailAccount, "李四", "utf-8"));
// To: 增加收件人(可選)
/*message.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress("dd@receive.com", "USER_DD", "UTF-8"));
// Cc: 抄送(可選)
message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress("ee@receive.com", "USER_EE", "UTF-8"));
// Bcc: 密送(可選)
message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress("ff@receive.com", "USER_FF", "UTF-8"));*/
// 設置郵件主題
message.setSubject("測試轉發郵件");
// 設置郵件內容
message.setContent("早安,世界 你最近好嗎!", "text/html;charset=utf-8");
// 設置發送時間
message.setSentDate(new Date());
// 保存上面的編輯內容
message.saveChanges();
// 將上面創建的對象寫入本地
OutputStream out = new FileOutputStream("MyEmail.eml");
message.writeTo(out);
out.flush();
out.close();
return message;
}
}
參考鏈接:http://blog.csdn.net/xietansheng/article/details/51673073