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

JavaMail實現(xiàn)帶附件的郵件發(fā)送

 更新時間:2022年08月11日 12:01:05   作者:楓眠cc  
這篇文章主要為大家詳細(xì)介紹了JavaMail實現(xiàn)帶附件的郵件發(fā)送,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了JavaMail實現(xiàn)帶附件的郵件發(fā)送的具體代碼,供大家參考,具體內(nèi)容如下

發(fā)送純文本的郵件

package com.haiwen.test;
?
import java.util.Date;
import java.util.Properties;
?
import javax.mail.Message.RecipientType;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
?
import org.junit.Test;
?
public class MessageDemo1 {
?
?? ?@Test
?? ?public void testSend() throws Exception {
?
?? ??? ?// 0. 郵件參數(shù)
?? ??? ?Properties prop = new Properties();
?? ??? ?prop.put("mail.transport.protocol", "smtp"); // 協(xié)議
?? ??? ?prop.put("mail.smtp.host", "smtp.163.com"); // 主機(jī)
?? ??? ?// prop.put("mail.smtp.port", 25); // 端口
?? ??? ?prop.put("mail.smtp.auth", "true"); // 用戶密碼認(rèn)證
?? ??? ?prop.put("mail.debug", "true"); // 調(diào)試模式
?
?? ??? ?// 1. 創(chuàng)建一個郵件的會話
?? ??? ?Session session = Session.getDefaultInstance(prop);
?? ??? ?// 2. 創(chuàng)建郵件體對象 (整封郵件對象)
?? ??? ?MimeMessage message = new MimeMessage(session);
?? ??? ?// 3. 設(shè)置郵件體參數(shù):
?? ??? ?// 3.1 標(biāo)題
?? ??? ?message.setSubject("我的第一封郵件");
?? ??? ?// 3.2 郵件發(fā)送時間
?? ??? ?message.setSentDate(new Date());
?? ??? ?// 3.3 發(fā)件人
?? ??? ?message.setSender(new InternetAddress("xxx@163.com"));
?? ??? ?// 3.4 接收人
?? ??? ?message.setRecipient(RecipientType.TO, new InternetAddress("xxx.com"));
?? ??? ?// 3.5內(nèi)容
?? ??? ?message.setText("你好,已經(jīng)發(fā)送成功! ?正文...."); // 簡單純文本郵件
?? ??? ?message.saveChanges(); // 保存郵件(可選)
?
?? ??? ?// 4. 發(fā)送
?? ??? ?Transport trans = session.getTransport();
?? ??? ?trans.connect("xxx@163.com", "xxx");
?? ??? ?// 發(fā)送郵件
?? ??? ?trans.sendMessage(message, message.getAllRecipients());
?? ??? ?trans.close();
?? ?}
}

MIME組合關(guān)系

  • multipart/mixed類型

如果一封郵件中含有附件,那郵件的Content-Type域中必須定義multipart/mixed類型,郵件通過multipart/mixed類型中定義的boundary標(biāo)識將附件內(nèi)容同郵件其它內(nèi)容分成不同的段。

  • multipart/related類型

MIME郵件中除了可以攜帶各種附件外,還可以將其它內(nèi)容以內(nèi)嵌資源的方式存儲在郵件中。比如我們在發(fā)送html格式的郵件內(nèi)容時,可能使用圖像作為html的背景,html文本會被存儲在alternative段中,而作為背景的圖像則會存儲在multipart/related類型定義的段中。

  • multipart/alternative類型

MIME郵件可以傳送超文本內(nèi)容,但出于兼容性的考慮,一般在發(fā)送超文本格式內(nèi)容的同時會同時發(fā)送一個純文本內(nèi)容的副本,如果郵件中同時存在純文本和超文本內(nèi)容,則郵件需要在Content-Type域中定義multipart/alternative類型,郵件通過其boundary中的分段標(biāo)識將純文本、超文本和郵件的其它內(nèi)容分成不同的段。

郵件結(jié)構(gòu)

JAF框架

JAF(JavaBeans Activation Framework,JavaBeans激活框架)是一個專用的數(shù)據(jù)處理框架,它用于封裝數(shù)據(jù),并為應(yīng)用程序提供訪問和操作數(shù)據(jù)的接口。

