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

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:/測(cè)試文檔.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 對(duì)象
			MimeMessage mimeMessage = new MimeMessage(session);
			// 指定發(fā)件人郵箱,包括姓名
			mimeMessage.setFrom(new InternetAddress("test@163.com", "測(cè)試人員", "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對(duì)象
			BodyPart fileBodyPart = new MimeBodyPart();
			
			/*************1.本地文件*************/
			// 將本地文件作為附件
//			DataSource dataSource = new FileDataSource("d:/測(cè)試文檔.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("測(cè)試發(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數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:冒泡排序 Bubble Sort

    Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:冒泡排序 Bubble Sort

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:冒泡排序 Bubble Sort,本文直接給出實(shí)現(xiàn)代碼,代碼中包含詳細(xì)注釋,需要的朋友可以參考下
    2015-06-06
  • Java Socket+mysql實(shí)現(xiàn)簡(jiǎn)易文件上傳器的代碼

    Java Socket+mysql實(shí)現(xiàn)簡(jiǎn)易文件上傳器的代碼

    最近在做一個(gè)小項(xiàng)目,項(xiàng)目主要需求是實(shí)現(xiàn)一個(gè)文件上傳器,通過客戶端的登陸,把本地文件上傳到服務(wù)器的數(shù)據(jù)庫(kù)(本地的)。下面通過本文給大家分享下實(shí)現(xiàn)代碼,感興趣的朋友一起看看吧
    2016-10-10
  • 聊一聊帶智能提示的spring-boot-starter

    聊一聊帶智能提示的spring-boot-starter

    這篇文章主要介紹了帶智能提示的spring-boot-starter的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-11-11
  • MyBatis Mapper.xml入?yún)ist使用in函數(shù)問題

    MyBatis Mapper.xml入?yún)ist使用in函數(shù)問題

    文章主要講述了在使用MyBatis的Mapper.xml文件時(shí),如何正確地在in函數(shù)中使用List作為入?yún)?作者強(qiáng)調(diào)了完整拷貝<if>...</if>格式的重要性,并指出稍微的改動(dòng)就會(huì)導(dǎo)致錯(cuò)誤
    2025-02-02
  • Mybatis中的自定義映射resultMap

    Mybatis中的自定義映射resultMap

    在MyBatis中,自定義映射resultMap可以讓你精確控制如何將數(shù)據(jù)庫(kù)返回的結(jié)果集映射到Java對(duì)象上,本文給介紹了Mybatis之自定義映射resultMap,需要的朋友可以參考下
    2024-03-03
  • springboot集成Swagger的方法(讓你擁有屬于自己的api管理器)

    springboot集成Swagger的方法(讓你擁有屬于自己的api管理器)

    在大型的項(xiàng)目中,如果你有非常多的接口需要統(tǒng)一管理,或者需要進(jìn)行接口測(cè)試,那么我們通常會(huì)在繁雜地api中找到需要進(jìn)行測(cè)試或者管理的接口,接下來通過本文給大家介紹springboot集成Swagger的方法讓你擁有屬于自己的api管理器,感興趣的朋友一起看看吧
    2021-11-11
  • Spring Boot 2.x中Actuator的一些知識(shí)點(diǎn)

    Spring Boot 2.x中Actuator的一些知識(shí)點(diǎn)

    這篇文章主要給大家介紹了關(guān)于Spring Boot 2.x中Actuator的一些知識(shí)點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot 2.x具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • java報(bào)錯(cuò):找不到或無法加載主類的解決方法簡(jiǎn)單粗暴

    java報(bào)錯(cuò):找不到或無法加載主類的解決方法簡(jiǎn)單粗暴

    本文主要介紹了java報(bào)錯(cuò):找不到或無法加載主類的解決方法簡(jiǎn)單粗暴,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Java利用StampedLock實(shí)現(xiàn)讀寫鎖的方法詳解

    Java利用StampedLock實(shí)現(xiàn)讀寫鎖的方法詳解

    在jdk8以后,java提供了一個(gè)性能更優(yōu)越的讀寫鎖并發(fā)類StampedLock,該類的設(shè)計(jì)初衷是作為一個(gè)內(nèi)部工具類,用于輔助開發(fā)其它線程安全組件。本文就來和大家一起學(xué)習(xí)下StampedLock的功能和使用
    2022-10-10
  • Java實(shí)現(xiàn)生成n個(gè)不重復(fù)的隨機(jī)數(shù)

    Java實(shí)現(xiàn)生成n個(gè)不重復(fù)的隨機(jī)數(shù)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)生成n個(gè)不重復(fù)的隨機(jī)數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05

最新評(píng)論