最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2016年02月23日 08:53:48   作者:chenssy  
這篇文章主要介紹了Java中使用Java Mail多發(fā)郵件及郵件的驗(yàn)證和附件實(shí)現(xiàn),包括在郵件中加入圖片等功能的實(shí)現(xiàn)講解,需要的朋友可以參考下

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

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ì)象就是幫助用戶(hù)進(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è)方法就可以獲取用戶(hù)名和密碼了。即可完成用戶(hù)信息驗(yàn)證。

 實(shí)例如下:

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("chenssy995812509@163.com")); 
     
    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("2222@qq.cpm")}); 
    msg.setRecipients(RecipientType.TO, InternetAddress.parse("995812509@qq.com,1247723213@qq.com")); 
     
    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)有一定的了解。

201622384926751.jpg (418×451)

       上面這幅圖片展示了一封復(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)系如下圖:

201622385027101.jpg (568×270)

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:

201622385127929.jpg (612×458)

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

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("陳明")+"\"<chenssy995812509@163.com>")); 
    message.setRecipients(RecipientType.TO, new Address[]{new InternetAddress("995812509@qq.com")}); 
     
    //郵件正文 
    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.itcast.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); 
  } 
 
} 

相關(guān)文章

  • RocketMQ4.5.2 修改mqnamesrv 和 mqbroker的日志路徑操作

    RocketMQ4.5.2 修改mqnamesrv 和 mqbroker的日志路徑操作

    這篇文章主要介紹了RocketMQ 4.5.2 修改mqnamesrv 和 mqbroker的日志路徑操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 詳解利用SpringCloud搭建一個(gè)最簡(jiǎn)單的微服務(wù)框架

    詳解利用SpringCloud搭建一個(gè)最簡(jiǎn)單的微服務(wù)框架

    這篇文章主要介紹了詳解利用SpringCloud搭建一個(gè)最簡(jiǎn)單的微服務(wù)框架,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • spring自定義注解及使用方法詳細(xì)例子

    spring自定義注解及使用方法詳細(xì)例子

    這篇文章主要給大家介紹了關(guān)于spring自定義注解及使用方法的相關(guān)資料,Spring 是一個(gè)非常強(qiáng)大的框架,可以使用自定義注解來(lái)完成許多任務(wù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • JAVA虛擬機(jī)中 -D, -X, -XX ,-server參數(shù)使用

    JAVA虛擬機(jī)中 -D, -X, -XX ,-server參數(shù)使用

    本文主要介紹了JAVA虛擬機(jī)中 -D, -X, -XX ,-server參數(shù)使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • myeclipse開(kāi)發(fā)servlet_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    myeclipse開(kāi)發(fā)servlet_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    MyEclipse,是在eclipse基礎(chǔ)上加上自己的插件開(kāi)發(fā)而成的功能強(qiáng)大的企業(yè)級(jí)集成開(kāi)發(fā)環(huán)境,主要用于Java、Java EE以及移動(dòng)應(yīng)用的開(kāi)發(fā)。下面這篇文章主要給大家介紹了關(guān)于myeclipse開(kāi)發(fā)servlet的相關(guān)資料,需要的朋友可以參考下。
    2017-07-07
  • java實(shí)現(xiàn)掃雷游戲控制臺(tái)版

    java實(shí)現(xiàn)掃雷游戲控制臺(tái)版

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)掃雷游戲控制臺(tái)版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • java中&與&&的區(qū)別

    java中&與&&的區(qū)別

    本文主要介紹了java中&與&&的區(qū)別,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • SpringBoot對(duì)PDF進(jìn)行模板內(nèi)容填充與電子簽名合并詳解

    SpringBoot對(duì)PDF進(jìn)行模板內(nèi)容填充與電子簽名合并詳解

    這篇文章主要為大家詳細(xì)介紹了SpringBoot對(duì)PDF進(jìn)行模板內(nèi)容填充與電子簽名合并的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考下
    2023-12-12
  • SpringBoot配置log4j2的實(shí)現(xiàn)示例

    SpringBoot配置log4j2的實(shí)現(xiàn)示例

    SpringBoot中默認(rèn)使用Logback作為日志框架,本文主要介紹了SpringBoot配置log4j2的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Java基礎(chǔ)之Spring5的核心之一IOC容器

    Java基礎(chǔ)之Spring5的核心之一IOC容器

    這篇文章主要介紹了Java基礎(chǔ)之Spring5的核心之一IOC容器,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04

最新評(píng)論

洛扎县| 海南省| 永宁县| 哈尔滨市| 朔州市| 鹤岗市| 麻城市| 青河县| 白水县| 绥芬河市| 通辽市| 迁西县| 油尖旺区| 凤山市| 临沭县| 安福县| 西丰县| 安塞县| 滕州市| 新平| 克什克腾旗| 怀化市| 贵定县| 什邡市| 巩义市| 新昌县| 叙永县| 江山市| 小金县| 东城区| 江永县| 蚌埠市| 九江县| 扶沟县| 锦屏县| 陵水| 盐山县| 康乐县| 武义县| 翁牛特旗| 花莲市|