JAF的主要作用在于讓Java應(yīng)用程序知道如何對一個數(shù)據(jù)源進(jìn)行查看、編輯和打印等操作。對于通過JAF封裝的數(shù)據(jù),應(yīng)用程序通過JAF提供的接口可以完成如下功能:

  • 訪問數(shù)據(jù)源中的數(shù)據(jù)
  • 獲知數(shù)據(jù)源的數(shù)據(jù)類型
  • 獲知可對數(shù)據(jù)進(jìn)行的各種操作
  • 用戶對數(shù)據(jù)執(zhí)行某種操作時,自動創(chuàng)建執(zhí)行該操作的軟件部件的實例對象

JavaMail API可以利用JAF從某種數(shù)據(jù)源中讀取數(shù)據(jù)和獲知數(shù)據(jù)的MIME類型,并用這些數(shù)據(jù)生成MIME消息中的消息體和消息類型。

發(fā)送帶文本、圖片的郵件

package com.haiwen.test;
?
import java.io.File;
import java.util.Date;
import java.util.Properties;
?
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message.RecipientType;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
?
import org.junit.Test;
?
public class MessageDemo2 {
?
?? ?// 初始化參數(shù)
?? ?private static Properties prop;
?? ?// 發(fā)件人
?? ?private static InternetAddress sendMan = null;
?? ?static {
?? ??? ?prop = new Properties();
?? ??? ?prop.put("mail.transport.protocol", "smtp"); // 協(xié)議
?? ??? ?prop.put("mail.smtp.host", "smtp.163.com"); // 主機(jī)
?? ??? ?// prop.put("mail.smtp.port", 25); // 端口
?? ??? ?prop.put("mail.smtp.auth", "true"); // 用戶密碼認(rèn)證
?? ??? ?prop.put("mail.debug", "true"); // 調(diào)試模式
?? ??? ?try {
?? ??? ??? ?sendMan = new InternetAddress("xxx@163.com");
?? ??? ?} catch (AddressException e) {
?? ??? ??? ?throw new RuntimeException(e);
?? ??? ?}
?? ?}
?
?? ?@Test
?? ?public void testSend() throws Exception {
?? ??? ?// 1. 創(chuàng)建郵件會話
?? ??? ?Session session = Session.getDefaultInstance(prop);
?? ??? ?// 2. 創(chuàng)建郵件對象
?? ??? ?MimeMessage message = new MimeMessage(session);
?? ??? ?// 3. 設(shè)置參數(shù):標(biāo)題、發(fā)件人、收件人、發(fā)送時間、內(nèi)容
?? ??? ?message.setSubject("帶圖片郵件");
?? ??? ?message.setSender(sendMan);
?? ??? ?message.setRecipient(RecipientType.TO, new InternetAddress("xxx.com"));
?? ??? ?message.setSentDate(new Date());
?
?? ??? ?/*************** 設(shè)置郵件內(nèi)容: 多功能用戶郵件 (related) *******************/
?? ??? ?// 4.1 構(gòu)建一個多功能郵件塊
?? ??? ?MimeMultipart related = new MimeMultipart("related");
?? ??? ?// 4.2 構(gòu)建多功能郵件塊內(nèi)容 = 左側(cè)文本 + 右側(cè)圖片資源
?? ??? ?MimeBodyPart content = new MimeBodyPart();
?? ??? ?MimeBodyPart resource = new MimeBodyPart();
?
?? ??? ?// 設(shè)置具體內(nèi)容: a.資源(圖片)
?? ??? ?String filePath = MessageDemo2.class.getResource("mm.png").getPath();
?? ??? ?DataSource ds = new FileDataSource(new File(filePath));
? ? ? ? ? ? ? ? //使用到了JAF框架把磁盤上的文件加到resource
?? ??? ?DataHandler handler = new DataHandler(ds);
?? ??? ?resource.setDataHandler(handler);
?? ??? ?resource.setContentID("mm.png"); // 設(shè)置資源名稱,給外鍵引用
?
?? ??? ?// 設(shè)置具體內(nèi)容: b.文本
?? ??? ?content.setContent("<img src='cid:mm.png'/> ?好哈哈!", "text/html;charset=UTF-8");
?
?? ??? ?related.addBodyPart(content);
?? ??? ?related.addBodyPart(resource);
?
?? ??? ?/******* 4.3 把構(gòu)建的復(fù)雜郵件快,添加到郵件中 ********/
?? ??? ?message.setContent(related);
?
?? ??? ?// 5. 發(fā)送
?? ??? ?Transport trans = session.getTransport();
?? ??? ?trans.connect("xxx@163.com", "xxx");
?? ??? ?trans.sendMessage(message, message.getAllRecipients());
?? ??? ?trans.close();
?? ?}
}

