Java帶圖片的郵件發送方法實現

jopen 10年前發布 | 448K 次閱讀 Java Java開發

    package sendEmail;

import java.util.Properties;  

import javax.activation.DataHandler;  
import javax.activation.FileDataSource;  
import javax.mail.Authenticator;  
import javax.mail.Message;  
import javax.mail.PasswordAuthentication;  
import javax.mail.Session;  
import javax.mail.Transport;  
import javax.mail.internet.InternetAddress;  
import javax.mail.internet.MimeBodyPart;  
import javax.mail.internet.MimeMessage;  
import javax.mail.internet.MimeMultipart;  

public class AttchImgMail {  
    // JavaMail需要Properties來創建一個session對象。它將尋找字符串"mail.smtp.host",屬性值就是發送郵件的主機.  
    public static void main(String[] args) throws Exception {  
        Properties properties = new Properties();  
        // properties.put("mail.smtp.host", "mailcas.chinapnr.com");// 設置smtp主機  
        properties.put("mail.smtp.host", "smtp.163.com");// 設置smtp主機  
        properties.put("mail.smtp.auth", "true");// 使用smtp身份驗證  
        /* 
         * 在 JavaMail 中,可以通過 extends Authenticator 抽象類,在子類中覆蓋父類中的 
         * getPasswordAuthentication() 方法,就可以實現以不同的方式來進行登錄郵箱時的用戶身份認證。JavaMail 
         * 中的這種設計是使用了策略模式(Strategy 
         */  
        MimeMessage message = new MimeMessage(Session.getInstance(properties,  
                new Authenticator() {  
                    public PasswordAuthentication getPasswordAuthentication() {  
                        return new PasswordAuthentication(//設置發送帳號密碼  
                                "帳號", "密碼");  
                    }  
                }));  
        // 設置郵件的屬性  
        // 設置郵件的發件人  
        message.setFrom(new InternetAddress("發件人"));  
        // 設置郵件的收件人 cc表示抄送 bcc 表示暗送  
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(  
                "收件人"));  
        // 設置郵件的主題  
        message.setSubject("系統自動發送郵件");  
        // 創建郵件的正文  
        MimeBodyPart text = new MimeBodyPart();  
        // setContent(“郵件的正文內容”,”設置郵件內容的編碼方式”)  
        text.setContent("此郵件為系統自動發送<img src='cid:a'><img src='cid:b'>",  
                "text/html;charset=gb2312");  

        // 點到點的發送  
        // 一對多發送只要改一個地方如下:  

        // // 構建一個群發地址數組  
        // InternetAddress[] adr=new InternetAddress[toMore.length];  
        // for(int i=0;i<toMore.length;i++){ adr[i]=new  
        // InternetAddress(toMore[i]); }  
        // // Message的setRecipients方法支持群發。。注意:setRecipients方法是復數和點 到點不一樣  
        // message.setRecipients(Message.RecipientType.TO,adr);  


        // 創建圖片  
        MimeBodyPart img = new MimeBodyPart();  
        /* 
         * JavaMail API不限制信息只為文本,任何形式的信息都可能作繭自縛MimeMessage的一部分. 
         * 除了文本信息,作為文件附件包含在電子郵件信息的一部分是很普遍的. JavaMail 
         * API通過使用DataHandler對象,提供一個允許我們包含非文本BodyPart對象的簡便方法. 
         */  
        DataHandler dh = new DataHandler(new FileDataSource("src//a.jpg"));//圖片路徑  
        img.setDataHandler(dh);  
        // 創建圖片的一個表示用于顯示在郵件中顯示  
        img.setContentID("a");  

        MimeBodyPart img2 = new MimeBodyPart();  
        DataHandler dh2 = new DataHandler(new FileDataSource("src//b.jpg"));//第二張圖片路徑  
        img2.setDataHandler(dh2);  
        img2.setContentID("b");  
        // 創建附件  
        // MimeBodyPart attch = new MimeBodyPart();  
        // DataHandler dh1 = new DataHandler(new FileDataSource("src//b.jpg"));  
        // attch.setDataHandler(dh1);  
        // String filename1 = dh1.getName();  
        // MimeUtility 是一個工具類,encodeText()用于處理附件字,防止中文亂碼問題  
        // attch.setFileName(MimeUtility.encodeText(filename1));  
        // 關系 正文和圖片的  
        MimeMultipart mm = new MimeMultipart();  
        mm.addBodyPart(text);  
        mm.addBodyPart(img);  
        mm.setSubType("related");// 設置正文與圖片之間的關系  
        // 圖班與正文的 body  
        MimeBodyPart all = new MimeBodyPart();  
        all.setContent(mm);  
        // 附件與正文(text 和 img)的關系  
        MimeMultipart mm2 = new MimeMultipart();  
        mm2.addBodyPart(all);  
        mm2.addBodyPart(img2);  
        mm2.setSubType("mixed");// 設置正文與附件之間的關系  

        message.setContent(mm2);  
        message.saveChanges(); // 保存修改  

        Transport.send(message);// 發送郵件  
        System.out.println("郵件發送成功");  

    }  
}  </pre>Java發送帶圖片的郵件,代碼為發生2張圖片的郵件關聯方式,注釋中有發送帶附件、帶多人發生解析的代碼,可以自行調整。<br />


來自:http://blog.csdn.net/chickencin/article/details/28232693

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!