亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaMail入門教程之創(chuàng)建郵件(2)

 更新時間:2016年11月23日 08:48:03   作者:汪先森  
這篇文章主要介紹了JavaMail入門教程之創(chuàng)建郵件的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

JavaMail API使用javax.mail.Message類來表示一封郵件,Message類是一個抽象類,所以我們需要使用其子類javax.mail.internet.MimeMessage類來創(chuàng)建Message類的實例對象,如果我們創(chuàng)建的是一個簡單文本郵件,那么MimeMessage類就可以滿足我們的需求了,但是如果需要創(chuàng)建一封包含內(nèi)嵌資源或者是帶附件的復(fù)雜郵件,則需要使用到JavaMail API中的MimeMessage、javax.mail.internet.MimeBodyPart和javax.mail.internet.MimeMultipart等類。

1、MimeMessage類表示整封郵件

2、MimeBodyPart類表示郵件的一個MIME消息

3、MimeMultipart類表示一個由多個MIME消息組合成的組合MIME消息。

這三個類的工作關(guān)系如下圖所示:

雖然應(yīng)用程序開發(fā)者在使用JavaMailAPI創(chuàng)建郵件內(nèi)容時,通常只需要使用MimeMessage,MimeBodyPart和MimeMultipart這3個主要的類,但是了解他們的類繼承關(guān)系也是必要的。下圖列出了這三個類的繼承關(guān)系以及常用方法。

下面用javax.mail.internet.MimeMessage類來創(chuàng)建一封簡單的文本郵件,

import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.FileOutputStream;

public class TextMessage {
 public static void main(String[] args) throws Exception {
 String from = "123456@qq.com";
 String to = "123456@163.com";
 String subject = "test";
 String body = "test!!!";

 // 創(chuàng)建Session實例對象
 Session session = Session.getDefaultInstance(new Properties());
 // 創(chuàng)建MimeMessage實例對象
 MimeMessage msg = new MimeMessage(session);
 // 設(shè)置發(fā)件人
 msg.setFrom(new InternetAddress(from));
 // 設(shè)置收件人
 msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
 // 設(shè)置發(fā)送日期
 msg.setSentDate(new Date());
 // 設(shè)置郵件主題
 msg.setSubject(subject);
 // 設(shè)置純文本內(nèi)容的郵件正文
 msg.setText(body);
 // 保存并生成最終的郵件內(nèi)容
 msg.saveChanges();
 // 把MimeMessage對象中的內(nèi)容寫入到文件中
 msg.writeTo(new FileOutputStream("c:\\test.eml"));
 }
}

我們用郵件客戶端(這里用foxmail)打開C盤下面的test.eml文件,可以看到如下信息,說明我們的郵件創(chuàng)建成功。

下面簡單解釋一下上面出現(xiàn)的一些類

1、MimeMessage類:上面介紹過MimeMessage是Message類的一個具體實現(xiàn)類,用來創(chuàng)建Message類的實例對象,這里構(gòu)造函數(shù)傳入了一個Session對象作為參數(shù);

2、Session類:該對象用于收集客戶端與郵件服務(wù)器之間的網(wǎng)絡(luò)連接信息和定義整個郵件程序所需的環(huán)境信息,這些信息作為Session對象的屬性保存在Session對象中,Session對象利用了java.util.Properties對象獲得了郵件服務(wù)器、用戶名、密碼信息和整個應(yīng)用程序都要使用到的共享信息,由于Session類的構(gòu)造方法是私有的,所以我們使用Session類提供的getDefaultInstance()這個靜態(tài)工廠方法獲得一個默認(rèn)的Session對象;

3、Properties類:該類表示了一個持久的屬性集,用于存放相關(guān)鍵值對信息作為參數(shù)來創(chuàng)建Session對象,這里構(gòu)造了一個空的集合作為參數(shù);

4、InternetAddress類:該類是抽象類Address類的一個子類,用來創(chuàng)建一個郵件地址;