發(fā)送帶文本、圖片、附件的郵件

package com.haiwen.test;
?
import java.io.File;
import java.util.Date;
import java.util.Properties;
?
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message.RecipientType;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
?
import org.junit.Test;
?
public class MessageDemo3 {
?
?? ?// 初始化參數(shù)
?? ?private static Properties prop;
?? ?// 發(fā)件人
?? ?private static InternetAddress sendMan = null;
?? ?static {
?? ??? ?prop = new Properties();
?? ??? ?prop.put("mail.transport.protocol", "smtp"); // 指定協(xié)議
?? ??? ?prop.put("mail.smtp.host", "smtp.163.com"); // 主機(jī) stmp.qq.com
?? ??? ?// prop.put("mail.smtp.port", 25); // 端口
?? ??? ?prop.put("mail.smtp.auth", "true"); // 用戶密碼認(rèn)證
?? ??? ?prop.put("mail.debug", "true"); // 調(diào)試模式
?? ??? ?try {
?? ??? ??? ?sendMan = new InternetAddress("xxx@163.com");
?? ??? ?} catch (AddressException e) {
?? ??? ??? ?throw new RuntimeException(e);
?? ??? ?}
?? ?}
?
?? ?@Test
?? ?public void testSend() throws Exception {
?? ??? ?// 1. 創(chuàng)建郵件會話
?? ??? ?Session session = Session.getDefaultInstance(prop);
?? ??? ?// 2. 創(chuàng)建郵件對象
?? ??? ?MimeMessage message = new MimeMessage(session);
?? ??? ?// 3. 設(shè)置參數(shù):標(biāo)題、發(fā)件人、收件人、發(fā)送時間、內(nèi)容
?? ??? ?message.setSubject("帶圖片郵件");
?? ??? ?message.setSender(sendMan);
?? ??? ?message.setRecipient(RecipientType.TO, new InternetAddress("xxx.com"));
?? ??? ?message.setSentDate(new Date());
?
?? ??? ?/*
?? ??? ? * 帶附件(圖片)郵件開發(fā)
?? ??? ? */
?? ??? ?// 構(gòu)建一個總的郵件塊
?? ??? ?MimeMultipart mixed = new MimeMultipart("mixed");
?? ??? ?// ---> 總郵件快,設(shè)置到郵件對象中
?? ??? ?message.setContent(mixed);
?? ??? ?// 左側(cè): (文本+圖片資源)
?? ??? ?MimeBodyPart left = new MimeBodyPart();
?? ??? ?// 右側(cè): 附件
?? ??? ?MimeBodyPart right = new MimeBodyPart();
?? ??? ?// 設(shè)置到總郵件塊
?? ??? ?mixed.addBodyPart(left);
?? ??? ?mixed.addBodyPart(right);
?
?? ??? ?/****** 附件 ********/
?? ??? ?String attr_path = this.getClass().getResource("a.docx").getPath();
?? ??? ?DataSource attr_ds = new FileDataSource(new File(attr_path));
?? ??? ?DataHandler attr_handler = new DataHandler(attr_ds);
?? ??? ?right.setDataHandler(attr_handler);
?? ??? ?right.setFileName("a.docx");
?
?? ??? ?/*************** 設(shè)置郵件內(nèi)容: 多功能用戶郵件 (related) *******************/
?? ??? ?// 4.1 構(gòu)建一個多功能郵件塊
?? ??? ?MimeMultipart related = new MimeMultipart("related");
?? ??? ?// ----> 設(shè)置到總郵件快的左側(cè)中
?? ??? ?left.setContent(related);
?
?? ??? ?// 4.2 構(gòu)建多功能郵件塊內(nèi)容 = 左側(cè)文本 + 右側(cè)圖片資源
?? ??? ?MimeBodyPart content = new MimeBodyPart();
?? ??? ?MimeBodyPart resource = new MimeBodyPart();
?
?? ??? ?// 設(shè)置具體內(nèi)容: a.資源(圖片)
?? ??? ?String filePath = MessageDemo3.class.getResource("mm.png").getPath();
?? ??? ?DataSource ds = new FileDataSource(new File(filePath));
?? ??? ?DataHandler handler = new DataHandler(ds);
?? ??? ?resource.setDataHandler(handler);
?? ??? ?resource.setContentID("mm.png"); // 設(shè)置資源名稱,給外鍵引用
?
?? ??? ?// 設(shè)置具體內(nèi)容: b.文本
?? ??? ?content.setContent("<img src='cid:mm.png'/> ?好哈哈!", "text/html;charset=UTF-8");
?
?? ??? ?related.addBodyPart(content);
?? ??? ?related.addBodyPart(resource);
?
?? ??? ?// 5. 發(fā)送
?? ??? ?Transport trans = session.getTransport();
?? ??? ?trans.connect("xxx@163.com", "xxx");
?? ??? ?trans.sendMessage(message, message.getAllRecipients());
?? ??? ?trans.close();
?? ?}
}

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

