1. 程式人生 > >JavaMail(二):利用JavaMail發送復雜郵件

JavaMail(二):利用JavaMail發送復雜郵件

log val word ipa ava host sent dht spa

上一篇文章我們學習了利用JavaMail發送簡單郵件,這篇文章我們利用JavaMail發送稍微復雜一點的郵件(包含文本、圖片、附件)。這裏只貼出核心代碼,其余代碼可參考JavaMail(一):利用JavaMail發送簡單郵件

封裝發送郵件代碼

/**
 * 封裝發送郵件代碼
 * @author fly
 * @時間 2017-05-09
 *
 */
public class Email {
    /**
     * 創建並發送一封包含文本、圖片、附件的復雜郵件
     * @throws Exception 
     */
    public static void sendComplexMail(MailSenderInfo mailInfo) throws
Exception{ // 判斷是否需要身份認證 MyAuthenticator authenticator = null; Properties pro = mailInfo.getProperties(); if(mailInfo.isValidate()){ // 如果需要身份認證,則創建一個密碼驗證器 authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); }
// 根據郵件會話屬性和密碼驗證器構造一個發送郵件的session Session sendMailSession = Session.getDefaultInstance(pro, authenticator); // 根據session創建一個郵件消息 Message mailMessage = new MimeMessage(sendMailSession); // 創建郵件發送者地址 Address from = new InternetAddress(mailInfo.getFromAddress());
// 設置郵件消息的發送者 mailMessage.setFrom(from); // 創建郵件的接收者地址,並設置到郵件消息中 Address to = new InternetAddress(mailInfo.getToAddress()); // Message.RecipientType.TO屬性表示接收者的類型為TO mailMessage.setRecipient(Message.RecipientType.TO, to); // 設置郵件消息的主題 mailMessage.setSubject(mailInfo.getSubject()); // 設置郵件消息發送的時間 mailMessage.setSentDate(new Date()); MimeBodyPart image = new MimeBodyPart(); //DataHandler為圖片 FileDataSource為圖片數據源 (與處理附件比較類似:區別在於您必需通過設置 MimeMultipart 構造器中的子類型(或者說用 setSubType())告知 MimeMultipart 各個相關部件,並設置圖像的 Content-ID ,作為圖像的 src 在 img 標記中使用) DataHandler dh = new DataHandler(new FileDataSource("stock-photo-189028703.jpg")); image.setDataHandler(dh); //用一個給定的 cid URL 引用圖像,其中 cid 是圖像附件 Content-ID 頭的引用 setContent時用到這個cid image.setContentID("tupian"); BodyPart text = new MimeBodyPart(); text.setContent("美麗的圖片<br/><img src=‘cid:" + image.getContentID() + "‘/>", "text/html;charset=UTF-8"); MimeMultipart textImageRelated = new MimeMultipart(); textImageRelated.addBodyPart(text); textImageRelated.addBodyPart(image); textImageRelated.setSubType("related"); BodyPart textImage = new MimeBodyPart(); textImage.setContent(textImageRelated); BodyPart attachment = new MimeBodyPart(); //DataHandler為附件 FileDataSource為附件數據源 如果從 URL 中讀時,附件的數據源是 URLDataSource DataHandler dh2 = new DataHandler(new FileDataSource(mailInfo.getAttachFileNames()[0])); attachment.setDataHandler(dh2); attachment.setFileName(MimeUtility.encodeText(dh2.getName())); MimeMultipart mainPart = new MimeMultipart(); mainPart.addBodyPart(textImage); mainPart.addBodyPart(attachment); mainPart.setSubType("mixed"); mailMessage.setContent(mainPart); // 連接郵件服務器、發送郵件、關閉連接 Transport.send(mailMessage); } }

測試代碼:

public class JavaMailTest {
   
    public static void main(String[] args) {
    //設置郵件相關信息 MailSenderInfo mailInfo
= new MailSenderInfo(); mailInfo.setMailServerHost("smtp.163.com"); mailInfo.setMailServerPort("25"); mailInfo.setValidate(true); mailInfo.setUserName("[email protected]"); mailInfo.setPassword(""); // 您的郵箱密碼,若你的郵箱開啟了客戶端授權密碼,則此處是您的客戶端授權密碼 mailInfo.setFromAddress("[email protected]"); mailInfo.setToAddress("[email protected]"); mailInfo.setSubject("這是一封測試郵件"); mailInfo.setContent("你好!這是一封測試郵件"); String[] fileName = {"手藝人.docx"}; mailInfo.setAttachFileNames(fileName); try { //Email.sendTextMail(mailInfo); //Email.sendHtmlMail(mailInfo); Email.sendComplexMail(mailInfo); } catch (Exception e) { e.printStackTrace(); } } }

發送成功截圖:

技術分享

技術分享

JavaMail(二):利用JavaMail發送復雜郵件