5、RecipientType類:該類是Message類的一個內(nèi)部類,該類有3個靜態(tài)變量,TO表示收件人,CC表示抄送人(收件人知道抄送的人),BCC表示密送人(收件人不知道密送的人)。

 上面的郵件只是包含了簡單的文本,有時候我們需要使用HTML文件來豐富我們的郵件正文,例如使用HTML標(biāo)簽來對郵件正文進(jìn)行排版,使用HTML標(biāo)簽在郵件正文中引入一些圖片或者是聲音等。下面這段代碼創(chuàng)建了一個包含HTML格式的郵件

import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.FileOutputStream;

public class HtmlMessage {
 public static void main(String[] args) throws Exception {
 String from = "123456@qq.com";
 String to = "123456@163.com";
 String subject = "test";
 String body = "<h4>歡迎大家閱讀此郵件</h4>";
 // 創(chuàng)建Session實例對象
 Session session = Session.getDefaultInstance(new Properties());
 // 創(chuàng)建MimeMessage實例對象
 MimeMessage msg = new MimeMessage(session);
 // 設(shè)置發(fā)件人
 msg.setFrom(new InternetAddress(from));
 // 設(shè)置收件人
 msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
 // 設(shè)置發(fā)送日期
 msg.setSentDate(new Date());
 // 設(shè)置郵件主題
 msg.setSubject(subject);
 // 設(shè)置HTML格式的郵件正文
 msg.setContent(body, "text/html;charset=gb2312");
 // 保存并生成最終的郵件內(nèi)容
 msg.saveChanges();
 // 把MimeMessage對象中的內(nèi)容寫入到文件中
 msg.writeTo(new FileOutputStream("c:\\test.eml"));
 }
}

我們再用foxmail打開test.eml,顯示如下

與之前代碼不同的地方只是我們設(shè)置郵件內(nèi)容的時候用setContent方法代替了setText方法,并且指定了郵件正文的MIME類型為text/html。

現(xiàn)在我們學(xué)會了創(chuàng)建含有HTML標(biāo)簽的郵件了,不過有時我們可能需要在郵件中插入一些圖片來更直觀的表達(dá)我們的意思,那么這時候我們就需要用到MimeMultipart類與MimeBodyPart類了

import java.io.FileOutputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class PictureMessage {
 public static void main(String[] args) throws Exception {
 String from = "123456@qq.com";// 發(fā)件人地址
 String to = "123456@163.com"; // 收件人地址
 String subject = "HTML郵件";
 String body = "<a href=http://www.cnblogs.com>" + "歡迎大家訪問博客園</a></br>"
 + "<img src=\"c:\\dog.jpg\">";

 Session session = Session.getDefaultInstance(new Properties());
 // 創(chuàng)建MimeMessage對象,并設(shè)置各種郵件頭字段
 MimeMessage message = new MimeMessage(session);
 message.setFrom(new InternetAddress(from));
 message.setRecipients(Message.RecipientType.TO,
 InternetAddress.parse(to));
 message.setSubject(subject);

 // 創(chuàng)建一個子類型為"related"的MimeMultipart對象。
 MimeMultipart multipart = new MimeMultipart("related");

 /*
 * 創(chuàng)建一個表示HTML正文的MimeBodyPart對象, 并將它加入到前面創(chuàng)建的MimeMultipart對象中
 */
 MimeBodyPart htmlBodyPart = new MimeBodyPart();
 htmlBodyPart.setContent(body, "text/html;charset=gb2312");
 multipart.addBodyPart(htmlBodyPart);

 /*
 * 創(chuàng)建一個表示圖片內(nèi)容的MimeBodyPart對象, 并將它加入到前面創(chuàng)建的MimeMultipart對象中
 */
 MimeBodyPart gifBodyPart = new MimeBodyPart();
 FileDataSource fds = new FileDataSource("c:\\dog.jpg");
 gifBodyPart.setFileName(fds.getName());
 gifBodyPart.setDataHandler(new DataHandler(fds));
 multipart.addBodyPart(gifBodyPart);

 /*
 * 將MimeMultipart對象設(shè)置為整個郵件的內(nèi)容, 要注意調(diào)用saveChanges方法進(jìn)行更新
 */
 message.setContent(multipart);
 message.saveChanges();

 // 把MimeMessage對象中的內(nèi)容寫入到文件中
 message.writeTo(new FileOutputStream("c:\\PictureMessage.eml"));
 }
}

代碼看起來似乎有點小復(fù)雜,可以再看看上面提到的MimeMessage,MimeMultipart與MimeBodyPart這三個類之間的關(guān)系圖,這樣會更會容易理解上面的代碼,我們打開PictureMessage.eml,看到如下信息,說明我們成功的創(chuàng)建了一個帶有圖片的郵件了,并且該圖片以附件的形式包含在郵件中了

MimeMultipart有兩種構(gòu)造函數(shù),

public MimeMultipart()
public MimeMultipart(String subtype)


第一種是無參數(shù)的,其默認(rèn)的實例對象的MIME類型為mixed,第二種制定一個類型來創(chuàng)建MimeMultipart類的實例對象,其有三種常用的類型:mixed,related,alternative,這三種類型在MIME中的組合關(guān)系如下所示:

現(xiàn)在我們用上面所示的這種組合關(guān)系來創(chuàng)建一封帶有附件,并且正文中帶有內(nèi)嵌資源的郵件

import java.io.FileOutputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class ComplexMessage {
 public static void main(String[] args) throws Exception {
 Session session = Session.getDefaultInstance(new Properties());
 MimeMessage message = createMessage(session);
 message.writeTo(new FileOutputStream("c:\\ComplexMessage.eml"));
 }

 public static MimeMessage createMessage(Session session) throws Exception {
 String from = "123456@qq.com";// 發(fā)件人地址
 String to = "123456@163.com"; // 收件人地址
 String subject = "HTML郵件"; // 郵件主題
 String body = "<a href=http://www.cnblogs.com>" + "歡迎大家訪問博客園</a></br>"
 + "<img src=\"c:\\dog.jpg\">";

 MimeMessage message = new MimeMessage(session);
 message.setFrom(new InternetAddress(from));
 message.setRecipients(Message.RecipientType.TO,
 InternetAddress.parse(to));
 message.setSubject(subject);

 // 創(chuàng)建代表郵件正文和附件的各個MimeBodyPart對象
 MimeBodyPart contentPart = createContent(body, "c:\\dog.jpg");
 // 下面的附件可以是視頻或者是音頻
 MimeBodyPart attachPart1 = createAttachment("c:\\音樂.MP3");
 MimeBodyPart attachPart2 = createAttachment("c:\\視頻.avi");

 // 創(chuàng)建用于組合郵件正文和附件的MimeMultipart對象
 MimeMultipart allMultipart = new MimeMultipart("mixed");
 allMultipart.addBodyPart(contentPart);
 allMultipart.addBodyPart(attachPart1);
 allMultipart.addBodyPart(attachPart2);

 // 設(shè)置整個郵件內(nèi)容為最終組合出的MimeMultipart對象
 message.setContent(allMultipart);
 message.saveChanges();
 return message;
 }

 public static MimeBodyPart createContent(String body, String filename)
 throws Exception {
 /*
 * 創(chuàng)建代表組合MIME消息的MimeMultipart對象, 和將該MimeMultipart對象保存到的MimeBodyPart對象
 */
 MimeBodyPart contentPart = new MimeBodyPart();
 MimeMultipart contentMultipart = new MimeMultipart("related");

 /*
 * 創(chuàng)建用于保存HTML正文的MimeBodyPart對象, 并將它保存到MimeMultipart中
 */
 MimeBodyPart htmlBodyPart = new MimeBodyPart();
 htmlBodyPart.setContent(body, "text/html;charset=gb2312");
 contentMultipart.addBodyPart(htmlBodyPart);

 /*
 * 創(chuàng)建用于保存圖片的MimeBodyPart對象, 并將它保存到MimeMultipart中
 */
 MimeBodyPart gifBodyPart = new MimeBodyPart();
 FileDataSource fds = new FileDataSource(filename);
 gifBodyPart.setDataHandler(new DataHandler(fds));
 contentMultipart.addBodyPart(gifBodyPart);

 // 將MimeMultipart對象保存到MimeBodyPart對象中
 contentPart.setContent(contentMultipart);
 return contentPart;
 }

 public static MimeBodyPart createAttachment(String filename)
 throws Exception {
 // 創(chuàng)建保存附件的MimeBodyPart對象,并加入附件內(nèi)容和相應(yīng)信息
 MimeBodyPart attachPart = new MimeBodyPart();
 FileDataSource fds = new FileDataSource(filename);
 attachPart.setDataHandler(new DataHandler(fds));
 attachPart.setFileName(fds.getName());
 return attachPart;
 }
}

