程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java法式中應用JavaMail發送帶圖片和附件的郵件

Java法式中應用JavaMail發送帶圖片和附件的郵件

編輯:關於JAVA

Java法式中應用JavaMail發送帶圖片和附件的郵件。本站提示廣大學習愛好者:(Java法式中應用JavaMail發送帶圖片和附件的郵件)文章只能為提供參考,不一定能成為您想要的結果。以下是Java法式中應用JavaMail發送帶圖片和附件的郵件正文


我們經常在郵件中添加附件,以到達傳輸較年夜文件的目標。而上一篇文章只是將本機的一張圖片內嵌到郵件的 HTML 格局的注釋傍邊,如許的郵件顯得不敷豐碩多彩。我們想要一封注釋部門圖文並茂,而旅客附帶若干附件的郵件。
上面是代碼構造中3個主要的辦法:

  1. MimeBodyPart createAttachment(String fileName) 辦法用於創立附件並前往;
  2. MimeBodyPart createContent(String body, String fileName) 辦法用於創立注釋部門並前往;
  3. MimeMessage createMessage(Session session) 辦法用於挪用下面的兩個辦法生成郵件。
  4. 其實,創立一個內含附件的郵件與上一篇文章中創立注釋中包括圖片的郵件的道理,乃至代碼都簡直雷同。也就是應用 JAF 框架中的 FileDataSource 類和 DataHandler 類來取得給定途徑的資本文件,JAF 框架中的這兩個類配合協作可以獲知文件所屬的 MIME 類型,它們會准確地添加到郵件組織構造中的對應新聞頭中。

    分歧的是:
    在 HTML 格局的注釋中內含圖片是應用 MimeBody.setContentID() 辦法設置對應的資本文件的獨一標識符,即 MIME 協定關於郵件的構造組織格局中的 Content-ID 頭字段;
    而在 MIME 郵件中添加附件是應用 MimeBodyPart.setFileName() 辦法來聯系關系 FileSourceData 對象指向的資本文件。
    法式代碼:
    這個分歧點鄙人面代碼中會用橙色配景強調指出,代碼以下:

    import java.io.FileOutputStream; 
    import java.util.Properties; 
     
    import javax.activation.DataHandler; 
    import javax.activation.FileDataSource; 
    import javax.mail.Message; 
    import javax.mail.Session; 
    import javax.mail.internet.InternetAddress; 
    import javax.mail.internet.MimeBodyPart; 
    import javax.mail.internet.MimeMessage; 
    import javax.mail.internet.MimeMultipart; 
     
    /** 
     * 創立內含附件、圖文並茂的郵件 
     * @author haolloyin 
     */ 
    public class WithAttachmentMessage { 
     
      /** 
       * 依據傳入的文件途徑創立附件並前往 
       */ 
      public MimeBodyPart createAttachment(String fileName) throws Exception { 
        MimeBodyPart attachmentPart = new MimeBodyPart(); 
        FileDataSource fds = new FileDataSource(fileName); 
        attachmentPart.setDataHandler(new DataHandler(fds)); 
        attachmentPart.setFileName(fds.getName()); 
        return attachmentPart; 
      } 
     
      /** 
       * 依據傳入的郵件注釋body和文件途徑創立圖文並茂的注釋部門 
       */ 
      public MimeBodyPart createContent(String body, String fileName) 
          throws Exception { 
        // 用於保留終究注釋部門 
        MimeBodyPart contentBody = new MimeBodyPart(); 
        // 用於組合文本和圖片,"related"型的MimeMultipart對象 
        MimeMultipart contentMulti = new MimeMultipart("related"); 
     
        // 注釋的文本部門 
        MimeBodyPart textBody = new MimeBodyPart(); 
        textBody.setContent(body, "text/html;charset=gbk"); 
        contentMulti.addBodyPart(textBody); 
     
        // 注釋的圖片部門 
        MimeBodyPart jpgBody = new MimeBodyPart(); 
        FileDataSource fds = new FileDataSource(fileName); 
        jpgBody.setDataHandler(new DataHandler(fds)); 
        jpgBody.setContentID("logo_jpg"); 
        contentMulti.addBodyPart(jpgBody); 
     
        // 將下面"related"型的 MimeMultipart 對象作為郵件的注釋 
        contentBody.setContent(contentMulti); 
        return contentBody; 
      } 
     
      /** 
       * 依據傳入的 Seesion 對象創立混雜型的 MIME新聞 
       */ 
      public MimeMessage createMessage(Session session) throws Exception { 
        String from = [email protected]; 
        String to = "[email protected]"; 
        String subject = "創立內含附件、圖文並茂的郵件!"; 
        String body = "<h4>內含附件、圖文並茂的郵件測試!!!</h4> </br>" 
            + "<a href = http://haolloyin.blog.51cto.com/> 螞蟻</a></br>" 
            + "<img src = \"cid:logo_jpg\"></a>"; 
     
        MimeMessage msg = new MimeMessage(session); 
        msg.setFrom(new InternetAddress(from)); 
        msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
        msg.setSubject(subject); 
     
        // 創立郵件的各個 MimeBodyPart 部門 
        MimeBodyPart attachment01 = createAttachment("F:\\java\\Snake.java"); 
        MimeBodyPart attachment02 = createAttachment("F:\\java\\meng.mp3"); 
        MimeBodyPart content = createContent(body, "F:\\java\\logo.jpg"); 
     
        // 將郵件中各個部門組合到一個"mixed"型的 MimeMultipart 對象 
        MimeMultipart allPart = new MimeMultipart("mixed"); 
        allPart.addBodyPart(attachment01); 
        allPart.addBodyPart(attachment02); 
        allPart.addBodyPart(content); 
     
        // 將下面混雜型的 MimeMultipart 對象作為郵件內容並保留 
        msg.setContent(allPart); 
        msg.saveChanges(); 
        return msg; 
      } 
     
      // 測試生成郵件 
      public static void main(String[] args) throws Exception { 
        WithAttachmentMessage mail = new WithAttachmentMessage(); 
        Session session = Session.getDefaultInstance(new Properties()); 
        MimeMessage message = mail.createMessage(session); 
        message.writeTo(new FileOutputStream("withAttachmentMail.eml")); 
      } 
    } 
    

    編譯、運轉生成 withAttachmentMail.eml 文件,雙擊翻開,以下圖:

    看看下面用 Outlook 翻開生成的文件,在附件欄外面就有一個 .java 源文件和一首 MP3 文件了。
    翻開郵件的原始內容:
    檢查生成的郵件的原始內容,點擊“文件”、“屬性”、“郵件起源”或許應用 EditPlus 、UltraEdit 等文本編纂器直接翻開也行,上面是原始內容:

    From: [email protected] 
    To: [email protected] 
    Message-ID: <56667.2.1279677956578.JavaMail.Administrator@WWW-1477FF1578B> 
    Subject: =?GBK?B?tLS9qMTauqy4vbz+oaLNvM7EsqLDr7XE08q8/qOh?= 
    MIME-Version: 1.0 
    Content-Type: multipart/mixed;  
      boundary="----=_Part_1_13249998.1279677956546" 
     
    ------=_Part_1_13249998.1279677956546 
    Content-Type: application/octet-stream; name=Snake.java 
    Content-Transfer-Encoding: base64 
    Content-Disposition: attachment; filename=Snake.java 
     
    // 省略被 BASE64 轉碼後的 Snake.java 附件內容 
     
    ------=_Part_1_13249998.1279677956546 
    Content-Type: application/octet-stream; name=meng.mp3 
    Content-Transfer-Encoding: base64 
    Content-Disposition: attachment; filename=meng.mp3 
     
    // 省略被 BASE64 轉碼後的 meng.java 附件內容 
     
    ------=_Part_1_13249998.1279677956546 
    Content-Type: multipart/related;  
      boundary="----=_Part_0_3373112.1279677956546" 
     
    ------=_Part_0_3373112.1279677956546 
    Content-Type: text/html;charset=gbk 
    Content-Transfer-Encoding: quoted-printable 
     
    <h4>=C4=DA=BA=AC=B8=BD=BC=FE=A1=A2=CD=BC=CE=C4=B2=A2=C3=AF=B5=C4=D3=CA=BC= 
    =FE=B2=E2=CA=D4=A3=A1=A3=A1=A3=A1</h4> </br><a href =3D http://haolloyin.bl= 
    og.51cto.com/> =C2=EC=D2=CF</a></br><img src =3D "cid:logo_jpg"></a> 
    ------=_Part_0_3373112.1279677956546 
    Content-Type: image/jpeg 
    Content-Transfer-Encoding: base64 
    Content-ID: logo_jpg 
     
    // 省略被 BASE64 轉碼後的郵件注釋部門內嵌的 .jpg 圖片的內容 
     
    ------=_Part_0_3373112.1279677956546-- 
     
    ------=_Part_1_13249998.1279677956546-- 
    

    主要部門曾經用配景色彩指出來了,有興致的可以深刻懂得一下 MIME 協定對郵件構造組織的標准格局。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved