郵件開發:複雜郵件的一個示例

恆奇恆毅發表於2016-01-07
/**
 *中文附件名_回信地址_友好名稱
 *
 */
public class ComplexMail {
    public static void main(String[] args) throws Exception{
//        System.setProperty("socksProxyHost", "proxy2.lh.petrochina");
//        System.setProperty("socksProxyPort", "8080");

        Properties props = new Properties();
        props.setProperty("mail.smtp.auth", "true");
        props.setProperty("mail.transport.protocol", "smtp");
        props.setProperty("mail.host", "smtp.sohu.com");

        Session session = Session.getInstance(props,
                new Authenticator()
                {
                    @Override/*策略模式,程式碼封裝*/
                    protected PasswordAuthentication getPasswordAuthentication()
                    {
                        return new PasswordAuthentication("xxssyyyyssxx","xsy881026");
                    }
                }

        );
        session.setDebug(true);
        
        
        MimeMessage msg = new MimeMessage(session);
        /*傳送人*/
        msg.setFrom(new InternetAddress("xxssyyyyssxx@sohu.com"));
        msg.setSubject("複雜郵件生產");        

        /*回覆人,如果不設定表示回覆給傳送人*/
        msg.setReplyTo(new Address[]{new InternetAddress("yanshixiong@126.com")});
        //msg.setRecipients(RecipientType.TO,InternetAddress.parse(MimeUtility.encodeText("熊詩言") + " <xxssyyyyssxx@sohu.com>," + MimeUtility.encodeText("熊詩言") + " <xxssyyyyssxx@126.com>"));
        msg.setRecipients(RecipientType.TO,InternetAddress.parse("xxssyyyyssxx@126.com"));

        
        //郵件是一個multipart/mixed複雜物件
        /*設定為mixed,related,alternative不然會出現ParseException*/
        MimeMultipart msgMultipart = new MimeMultipart("mixed");
        msg.setContent(msgMultipart);


        /*附件1*/
        MimeBodyPart attch1 = new MimeBodyPart();        
        /*附件2*/
        MimeBodyPart attch2 = new MimeBodyPart();        
        /*具體內容*/
        MimeBodyPart content = new MimeBodyPart();
        msgMultipart.addBodyPart(attch1);        
        msgMultipart.addBodyPart(attch2);        
        msgMultipart.addBodyPart(content);

        /*附件1的設定*/
        DataSource ds1 = new FileDataSource(
                "D:\\Users\\熊詩言\\Desktop\\javamail\\src\\resource\\Java培訓.txt"    
            );
        DataHandler dh1 = new DataHandler(ds1 );
        attch1.setDataHandler(dh1);
        /*使用MimeUtility.encodeText進行中文編碼,否則顯示不出來*/
        attch1.setFileName(
                MimeUtility.encodeText("java培訓.txt")
                //首先你的中文編碼是什麼?然後對中文編碼的二進位制進行QuotedPrintable或者Base64編碼
                //=?UTF-8?Q?.....?=
                //=?GBK?B?.....?=
                );

        /*附件2的設定*/
        DataSource ds2 = new FileDataSource(
                "D:\\Users\\熊詩言\\Desktop\\javamail\\src\\resource\\slogo.gif"        
            );
        DataHandler dh2 = new DataHandler(ds2 );
        attch2.setDataHandler(dh2);        
        attch2.setFileName("slogo.gif");
        
        /*content是一個multipart/related複雜物件*/
        MimeMultipart bodyMultipart = new MimeMultipart("related");
        content.setContent(bodyMultipart);
        /*內容有html和圖片*/
        MimeBodyPart htmlPart = new MimeBodyPart();        /*這個也可以設定成為純文字和HTML的alternative*/
        MimeBodyPart gifPart = new MimeBodyPart();        
        bodyMultipart.addBodyPart(htmlPart);
        bodyMultipart.addBodyPart(gifPart);        

        /*html部分呢*/
        htmlPart.setContent("你們的Java培訓真的是最牛的嗎?大家都這麼說,我想跟你們比試一下!這可是我自己用程式生成和傳送的郵件哦!<img src='cid:http://www.itcast.cn/logo.gif'>"
                    , "text/html;charset=gbk");

        /*圖片部分呢*/
        DataSource gifds = new FileDataSource(
                "D:\\Users\\熊詩言\\Desktop\\javamail\\src\\resource\\logo.gif"    
            );
        DataHandler gifdh = new DataHandler(gifds);        
        gifPart.setDataHandler(gifdh);
        gifPart.setHeader("Content-ID", "http://www.itcast.cn/logo.gif");//被別的引用CID:XXXXXX
        
        /*內容生產完事兒了一定儲存*/
        msg.saveChanges();

        
        /*儲存到檔案中*/
        OutputStream ips = new FileOutputStream("demo2.eml");
        msg.writeTo(ips);
        ips.close();
        
        Transport.send(msg);
    }

}

相關文章