打開ComplexMessage.eml文件,可以看到如下內(nèi)容:

現(xiàn)在我們學(xué)會了如何創(chuàng)建一封純文本的郵件,帶有HTML格式的郵件,以及帶有內(nèi)嵌圖片與附件的郵件了,下一篇將介紹如何發(fā)送郵件JavaMail入門第三篇 發(fā)送郵件

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring?Cloud?Eureka(全面解析)?大白話

    Spring?Cloud?Eureka(全面解析)?大白話

    這篇文章主要介紹了Spring?Cloud?Eureka(全面解析)?大白話,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java實例化的幾種方法總結(jié)

    Java實例化的幾種方法總結(jié)

    這篇文章主要介紹了Java實例化的幾種方法總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • RestTemplate報錯I/O?error?on?POST?request?for的解決辦法

    RestTemplate報錯I/O?error?on?POST?request?for的解決辦法

    這篇文章主要給大家介紹了關(guān)于RestTemplate報錯I/O?error?on?POST?request?for的解決辦法,文中通過代碼實例將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • java?Map接口子類HashMap遍歷與LinkedHashMap詳解

    java?Map接口子類HashMap遍歷與LinkedHashMap詳解

    這篇文章主要介紹了java?Map接口子類HashMap遍歷與LinkedHashMap詳解,Map接口下的集合與Collection接口下的集合,它們存儲數(shù)據(jù)的形式不同,感興趣的小伙伴可以參考下面文章詳細(xì)內(nèi)容介紹
    2022-06-06
  • Java常用內(nèi)置注解用法分析

    Java常用內(nèi)置注解用法分析

    這篇文章主要介紹了Java常用內(nèi)置注解用法,結(jié)合實例形式分析了java使用@SuppressWarnings關(guān)閉警告信息以及@Depreca標(biāo)注的元素不使用兩種注解使用方法,需要的朋友可以參考下
    2019-08-08
  • Java動態(tài)規(guī)劃之編輯距離問題示例代碼

    Java動態(tài)規(guī)劃之編輯距離問題示例代碼

    這篇文章主要介紹了Java動態(tài)規(guī)劃之編輯距離問題示例代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java volatile的適用場景實例詳解

    Java volatile的適用場景實例詳解

    在本文里我們給大家整理了一篇關(guān)于Java volatile的適用場景實例內(nèi)容和知識點,需要的朋友們可以學(xué)習(xí)下。
    2019-08-08
  • SSH框架網(wǎng)上商城項目第26戰(zhàn)之訂單支付后發(fā)送短信提醒

    SSH框架網(wǎng)上商城項目第26戰(zhàn)之訂單支付后發(fā)送短信提醒

    這篇文章主要為大家詳細(xì)介紹了SSH框架網(wǎng)上商城項目第26戰(zhàn)之訂單支付后發(fā)送短信提醒,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java中Reactor的反應(yīng)器模式詳解

    Java中Reactor的反應(yīng)器模式詳解

    這篇文章主要介紹了Java中Reactor的反應(yīng)器模式詳解,Reactor反應(yīng)器模式有點兒類似事件驅(qū)動模式,當(dāng)有事件觸發(fā)時,事件源會將事件dispatch分發(fā)到handler處理器進(jìn)行事件處理,反應(yīng)器模式中的反應(yīng)器角色類似于事件驅(qū)動模式中的dispatcher事件分發(fā)器角色,需要的朋友可以參考下
    2023-12-12
  • JavaWeb實現(xiàn)學(xué)生信息管理系統(tǒng)(3)

    JavaWeb實現(xiàn)學(xué)生信息管理系統(tǒng)(3)

    這篇文章主要為大家詳細(xì)介紹了JavaWeb實現(xiàn)學(xué)生信息管理系統(tǒng)第三篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論