JavaMail實現郵件傳送功能
阿新 • • 發佈:2018-12-31
最近的專案要使用javamail進行郵件傳送,寫這篇部落格總結下
傳送簡單的郵件
在進行郵件傳送之前要引入javamail的Maven依賴
dependency>
<groupId>javamail</groupId>
<artifactId>mail</artifactId>
<version>1.3.2</version>
</dependency>
編寫測試程式碼
//設定網易雲郵箱賬號
public static String emailAccout = "傳送方的郵箱賬號@163.com";
//設定網易雲smtp授權碼
public static String emailPassword = "傳送方的授權碼";
//設定163郵箱的smtp伺服器地址
//郵件協議有smtp pop3 imap4 一般的傳送郵件使用smtp協議,要先等於網易郵箱開啟smtp、pop3/imap4協議授權
public static String emailSmptHost = "smtp.163.com";
//傳送簡單的郵件 content為郵件內容 To接收方
public static void setMail(String content,String To) {
//設定郵件屬性
Properties pro = new Properties();
//配置郵件傳輸協議
pro.setProperty("mail.transport.protocol", "smtp");
//設定發件人的smtpd地址
pro.setProperty("mail.smtp.host", emailSmptHost);
//設定需要進行認證
pro.setProperty("mail.smtp.auth", "true");
//建立會話物件,使用者和郵件伺服器互動
Session session = Session.getInstance(pro) ;
//設定為Debug模式 可以看到執行情況
sesssion.setDebug(true);
Transport transport = null;
try {
//建立一封郵件
MimeMessage message = new MimeMessage(session);
//設定發件人
message.setFrom(new InternetAddress(emailAccout));
//設定收件人 可以通過addRecipient新增多個收件人
message.setRecipient(RecipientType.TO, new InternetAddress(To));
//設定內容
message.setContent(content,"text/html;charset=utf-8");
//設定主題
message.setSubject("測試郵件");
//獲取郵件傳輸物件
transport = session.getTransport();
//設定賬號密碼進行連結
transport.connect(emailSmptHost,emailAccout,emailPassword);
//傳送郵件,傳送到全部地址
transport.sendMessage(message, message.getAllRecipients());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
測試傳送
setMail("測試","你要傳送的郵箱@163.com");
結果
傳送複雜的郵件 帶圖片與附件
public static void complexMail(String contend,String to) throws AddressException, MessagingException, UnsupportedEncodingException{
Properties pro = new Properties();
pro.setProperty("mail.transport.protocol", "smtp");
pro.setProperty("mail.smtp.host",emailSmptHost);
pro.setProperty("mail.smtp.auth", "true");
Session session = Session.getInstance(pro);
/* session.setDebug(true);
*/ MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(emailAccout));
message.setRecipient(RecipientType.TO, new InternetAddress(to));
message.setSubject("測試");
//建立圖片"節點"
MimeBodyPart image = new MimeBodyPart();
//讀取本地檔案
DataHandler dh = new DataHandler(new FileDataSource("D://44//1.jpg"));
//將圖片資料新增到節點
image.setDataHandler(dh);
//為圖片節點設定唯一編號
image.setContentID("image_tail");
//建立文字"節點"
MimeBodyPart text = new MimeBodyPart();
//將整合圖片包含到郵件內容中
text.setContent("這是一張圖片<br/><img src='cid:image_tail'/>", "text/html;charset=UTF-8");
//設定文字和圖片的節點關係,變成混合節點
MimeMultipart text_image = new MimeMultipart();
text_image.addBodyPart(text);
text_image.addBodyPart(image);
text_image.setSubType("related");
//將檔案+圖片封裝成普通的節點
MimeBodyPart tIm = new MimeBodyPart();
tIm.setContent(text_image);
//建立附件
MimeBodyPart attachment = new MimeBodyPart();
//讀取本地檔案
DataHandler dh2 = new DataHandler(new FileDataSource("D://44//shop.sql"));
attachment.setDataHandler(dh2);
//設定附件名字
attachment.setFileName(MimeUtility.encodeText(dh2.getName()));
//設定文字加圖片加附件 最大的節點
MimeMultipart mm = new MimeMultipart();
mm.addBodyPart(tIm);
mm.addBodyPart(attachment);
mm.setSubType("mixed");
//將節點新增到正文
message.setContent(mm);
Transport transport = session.getTransport();
transport.connect(emailSmptHost, emailAccout, emailPassword);
transport.sendMessage(message, message.getAllRecipients());
}
結果
注意
圖片大小可調,在img可以設定寬度與高度
總結
javamail傳送郵件先建立properties物件設定郵件屬性,通過session構建與郵件伺服器進行互動,再建立一封郵件物件MineMail,設定郵件內容與發件人,通過session構建郵件傳輸物件transport 進行連線郵件伺服器與傳送郵件