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

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

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

本文實(shí)例為大家分享了JavaMail實(shí)現(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)建一個(gè)郵件的會(huì)話
?? ??? ?Session session = Session.getDefaultInstance(prop);
?? ??? ?// 2. 創(chuàng)建郵件體對(duì)象 (整封郵件對(duì)象)
?? ??? ?MimeMessage message = new MimeMessage(session);
?? ??? ?// 3. 設(shè)置郵件體參數(shù):
?? ??? ?// 3.1 標(biāo)題
?? ??? ?message.setSubject("我的第一封郵件");
?? ??? ?// 3.2 郵件發(fā)送時(shí)間
?? ??? ?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ā)送成功! ?正文...."); // 簡(jiǎn)單純文本郵件
?? ??? ?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類型,郵件通過(guò)multipart/mixed類型中定義的boundary標(biāo)識(shí)將附件內(nèi)容同郵件其它內(nèi)容分成不同的段。

  • multipart/related類型

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

  • multipart/alternative類型

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

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

JAF框架

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

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

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

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)建郵件會(huì)話
?? ??? ?Session session = Session.getDefaultInstance(prop);
?? ??? ?// 2. 創(chuàng)建郵件對(duì)象
?? ??? ?MimeMessage message = new MimeMessage(session);
?? ??? ?// 3. 設(shè)置參數(shù):標(biāo)題、發(fā)件人、收件人、發(fā)送時(shí)間、內(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)建一個(gè)多功能郵件塊
?? ??? ?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框架把磁盤(pán)上的文件加到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)建郵件會(huì)話
?? ??? ?Session session = Session.getDefaultInstance(prop);
?? ??? ?// 2. 創(chuàng)建郵件對(duì)象
?? ??? ?MimeMessage message = new MimeMessage(session);
?? ??? ?// 3. 設(shè)置參數(shù):標(biāo)題、發(fā)件人、收件人、發(fā)送時(shí)間、內(nèi)容
?? ??? ?message.setSubject("帶圖片郵件");
?? ??? ?message.setSender(sendMan);
?? ??? ?message.setRecipient(RecipientType.TO, new InternetAddress("xxx.com"));
?? ??? ?message.setSentDate(new Date());
?
?? ??? ?/*
?? ??? ? * 帶附件(圖片)郵件開(kāi)發(fā)
?? ??? ? */
?? ??? ?// 構(gòu)建一個(gè)總的郵件塊
?? ??? ?MimeMultipart mixed = new MimeMultipart("mixed");
?? ??? ?// ---> 總郵件快,設(shè)置到郵件對(duì)象中
?? ??? ?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)建一個(gè)多功能郵件塊
?? ??? ?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();
?? ?}
}

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

相關(guān)文章

  • SpringBoot打印啟動(dòng)時(shí)異常堆棧信息詳解

    SpringBoot打印啟動(dòng)時(shí)異常堆棧信息詳解

    在本篇文章里小編給大家整理的是關(guān)于SpringBoot打印啟動(dòng)時(shí)異常堆棧信息,有需要的朋友們可以學(xué)習(xí)下。
    2019-11-11
  • 使用Mybatis-plus策略自動(dòng)更新數(shù)據(jù)庫(kù)時(shí)間失敗問(wèn)題解決

    使用Mybatis-plus策略自動(dòng)更新數(shù)據(jù)庫(kù)時(shí)間失敗問(wèn)題解決

    這篇文章主要介紹了使用Mybatis-plus策略自動(dòng)更新數(shù)據(jù)庫(kù)時(shí)間失敗問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Filter在springboot中的使用方法詳解

    Filter在springboot中的使用方法詳解

    這篇文章主要介紹了Filter在springboot中的使用方法詳解,filter(過(guò)濾器)作用于在intreceptor(攔截器)之前,不像intreceptor一樣依賴于springmvc框架,只需要依賴于serverlet,需要的朋友可以參考下
    2023-08-08
  • java?ResourceBundle讀取properties文件方式

    java?ResourceBundle讀取properties文件方式

    這篇文章主要介紹了java?ResourceBundle讀取properties文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • spring結(jié)合redis如何實(shí)現(xiàn)數(shù)據(jù)的緩存

    spring結(jié)合redis如何實(shí)現(xiàn)數(shù)據(jù)的緩存

    這篇文章主要介紹了spring結(jié)合redis如何實(shí)現(xiàn)數(shù)據(jù)的緩存,實(shí)現(xiàn)的目的目的不是加快查詢的速度,而是減少數(shù)據(jù)庫(kù)的負(fù)擔(dān),需要的朋友可以參考下
    2015-12-12
  • 微服務(wù)架構(gòu)之使用RabbitMQ進(jìn)行異步處理方式

    微服務(wù)架構(gòu)之使用RabbitMQ進(jìn)行異步處理方式

    本文介紹了RabbitMQ的基本概念、異步調(diào)用處理邏輯、RabbitMQ的基本使用方法以及在Spring Boot項(xiàng)目中使用RabbitMQ解決高并發(fā)問(wèn)題,RabbitMQ是一種流行的消息隊(duì)列實(shí)現(xiàn),支持異步通信,可以有效解耦應(yīng)用程序的不同部分,并將任務(wù)分發(fā)給多個(gè)消費(fèi)者
    2025-02-02
  • Java?8中的Collectors?API介紹

    Java?8中的Collectors?API介紹

    這篇文章主要介紹了Java?8中的Collectors?API,Stream.collect()是Java?8的流API的終端方法之一。它允許我們對(duì)流實(shí)例中保存的數(shù)據(jù)元素執(zhí)行可變折疊操作,下文相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-04-04
  • Java中的異常測(cè)試框架JUnit使用上手指南

    Java中的異常測(cè)試框架JUnit使用上手指南

    這篇文章主要介紹了Java的異常測(cè)試框架JUnit使用上手指南,JUnit是Java代碼進(jìn)行單元測(cè)試中的常用工具,需要的朋友可以參考下
    2016-03-03
  • 如何解決 Java 中的 IndexOutOfBoundsException 異常(最新推薦)

    如何解決 Java 中的 IndexOutOfBoundsException 異

    當(dāng)我們?cè)?nbsp;Java 中使用 List 的時(shí)候,有時(shí)候會(huì)出現(xiàn)向 List 中不存在的位置設(shè)置新元素的情況,從而導(dǎo)致 IndexOutOfBoundsException 異常,本文將會(huì)介紹這個(gè)問(wèn)題的產(chǎn)生原因以及解決方案
    2023-10-10
  • java ZipFile如何將多級(jí)目錄壓縮

    java ZipFile如何將多級(jí)目錄壓縮

    這篇文章主要介紹了java ZipFile如何將多級(jí)目錄壓縮問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評(píng)論

萨迦县| 延长县| 弥勒县| 平乐县| 新巴尔虎右旗| 靖安县| 辽宁省| 贵阳市| 贡嘎县| 长子县| 赤峰市| 东方市| 凤冈县| 左贡县| 合川市| 广河县| 元氏县| 吴忠市| 大竹县| 云南省| 永川市| 乐平市| 明溪县| 晋中市| 中宁县| 上杭县| 黄大仙区| 车致| 略阳县| 嘉禾县| 积石山| 梓潼县| 离岛区| 左权县| 进贤县| 双峰县| 湟中县| 朔州市| 武义县| 紫阳县| 沈阳市|