相關(guān)文章

  • SpringBoot整合Log4j2及配置步驟

    SpringBoot整合Log4j2及配置步驟

    這篇文章主要介紹了SpringBoot整合Log4j2以及配置詳解,刪除spring-boot-starter-parent默認(rèn)使用spring-boot-starter-logging依賴,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • Java連接 JDBC基礎(chǔ)知識(操作數(shù)據(jù)庫:增刪改查)

    Java連接 JDBC基礎(chǔ)知識(操作數(shù)據(jù)庫:增刪改查)

    這篇文章主要介紹了Java連接 JDBC基礎(chǔ)知識,包括操作數(shù)據(jù)庫之增刪改查操作,需要的朋友可以參考下
    2021-04-04
  • Java?詳解Map集合之HashMap和TreeMap

    Java?詳解Map集合之HashMap和TreeMap

    本章具體介紹了HashMap、TreeMap兩種集合的基本使用方法和區(qū)別,圖解穿插代碼實現(xiàn)。?JAVA成仙路從基礎(chǔ)開始講,后續(xù)會講到JAVA高級,中間會穿插面試題和項目實戰(zhàn),希望能給大家?guī)韼椭?/div> 2022-03-03
  • JWT令牌的工作原理詳解

    JWT令牌的工作原理詳解

    這篇文章主要介紹了JWT令牌的工作原理詳解,在認(rèn)證的時候,當(dāng)用戶用他們的的憑證成功登錄以后,一個JSON?Web?Token將會被返回,此后,用戶名和密碼就不再是用戶的憑證,而token是用戶用來訪問資源的新憑證了,需要的朋友可以參考下
    2023-08-08
  • 理解Java垃圾回收

    理解Java垃圾回收

    這篇文章主要幫助大家理解Java垃圾回收,通過實例學(xué)習(xí)java垃圾回收,什么是垃圾回收,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 淺談Java中父類與子類的加載順序詳解

    淺談Java中父類與子類的加載順序詳解

    本篇文章是對Java中父類與子類的加載順序進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 深入學(xué)習(xí)spring cloud gateway 限流熔斷

    深入學(xué)習(xí)spring cloud gateway 限流熔斷

    這篇文章主要介紹了深入學(xué)習(xí)spring cloud gateway 限流熔斷,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java IO流之字符緩沖流實例詳解

    Java IO流之字符緩沖流實例詳解

    這篇文章主要介紹了Java IO流之字符緩沖流,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Springboot基于assembly的服務(wù)化打包方案及spring boot部署方式

    Springboot基于assembly的服務(wù)化打包方案及spring boot部署方式

    這篇文章主要介紹了Springboot基于assembly的服務(wù)化打包方案及springboot項目的幾種常見的部署方式,本文主要針對第二種部署方式提供一種更加友好的打包方案,需要的朋友可以參考下
    2017-12-12
  • 關(guān)于@JsonProperty,@NotNull,@JsonIgnore的具體使用

    關(guān)于@JsonProperty,@NotNull,@JsonIgnore的具體使用

    這篇文章主要介紹了關(guān)于@JsonProperty,@NotNull,@JsonIgnore的具體使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評論