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

javamail發(fā)送附件DataSource使用文件流解決過程

 更新時(shí)間:2025年08月15日 09:12:52   作者:濤哥是個(gè)大帥比  
使用ByteArrayDataSource替代傳統(tǒng)附件處理方式,解決James郵件服務(wù)器需通過ApacheHttpClient下載華為云/FTP附件的問題,實(shí)現(xiàn)直接內(nèi)存?zhèn)鬏?確保郵件發(fā)送功能正常運(yùn)作

問題

在使用james郵件服務(wù)器發(fā)送郵件時(shí),附件是存儲(chǔ)在華為云服務(wù)器上的,只能通過Apache HttpClient去下載,存儲(chǔ)在FTP上的文件同樣會(huì)碰到這個(gè)問題。

API上郵件添加附件的方法:

/*************1.本地文件*************/
// 將本地文件作為附件
DataSource dataSource = new FileDataSource("d:/測試文檔.doc");
/*************2.網(wǎng)絡(luò)文件*************/
// 將網(wǎng)絡(luò)文件作為附件
URL url = new URL("www.test.com/file/ceshi.doc");
DataSource dataSource = new URLDataSource(url);

這兩種方式都不能滿足需求

解決方案

使用ByteArrayDataSource

關(guān)鍵代碼:

/*************3.文件流*************/
DataSource dataSource = new ByteArrayDataSource(inputStream, "application/octet-stream");

完整發(fā)送郵件代碼:

import java.io.InputStream;
import java.util.Date;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import javax.mail.util.ByteArrayDataSource;

public class MailService {

