1. 程式人生 > >javaMail直接傳送附件,無須生成臨時檔案

javaMail直接傳送附件,無須生成臨時檔案

以excel附件為例:

先引入依賴:

		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.17</version>
		</dependency>
郵件傳送服務:
@Service
public class MailService {
	private final Logger logger = LoggerFactory.getLogger(this.getClass());
	
	private final JavaMailSender sender;
	
	@Value("${spring.mail.username}")
	private String from;

	public MailService(JavaMailSender sender) {
		this.sender = sender;
	}

	/**
	 * 利用helper設定各種郵件傳送相關的資訊
	 */
	private MimeMessageHelper setInfoByHelper(String to, String subject, String content, MimeMessage message)
			throws MessagingException {
		//true表示需要建立一個multipart message
		MimeMessageHelper helper = new MimeMessageHelper(message, true);
		helper.setFrom(from);
		helper.setTo(to);
		helper.setSubject(subject);
		helper.setText(content, true);
		return helper;
	}
	

	/**
	 * 傳送帶附件的郵件
	 * @param to 收件人列表
	 * @param subject 郵件標題
	 * @param content 郵件內容
	 * @param inputStreamSource 附件streamSource,可以這樣獲得:new ByteArrayResource(ByteArrayOutputStream.toByteArray());
	 * @param fileName 附件的檔名
	 */
	public void sendAttachmentsMail(String to, String subject, String content, InputStreamSource inputStreamSource, String fileName){
		MimeMessage message = sender.createMimeMessage();

		try {
			MimeMessageHelper helper = setInfoByHelper(to, subject, content, message);

			helper.addAttachment(fileName, inputStreamSource);

			sender.send(message);
			logger.debug("帶附件的郵件已經發送。");
		} catch (MessagingException e) {
			logger.error("傳送帶附件的郵件時發生異常!", e);
		}
	}
}

方法呼叫(測試用例):

