激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - Java中使用JavaMail多發(fā)郵件及郵件的驗(yàn)證和附件實(shí)現(xiàn)

Java中使用JavaMail多發(fā)郵件及郵件的驗(yàn)證和附件實(shí)現(xiàn)

2020-04-02 13:35chenssy JAVA教程

這篇文章主要介紹了Java中使用Java Mail多發(fā)郵件及郵件的驗(yàn)證和附件實(shí)現(xiàn),包括在郵件中加入圖片等功能的實(shí)現(xiàn)講解,需要的朋友可以參考下

多發(fā)和用戶驗(yàn)證
下面先來(lái)介紹如何實(shí)現(xiàn)將郵件發(fā)送給多個(gè)收件人和如何利用Authenticators對(duì)象實(shí)現(xiàn)用戶驗(yàn)證。  
指定收件人的時(shí)候,我們可以有兩種方法來(lái)指定。上篇博客是在發(fā)送郵件的時(shí)候臨時(shí)指定收件人,其實(shí)還可以在Message對(duì)象中指定。

?
1
message.addRecipient(Message.RecipientType.TO,new InternetAddress(” 995812509@99.com ”));

         這個(gè)只是發(fā)送給一個(gè)收件人而言,但是有多個(gè)收件人如何處理?同樣有兩種方法來(lái)處理。
          1、在發(fā)送郵件時(shí)Transport的sendMessage()方法指定收件人時(shí)是使用數(shù)組來(lái)指定收件人的,這個(gè)時(shí)候我們只需要多添加收件人地址即可完成。
          2、在使用Message對(duì)象來(lái)添加收件人我們可以使用InternetAddress對(duì)象的parse(String string)方法,該方法返回的是InternetAddress數(shù)組,這樣同樣可以實(shí)現(xiàn)發(fā)送給多個(gè)收件人。
 
         我們知道在進(jìn)行JavaMail開(kāi)發(fā)時(shí)我們必須要進(jìn)行授權(quán)校驗(yàn),授權(quán)校驗(yàn)?zāi)康氖亲柚顾巳我鈦y發(fā)郵件,減少垃圾郵件的產(chǎn)生。
我們可以在獲取Session對(duì)象的時(shí)候進(jìn)行校驗(yàn)。在Session對(duì)象中有這兩個(gè)方法:

  • getDefaultInstance(prop,authenticator),
  • getInstance(prop,authenticator),

這兩個(gè)方法都有一個(gè)共同的參數(shù)authenticator,該參數(shù)是一個(gè)Authenticator對(duì)象。Authenticator對(duì)象就是幫助用戶進(jìn)行信息驗(yàn)證的,完成授權(quán)校驗(yàn)。Authenticator對(duì)象中有g(shù)etPasswordAuthentication()方法,該方法返回返回一個(gè)PasswordAuthentication對(duì)象,PasswordAuthentication對(duì)象中有兩個(gè)方法:getPassword()、getUserName()也就說(shuō)我們將password、userName封裝在PasswordAuthentication對(duì)象,通過(guò)這兩個(gè)方法就可以獲取用戶名和密碼了。即可完成用戶信息驗(yàn)證。

 實(shí)例如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class JavaMail_02 {
  public static void main(String[] args) throws Exception {
    Properties props = new Properties();
    props.setProperty("mail.smtp.auth", "true");
    props.setProperty("mail.transport.protocol", "smtp");
    props.setProperty("mail.host", "smtp.163.com");
     
    Session session = Session.getInstance(props,
        new Authenticator(){
          protected PasswordAuthentication getPasswordAuthentication(){
            return new PasswordAuthentication("********","*********");
          }
    });
    session.setDebug(true);
     
    Message msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress("[email protected]"));
     
    msg.setSubject("JavaMail測(cè)試程序...");
    msg.setContent("<span style='color:red'>這是我的第二個(gè)javaMail測(cè)試程序....</span>", "text/html;charset=gbk");
    //msg.setRecipients(RecipientType.TO, new Address[]{new InternetAddress("1111@@qq.com"),new InternetAddress("[email protected]")});
    msg.setRecipients(RecipientType.TO, InternetAddress.parse("[email protected],[email protected]"));
     
    Transport.send(msg);
  }
 
}

 

帶有圖片和附件的郵件
在實(shí)際的電子郵件中我們一般都會(huì)涉及到更加復(fù)雜電子郵件結(jié)構(gòu),例如有附件、郵件正文里面包含圖片、包含歌曲等等,在這個(gè)時(shí)候我們就必須要對(duì)郵件的結(jié)構(gòu)有著很清晰的認(rèn)識(shí)。在進(jìn)行復(fù)合郵件開(kāi)發(fā)之前需要對(duì)復(fù)合郵件的結(jié)構(gòu)有一定的了解。