	/**
	 * 發(fā)送郵件
	 * @param session	連接james郵件獲取
	 * @param inputStream	通過下載的方式獲取文件流
	 * @param fileName	文件名稱帶后綴
	 */
	public void sendMail(Session session,InputStream inputStream,String fileName) {
		try {
			if(session == null){
				return;
			}
			// 創(chuàng)建一個(gè)MimeMessage 對象
			MimeMessage mimeMessage = new MimeMessage(session);
			// 指定發(fā)件人郵箱,包括姓名
			mimeMessage.setFrom(new InternetAddress("test@163.com", "測試人員", "UTF-8"));
			
			// 收件人地址
			Address[] to = InternetAddress.parse("to@163.com");
			// 指定收件人郵箱
			mimeMessage.addRecipients(Message.RecipientType.TO, to);
			
			//沒有抄送人可以忽略
			Address[] cc = InternetAddress.parse("cc@163.com");
			// 指定抄送人郵箱
			mimeMessage.addRecipients(Message.RecipientType.CC, cc);
			
			// 指定郵件主題
			mimeMessage.setSubject("發(fā)送帶附件的郵件");
			// 指定郵件發(fā)送日期
			mimeMessage.setSentDate(new Date());
			// 指定郵件優(yōu)先級(jí) 1:緊急 3:普通 5:緩慢
			mimeMessage.setHeader("X-Priority", "3");
						
			MimeMultipart mimeMultipart = new MimeMultipart("mixed");
			mimeMessage.setContent(mimeMultipart);
			//內(nèi)容
			MimeBodyPart bodyPart = new MimeBodyPart();
			mimeMultipart.addBodyPart(bodyPart);
			
				
			// 新建一個(gè)存放郵件附件的BodyPart對象
			BodyPart fileBodyPart = new MimeBodyPart();
			
			/*************1.本地文件*************/
			// 將本地文件作為附件
//			DataSource dataSource = new FileDataSource("d:/測試文檔.doc");
			
			/*************2.網(wǎng)絡(luò)文件*************/
			// 將網(wǎng)絡(luò)文件作為附件
//			URL url = new URL("www.test.com/file/ceshi.doc");
//			DataSource dataSource = new URLDataSource(url);
			
			/*************3.文件流*************/
			DataSource dataSource = new ByteArrayDataSource(inputStream, "application/octet-stream");
			
			fileBodyPart.setDataHandler(new DataHandler(dataSource));
			// 處理郵件中附件文件名的中文問題
			String attachName = MimeUtility.encodeText(fileName);
			// 設(shè)定附件文件名
			fileBodyPart.setFileName(attachName);
			// 添加附件
			mimeMultipart.addBodyPart(fileBodyPart);	//發(fā)給外部郵箱需要添加附件
			
			//BODY(包括:圖片,html)
			MimeMultipart bodyMultipart = new MimeMultipart("related");
			bodyPart.setContent(bodyMultipart);
			
			MimeBodyPart html = new MimeBodyPart();
			bodyMultipart.addBodyPart(html);
				
			//html
			html.setContent("測試發(fā)送帶附件的郵件","text/html;charset=gbk");
			mimeMessage.saveChanges();
			
			// 發(fā)送郵件
			Transport.send(mimeMessage, mimeMessage.getAllRecipients());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入淺析java中finally的用法

    深入淺析java中finally的用法

    finally自己由關(guān)鍵字finally和后面的finally塊組成。這篇文章重點(diǎn)給大家介紹java中finally的用法,需要的朋友參考下吧
    2018-06-06
  • Java實(shí)現(xiàn)字符串反轉(zhuǎn)

    Java實(shí)現(xiàn)字符串反轉(zhuǎn)

    這篇文章介紹了Java實(shí)現(xiàn)字符串反轉(zhuǎn)的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • spring?kafka?@KafkaListener詳解與使用過程

    spring?kafka?@KafkaListener詳解與使用過程

    這篇文章主要介紹了spring-kafka?@KafkaListener詳解與使用,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Java使用策略模式實(shí)現(xiàn)聚石塔接口調(diào)用的問題

    Java使用策略模式實(shí)現(xiàn)聚石塔接口調(diào)用的問題

    這篇文章主要介紹了Java使用策略模式實(shí)現(xiàn)聚石塔接口調(diào)用,為了避免多重判斷,而且有更好的擴(kuò)展性,首選了策略模式來實(shí)現(xiàn),具體解決方法跟隨小編一起看看吧
    2021-12-12
  • Java中多線程同步類 CountDownLatch

    Java中多線程同步類 CountDownLatch

    本篇文章主要介紹了Java中多線程同步類 CountDownLatch的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-05-05
  • Java后臺(tái)返回和處理JSon數(shù)據(jù)的方法步驟

    Java后臺(tái)返回和處理JSon數(shù)據(jù)的方法步驟

    這篇文章主要介紹了Java后臺(tái)返回和處理JSon數(shù)據(jù)的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • java壓縮文件與刪除文件的示例代碼

    java壓縮文件與刪除文件的示例代碼

    這篇文章主要介紹了java壓縮文件與刪除文件的示例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Maven中Profile基礎(chǔ)知識(shí)與激活機(jī)制詳解

    Maven中Profile基礎(chǔ)知識(shí)與激活機(jī)制詳解

    這篇文章將深入解析Maven?Profile的底層實(shí)現(xiàn)機(jī)制,從Profile標(biāo)識(shí)符的作用域劃分到多維度激活條件的組合應(yīng)用,全面剖析其在不同規(guī)模項(xiàng)目中的最佳實(shí)踐,需要的可以了解下
    2025-05-05
  • jsp、servlet前后端交互對數(shù)據(jù)處理及展示的簡單實(shí)現(xiàn)

    jsp、servlet前后端交互對數(shù)據(jù)處理及展示的簡單實(shí)現(xiàn)

    Servlet和JSP是Java Web開發(fā)中的兩個(gè)重要概念,在Servlet和JSP中前后端交互可以通過一些方式來實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于jsp、servlet前后端交互對數(shù)據(jù)處理及展示的簡單實(shí)現(xiàn),需要的朋友可以參考下
    2023-12-12
  • JAVA中 redisTemplate 和 jedis的配合使用操作

    JAVA中 redisTemplate 和 jedis的配合使用操作

    這篇文章主要介紹了JAVA中 redisTemplate 和 jedis的配合使用操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評(píng)論

连州市| 东乡族自治县| 金华市| 黎城县| 行唐县| 太谷县| 平陆县| 安平县| 淮南市| 句容市| 巴彦淖尔市| 湖州市| 福安市| 昭觉县| 乳山市| 阳城县| 新丰县| 铅山县| 达尔| 临澧县| 呼玛县| 旬邑县| 瑞安市| 沧州市| 衡阳县| 米泉市| 余江县| 宁安市| 高密市| 宝丰县| 防城港市| 固始县| 瓦房店市| 广丰县| 响水县| 镇远县| 安图县| 侯马市| 高尔夫| 镇巴县| 鄢陵县|