利用ByteArrayOutputStream把excel檔案輸出到bytes[]中,然後由ByteArrayResource包裝起來傳遞給郵件服務。

	@Test
	public void sendMailWithExcel() throws IOException {
		String[] headers = {"col1","col2","col3"};
		// 宣告一個工作薄
		HSSFWorkbook wb = new HSSFWorkbook();
		// 生成一個表格
		HSSFSheet sheet = wb.createSheet();
		HSSFRow row = sheet.createRow(0);
		for (int i = 0; i < headers.length; i++) {
			HSSFCell cell = row.createCell(i);
			cell.setCellValue(headers[i]);
		}
		int rowIndex = 1;

		for(int j=0; j<3; j++){
			row = sheet.createRow(rowIndex);
			rowIndex++;
			HSSFCell cell1 = row.createCell(0);
			cell1.setCellValue(j);
			cell1 = row.createCell(1);
			cell1.setCellValue(j+1);
			cell1 = row.createCell(2);
			cell1.setCellValue(j+2);
		}
		for (int i = 0; i < headers.length; i++) {
			sheet.autoSizeColumn(i);
		}

		ByteArrayOutputStream os = new ByteArrayOutputStream(1000);
		wb.write(os);
		wb.close();

		InputStreamSource iss = new ByteArrayResource(os.toByteArray());
		os.close();

		mailService.sendAttachmentsMail("
[email protected]
", "attachmentMail subject", "I have an attachment", iss, "abc1.xlsx"); } }


相關推薦

javaMail直接傳送附件無須生成臨時檔案

以excel附件為例: 先引入依賴: <dependency> <groupId>org.apache.poi</groupId> <arti

ubuntu命令列直接傳送email附件

1. 安裝 sudo apt-get install mailutils 2. 傳送 echo "your message here" | mail -s "title" -A /home/ubuntu/zhangtiey/peloton_ex/build/tpcc-ou

JavaMail java郵件開發_如何直接傳送一封現有的郵件檔案

JavaMail02: package com.yuming.test; import java.io.FileInputStream; import java.io.InputStream; import java.util.Properties; import javax.mail

jenkins+ant+jmeter 使用javamail實現傳送自定義報告 (html報告檔案作為附件傳送)

        由於ant-jmeter目前的版本不支援javamail,所以傳送郵件的時候只能藉助jenkins自帶的Email Extension來發送郵件,但是該郵件僅僅是一個最最基礎的通知郵件,未能直接展示用例執行狀況,故考慮使用javamail傳送自

Java Web(十三) 使用javamail進行傳送郵件(使用QQ163新浪郵箱伺服器)

    加油加油。                     --WH 一、傳送郵件的原理     在瞭解其原理之前,先要知道兩個協議,SMTP和POP3       SMTP:Simple Mail Transfer Protocol,即簡單郵件傳輸協議,傳送郵件的協議,

java.io.File.deleteOnExit()-生成臨時檔案刪除臨時檔案

Description The java.io.File.deleteOnExit() method deletes the file or directory defined by the abstract path name when the virt

通過自己的java程式碼打成parcel包生成sha檔案

以自己寫的一個java程式為例 1. 製作parcel包 1.1 我的程式結構如下: [[email protected] nameaddress-1.0]# cd nameaddress/ [[email protected] nameaddress]# ll 總用

csv生成臨時檔案,供前端下載

@RequestMapping(value = "/exportCsv", method = RequestMethod.GET)     public void haha(HttpServletRequest request, HttpServletResponse res

Java Web 生成臨時檔案並下載 Java Web 生成臨時檔案並下載

轉自: Java Web 生成臨時檔案並下載 概述:本文是  java 伺服器端生成檔案並下載的示例,並不完善,下載之後一般來說還需要刪除臨時檔案。 注意:臨時檔案存放在 /WEB-INF/tmp 目錄下,所以先要把  tmp 目錄建

Unity動態建立的Mesh匯出為Obj模型檔案生成Prefab檔案

Unity執行時,動態建立的Mesh掛載到MeshFilter元件上,並不能儲存到本地Prefab檔案裡。在執行的場景裡,拖拽正確配置的MeshFilter物件到Unity資源管理器。生成的Prefab檔案,裡面的Mesh物件會missing。所以,我們需要在執行狀態,匯

plsql儲存sql檔案生成.~sql檔案

plsql儲存sql時不生成~檔案 plsql developer的備份檔案,幫助在出現各種情況時,恢復你的SQL指令碼的,你可以在配置中禁用它就不會出現了 工具-》首選項-》檔案-》備份 ,在右側“

通過cmake在Android中呼叫c語言生成so檔案

1、  新建JniUtils類實現native方法   2、  在build中執行clean project 再rebuild project 生成class檔案。 注意:最新版本的AndroidStudio中classes檔案的路徑是在\app\build\inter

vs2010除錯時無法找到“XXX.exe”的除錯資訊或者除錯資訊不匹配生成二進位制檔案

報錯背景:  用cmake編譯的開源專案,然後用vs10開啟,release模式下報錯,無法找到“XXX.exe”的除錯資訊,或者除錯資訊不匹配,未生成二進位制檔案 。 解決方法: 在網上查到的解決方案 之一: 1. 關閉掉Visual Studio 例項。 2. 找到

go生成臨時檔案

code package main import ( "fmt" "io/ioutil" "os" ) func main() { buf := "Hello,

MyEclipse使用JAX-WS 2.0生成WebService報錯無法生成WSDL檔案

com.sun.xml.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.spark.dao.jaxws.HasInfo(Java類中自己寫的方法) is not found

Unity3D 動態建立的Mesh匯出為Obj模型檔案生成Prefab檔案

Unity執行時,動態建立的Mesh掛載到MeshFilter元件上,並不能儲存到本地Prefab檔案裡。在執行的場景裡,拖拽正確配置的MeshFilter物件到Unity資源管理器。生成的Prefab檔案,裡面的Mesh物件會missing。所以,我們需要在執行狀態,匯出

labview中用相對路徑動態呼叫的子VI生成EXE檔案後無法呼叫問題的解決

給你舉例子吧。這樣容易懂。下面,我的主VI,是Welcome_gui.vi  我要動態呼叫執行choose.vi.注意我的檔案層次。   choose.vi在SUBVI資料夾下。  一定要把你呼叫到的資料夾和VI都放到專案檔案裡。最簡單方法,就只直接拖動檔案或者資料夾到專案裡。  如果你不拖動,後面的新增原檔

log4j日誌輸出以及生成日誌檔案

log4j.properties檔案配置如下: log4j.rootLogger=debug,appender,appender1 #如果在本地eclipse控制檯輸出 請解開下面的程式碼 #log4j.appender.appender=org.apache.log

什麼情況下VC的DLL工程只生成DLL生成LIB檔案

必須至少匯出一個函式或者變數或者類。 沒有匯出的話就不生成LIB。 -------------------------------------------------------- 如果LIB是靜態庫則不需要DLL 。 如果LIB是動態連結的,那麼就必須找到DLL 。 動態連結時,LIB只包含簡單的DLL匯

C#實現.Net對郵件進行DKIM簽名和驗證支援附件傳送郵件簽名後直接投遞到對方伺服器(無需己方郵件伺服器)

專案地址 github.com/xiangyuecn/… 主要支援 對郵件進行DKIM簽名,支援帶附件 對整個郵件內容(.eml檔案)的DKIM簽名進行驗證 對MailMessage、SmtpClient進行了一次封裝,傳送郵件簡單易用,進行DKIM簽名後直接投遞到對方伺服器(無需己方郵件