Java中使用JavaMail多發(fā)郵件及郵件的驗(yàn)證和附件實(shí)現(xiàn)

       上面這幅圖片展示了一封復(fù)合郵件的整體結(jié)構(gòu),我們可以看出一封復(fù)雜的電子郵件由多個(gè)部分組成。它有一個(gè)頭部和正文,但是正文并不是像以前那么簡(jiǎn)單了,而是由幾個(gè)部分組成。頭部需要起到一個(gè)指示的作用,它需要說(shuō)明正文需要使用什么樣的分隔符來(lái)分開(kāi),正文幾個(gè)部分之間使用什么樣的組合關(guān)系。對(duì)于上面電子郵件它由三個(gè)部分組成,每一部分都有自己頭和體,第一部分也由兩個(gè)部分組成。
 
         復(fù)合郵件的組合關(guān)系:
         正文部分之間有多種組合關(guān)系。組合關(guān)系如下圖:

Java中使用JavaMail多發(fā)郵件及郵件的驗(yàn)證和附件實(shí)現(xiàn)

alternative:選擇關(guān)系。上面的純文本和超文本之間就是一種選擇關(guān)系。
        related:關(guān)聯(lián)關(guān)系。假如上面的超文本正文是展示一幅圖片,那么我們?cè)诎l(fā)送郵件的時(shí)候必須要將這幅圖片包含到郵件中,也就是所謂的內(nèi)嵌資源,這個(gè)內(nèi)嵌資源是給超文本用的。所以他們兩者之間是一個(gè)關(guān)聯(lián)關(guān)系。
        mixed:混合關(guān)系。在純文本、超文本和內(nèi)嵌資源組成一個(gè)整體和,他們與附件并列著,兩者之間就是一個(gè)混合關(guān)系了。
 
        復(fù)合郵件組織結(jié)構(gòu)的API:

Java中使用JavaMail多發(fā)郵件及郵件的驗(yàn)證和附件實(shí)現(xiàn)

  MimeMessage類表示整封電子郵件。
        MimeBodyPart類表示郵件的一個(gè)MiME消息。
        MimeMultipart類表示一個(gè)由多個(gè)MIME消息組合成的組合MIME消息。
 
        下面一個(gè)實(shí)例:該郵件里面包含兩個(gè)附件、正文部分包括純文本和超文本,超文本表示展示一張圖片。源代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
public class JavaMail_03 {
 
  public static void main(String[] args) throws Exception {
    Properties props = new Properties();
    props.setProperty("mail.smtp.auth", "true");
    props.setProperty("mail.transport.protocol", "smtp");
    props.setProperty("mail.host", "smtp.163.com");
    Session session = Session.getInstance(props,
        new Authenticator(){
          protected PasswordAuthentication getPasswordAuthentication(){
            return new PasswordAuthentication("*****","******");
          }
    });
     
    Message message = new MimeMessage(session);
    message.setSubject("第三個(gè)JavaMail測(cè)試程序");
    message.setFrom(new InternetAddress("\""+MimeUtility.encodeText("陳明")+"\"<[email protected]>"));
    message.setRecipients(RecipientType.TO, new Address[]{new InternetAddress("[email protected]")});
     
    //郵件正文
    MimeMultipart multipart = new MimeMultipart("mixed");
    message.setContent(multipart);
    /*
     * 創(chuàng)建郵件的內(nèi)容
     * 包括一個(gè)郵件正文和兩個(gè)附件
     */
    MimeBodyPart content = new MimeBodyPart();   //郵件內(nèi)容
    MimeBodyPart attch1 = new MimeBodyPart();   //附件1
    MimeBodyPart attch2 = new MimeBodyPart();   //附件2
    //將郵件內(nèi)容添加到multipart中
    multipart.addBodyPart(content);
    multipart.addBodyPart(attch1);
    multipart.addBodyPart(attch2);
     
    //設(shè)置附件1
    DataSource ds1 = new FileDataSource("G:\\電子書(shū)\\oracle口令.txt");
    DataHandler dh1 = new DataHandler(ds1);
    attch1.setDataHandler(dh1);
    attch1.setFileName("oracle.txt");
    //設(shè)置附件2
    DataSource ds2 = new FileDataSource("G:\\電子書(shū)\\賬號(hào).txt");
    DataHandler dh2 = new DataHandler(ds2);
    attch2.setDataHandler(dh2);
    attch2.setFileName(MimeUtility.encodeText("賬號(hào).txt"));
    /*
     * 設(shè)置內(nèi)容(正文)---是一個(gè)復(fù)雜體
     * 包括HTML正文和顯示一張圖片
     */
    MimeMultipart bodyMultipart = new MimeMultipart("related");
    content.setContent(bodyMultipart);
    //構(gòu)造正文
    MimeBodyPart htmlBody = new MimeBodyPart();
    MimeBodyPart gifBody = new MimeBodyPart();
    bodyMultipart.addBodyPart(htmlBody);
    bodyMultipart.addBodyPart(gifBody);
   
    //設(shè)置圖片
    DataSource gifds = new FileDataSource("F:\\圖片\\圖片\\4.jpg");
    DataHandler gifdh = new DataHandler(gifds);
    gifBody.setDataHandler(gifdh);
    gifBody.setHeader("Content-ID", "<"+gifds.getName()+">");
    //gifBody.setHeader("Content-Location", "http://www.zmynmublwnt.cn/logo.gif");
    //設(shè)置HTML正文
    htmlBody.setContent("<span style='color:red;font-size:16px'>這是我的第三個(gè)JavaMail測(cè)試哦!包括了附件和圖片,有點(diǎn)兒復(fù)雜...</span><br>" +
        "顯示的圖片<img src='cid:4.jpg'/>", "text/html;charset=UTF-8");
     
     
    message.saveChanges();    //生成郵件
    Transport.send(message);
  }
 
}

 

