javaMail(二)

嗯,更深的理解一下javaMail吧。
首先還是奉上大佬鏈接。
http://www.cnblogs.com/CryOnMyShoulder/p/9351382.html
https://blog.csdn.net/ghsau/article/category/1834295
然后開始寫一下筆記。

javaMail分為兩個部分,第一部分是API接口。第二部分是service provider,服務提供者(實現(xiàn)類)。包括SMTP,POP3,IMAP。
API中常用四部分。
Session:記錄環(huán)境信息:主機名,端口號,協(xié)議名稱,身份驗證。
Message:記錄郵件信息:主題,內容,發(fā)件人,發(fā)送抄送密送,附件。
Transport:連接郵箱的SMTP服務器,用來發(fā)送郵件。
Store:連接郵箱的POP3服務器,用來接收郵件。

服務器信息可以設置到Session中,也可以設置到Transport中。
收件人信息可以設置到Message中,也可以設置到Transport中。

接下來按發(fā)郵件的順序記錄知識點。

//0、MailBean類。
public class MailBean  {
    private String smtpHost = "";//服務器地址
    private String smtpPort = "";//服務器端口號
    private String smtpAddr = "";//發(fā)件人郵箱地址
    private String userName = "";//用戶名
    private String password = "";//用戶密碼
    private String smtpAuth = "";//身份驗證
    private String smtpDebug = "";//開啟debug調試
}
//發(fā)送郵件
public static void send(String to, String cs, String ms, 
    String subject,String content, MailBean mailBean, String fileList[]) {

    //1、建立會話,將環(huán)境信息放進Session中。
    Properties p = new Properties();          
    p.put("mail.smtp.auth", mailBean.getSmtpAuth());//身份驗證
    p.put("mail.transport.protocol", "smtp");//發(fā)送郵件協(xié)議名
    p.put("mail.smtp.host", mailBean.getSmtpHost());//郵件服務器主機名
    p.put("mail.smtp.port", mailBean.getSmtpPort());//郵件服務器端口
    Session session = Session.getInstance(p);

    //2、創(chuàng)建郵件對象
    Message msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress(mailBean.getSmtpAddr()));//new一個郵件地址,發(fā)件人
    Multipart multipart = new MimeMultipart();//郵件正文框(包括附件)
    BodyPart messageBodyPart = new MimeBodyPart();//郵件組成部分
    //發(fā)送
    if(to != null) {
    InternetAddress[] iaToList = new InternetAddress().parse(to);
    msg.setRecipients(Message.RecipientType.TO, iaToList); // 收件人
    }
    //抄送
    if(cs != null) {
        InternetAddress[] iaToListcs = new InternetAddress().parse(cs);
        msg.setRecipients(Message.RecipientType.CC, iaToListcs); // 抄送人
    }
    //密送
    if(ms != null) {
        InternetAddress[] iaToListms = new InternetAddress().parse(ms);
        msg.setRecipients(Message.RecipientType.BCC, iaToListms); // 密送人
        }
    msg.setSentDate(new Date()); // 發(fā)送日期
    msg.setSubject(subject); // 主題
    msg.setText(content); // 內容
    messageBodyPart.setContent(content, "text/html;charset=gbk");
    multipart.addBodyPart(messageBodyPart);//將body部分放在mult里
    //添加附件
    for(int index = 0; index < fileList.length; index++)
    {
        BodyPart mailArchieve = new MimeBodyPart();
        FileDataSource fds = new FileDataSource(fileList[index]);
        mailArchieve.setDataHandler(new DataHandler(fds));
        mailArchieve.setFileName(MimeUtility.encodeText(fds.getName(),"GBK", "B"));
        multipart.addBodyPart(mailArchieve);
    }
    msg.setContent(multipart);

    //3、郵件服務器進行驗證并發(fā)送郵件
    Transport tran = session.getTransport("smtp");
    tran.connect(mailBean.getSmtpHost(), mailBean.getUserName(), mailBean.getPassword());
    tran.sendMessage(msg, msg.getAllRecipients()); //發(fā)送
    System.out.println("郵件發(fā)送成功");
    tran.close();
}

剖析一下Message。
按代碼寫的順序,Message從頭到尾set進來的值分別是:
1>setFrom(發(fā)件人地址)
2>setRecipients(發(fā)送,抄送,密送人郵箱)
3>setSentDate(發(fā)送日期)
4>setSubject(主題)
5>setText(內容)——>純文本首選
6>setContent(multipart)——>由附件或者HTML文件格式消息首選

上面提到了multipart,就來說一下。把Message比喻成一個箱子,那么multipart就是箱子所有東西的集合。bodyPart就是箱子里每一個東西。

然后來說每個東西bodyPart。在代碼里bodyPart一共用過兩次:第一次是messageBodyPart,這個東西是正文。第二次是mailArchieve,這個東西的每個附件。

最后東西存在集合里,集合放在箱子里。
multipart.addBodyPart(messageBodyPart);
multipart.addBodyPart(mailArchieve);
msg.setContent(multipart);
補充:Message,Multipart,BodyPart 都是抽象類,實例化的時候必須實例化一個子類。MimeMessage,MimeMultipart,MimeBodyPart。

new InternetAddress() 和 new InternetAddress().parse() 區(qū)別。前者單發(fā),后者群發(fā)。注意群發(fā)時,郵箱地址之間用逗號分隔就好。

FileDataSource對象,下面這個圖能說明一切。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 本文包括:1、名詞解釋2、郵件收發(fā)過程3、JavaMail 知識概要4、發(fā)送一封符合 MIME 協(xié)議的 JavaM...
    廖少少閱讀 4,302評論 2 13
  • Java Mail 簡介 常見的郵件協(xié)議包括:SMTP(Simple Mail Transfer Protocol...
    Josaber閱讀 3,415評論 1 9
  • 概述 郵件相關的標準 廠商所提供的 JavaMail 服務程序可以有選擇地實現(xiàn)某些郵件協(xié)議,常見的郵件協(xié)議包括: ...
    靜默虛空閱讀 2,235評論 -1 4
  • 背景 近期需要實現(xiàn)一個郵件客戶端的項目,類似Foxmail,outlook客戶端。但項目只做消息轉發(fā),不需要完整實...
    BigBug77閱讀 4,672評論 0 4
  • 電子郵件的應用非常廣泛,例如在某網(wǎng)站注冊了一個賬戶,自動發(fā)送一封歡迎郵件,通過郵件找回密碼,自動批量發(fā)送活動信息等...
    huoyl0410閱讀 180評論 1 0

友情鏈接更多精彩內容