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進行傳送郵件,(使用QQ,163,新浪郵箱伺服器)
加油加油。 --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簽名後直接投遞到對方伺服器(無需己方郵件