延伸 · 閱讀

精彩推薦
  • JAVA教程深入淺析Java反射機(jī)制

    深入淺析Java反射機(jī)制

    Java反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;這種動(dòng)態(tài)...

    mrr3112020-01-15
  • JAVA教程在Java的Struts框架中ONGL表達(dá)式的基礎(chǔ)使用入門(mén)

    在Java的Struts框架中ONGL表達(dá)式的基礎(chǔ)使用入門(mén)

    這篇文章主要介紹了深入解析在Java的Struts框架中ONGL表達(dá)式的基礎(chǔ)使用入門(mén),Struts框架是Java的SSH三大web開(kāi)發(fā)框架之一,需要的朋友可以參考下 ...

    浮云中的毛驢5042020-03-03
  • JAVA教程快速排序的原理及java代碼實(shí)現(xiàn)

    快速排序的原理及java代碼實(shí)現(xiàn)

    網(wǎng)上關(guān)于快速排序的算法原理和算法實(shí)現(xiàn)都比較多,不過(guò)java是實(shí)現(xiàn)并不多,而且部分實(shí)現(xiàn)很難理解,和思路有點(diǎn)不搭調(diào)。所以整理了這篇文章。如果有不妥...

    hebedich1382020-03-26
  • JAVA教程Java I/O技術(shù)之文件操作詳解

    Java I/O技術(shù)之文件操作詳解

    這篇文章主要介紹了Java I/O技術(shù)之文件操作詳解,需要的朋友可以參考下 ...

    shichen20142742019-11-24
  • JAVA教程java繼承中的構(gòu)造方法實(shí)例解析

    java繼承中的構(gòu)造方法實(shí)例解析

    這篇文章主要介紹了java繼承中的構(gòu)造方法實(shí)例解析,針對(duì)繼承中的構(gòu)造方法的特點(diǎn)進(jìn)行了實(shí)例分析,需要的朋友可以參考下 ...

    shichen20144862019-12-01
  • JAVA教程java制作仿微信錄制小視頻控件

    java制作仿微信錄制小視頻控件

    這篇文章主要介紹了java制作仿微信錄制小視頻控件的代碼,錄制小視頻非常方便,有需要的小伙伴可以參考下。 ...

    hebedich2662019-12-15
  • JAVA教程java之swing表格實(shí)現(xiàn)方法

    java之swing表格實(shí)現(xiàn)方法

    這篇文章主要介紹了java之swing表格實(shí)現(xiàn)方法,以實(shí)例形式分析了swing構(gòu)建表格的方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下 ...

    cj_gameboy3022020-01-05
  • JAVA教程Java實(shí)現(xiàn)的矩陣乘法示例

    Java實(shí)現(xiàn)的矩陣乘法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的矩陣乘法,簡(jiǎn)單描述了矩陣乘法的原理,并結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)矩陣乘法的相關(guān)操作技巧,需要的朋友可以參考下...

    水中魚(yú)之19995242019-06-23
主站蜘蛛池模板: 久久精品中文字幕一区二区 | 色视频在线播放 | 久久精品re| 久久久久久久久国产精品 | 91成人一区 | 狠狠操精品视频 | 男女一边摸一边做羞羞视频免费 | 亚洲综合一区在线观看 | 女人叉开腿让男人桶 | 精品久久久久久国产三级 | 毛片一级片 | 一级毛片免费高清 | 在线观看国产 | 国产精品久久久久久久久久东京 | 久久千人斩 | h网站在线观看 | 九色中文 | 亚洲国产精品久久久久制服红楼梦 | 国产在线精品区 | omofun 动漫在线观看 | 色999国产| 欧美77| 国产精品免费一区二区三区四区 | 日本不卡一区二区三区在线观看 | 黄色av.com| 国产自在自线午夜精品视频在 | 国产成人网| 黄色a级片免费观看 | a免费视频 | 蜜桃视频观看麻豆 | 激情久久免费视频 | 亚洲白嫩在线观看 | 国产成人在线观看网站 | 国产三级三级三级三级 | 欧美jizzhd极品欧美 | 欧美毛片 | 久久久久免费精品国产小说色大师 | 精品国产视频一区二区三区 | 国产91在线播放九色 | va免费视频 | 中文字幕一区在线观看视频 |