欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

這兩個方法都有一個共同的參數(shù)authenticator,該參數(shù)是一個Authenticator對象。Authenticator對象就是幫助用戶進(jìn)行信息驗(yàn)證的,完成授權(quán)校驗(yàn)。Authenticator對象中有g(shù)etPasswordAuthentication()方法,該方法返回返回一個PasswordAuthentication對象,PasswordAuthentication對象中有兩個方法:getPassword()、getUserName()也就說我們將password、userName封裝在PasswordAuthentication對象,通過這兩個方法就可以獲取用戶名和密碼了。即可完成用戶信息驗(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測試程序..."); 
    msg.setContent("<span style='color:red'>這是我的第二個javaMail測試程序....</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í)際的電子郵件中我們一般都會涉及到更加復(fù)雜電子郵件結(jié)構(gòu),例如有附件、郵件正文里面包含圖片、包含歌曲等等,在這個時(shí)候我們就必須要對郵件的結(jié)構(gòu)有著很清晰的認(rèn)識。在進(jìn)行復(fù)合郵件開發(fā)之前需要對復(fù)合郵件的結(jié)構(gòu)有一定的了解。

201622384926751.jpg (418×451)

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

201622385027101.jpg (568×270)

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

201622385127929.jpg (612×458)

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

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("第三個JavaMail測試程序"); 
    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)容 
     * 包括一個郵件正文和兩個附件 
     */ 
    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:\\電子書\\oracle口令.txt"); 
    DataHandler dh1 = new DataHandler(ds1); 
    attch1.setDataHandler(dh1); 
    attch1.setFileName("oracle.txt"); 
    //設(shè)置附件2 
    DataSource ds2 = new FileDataSource("G:\\電子書\\賬號.txt"); 
    DataHandler dh2 = new DataHandler(ds2); 
    attch2.setDataHandler(dh2); 
    attch2.setFileName(MimeUtility.encodeText("賬號.txt")); 
    /* 
     * 設(shè)置內(nèi)容(正文)---是一個復(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'>這是我的第三個JavaMail測試哦!包括了附件和圖片,有點(diǎn)兒復(fù)雜...</span><br>" + 
        "顯示的圖片<img src='cid:4.jpg'/>", "text/html;charset=UTF-8"); 
     
     
    message.saveChanges();    //生成郵件 
    Transport.send(message); 
  } 
 
} 

相關(guān)文章

  • 一篇文章帶你入門java變量與類型

    一篇文章帶你入門java變量與類型

    這篇文章主要給大家介紹了關(guān)于Java基本知識點(diǎn)之變量和數(shù)據(jù)類型的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • java 獲取數(shù)據(jù)庫連接的實(shí)現(xiàn)代碼

    java 獲取數(shù)據(jù)庫連接的實(shí)現(xiàn)代碼

    本篇文章是對在java中獲取數(shù)據(jù)庫連接的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • SpringBoot使用@PostConstruct注解導(dǎo)入配置方式

    SpringBoot使用@PostConstruct注解導(dǎo)入配置方式

    這篇文章主要介紹了SpringBoot使用@PostConstruct注解導(dǎo)入配置方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java中封裝JDBC工具類的實(shí)例分析

    java中封裝JDBC工具類的實(shí)例分析

    在本篇內(nèi)容里小編給各位分享了一篇關(guān)于java中封裝JDBC工具類的實(shí)例分析,對此有興趣的朋友們可以學(xué)習(xí)下。
    2021-03-03
  • SpringBoot使用DevTools實(shí)現(xiàn)后端熱部署的過程詳解

    SpringBoot使用DevTools實(shí)現(xiàn)后端熱部署的過程詳解

    在Spring Boot項(xiàng)目中,Spring Boot官方提供你了Devtools熱部署模塊,通過maven的方式導(dǎo)入就能使用,本文主要SpringBoot通過DevTools實(shí)現(xiàn)熱部署,感興趣的朋友一起看看吧
    2023-11-11
  • 基于SSM?集成?Freemarker模板引擎的方法

    基于SSM?集成?Freemarker模板引擎的方法

    這篇文章主要介紹了SSM?集成?Freemarker模板引擎,SSM?架構(gòu)下一般采用?Freemarker,Spring?Boot?架構(gòu)下一般推薦采用?Thymeleaf?模板引擎,需要的朋友可以參考下
    2022-01-01
  • 解決Jackson解析嵌套類問題(MismatchedInputException)

    解決Jackson解析嵌套類問題(MismatchedInputException)

    這篇文章主要介紹了解決Jackson解析嵌套類問題(MismatchedInputException),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 二代身份證驗(yàn)證示例

    二代身份證驗(yàn)證示例

    這篇文章主要介紹了二代身份證驗(yàn)證示例,需要的朋友可以參考下
    2014-02-02
  • 淺談java String不可變的好處

    淺談java String不可變的好處

    這篇文章主要介紹了java String不可變的好處,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java中的類加載器_動力節(jié)點(diǎn)Java學(xué)院整理

    Java中的類加載器_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了Java中類加載器的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06

最新評論