? ? ? ? 在最近的項目中需要使用Java代碼動態(tài)生成html報告郵件,并且郵件正文中要嵌入圖片,用過Outlook的同學(xué)可能都知道,這太簡單不過了,編寫正文時直接插入圖片即可,但使用EWS JAVA API來嵌入圖片時還是遇到了不少的坑,本文將詳細(xì)介紹如何利用這個API來創(chuàng)建內(nèi)嵌圖片的Outlook郵件。
一、EWS JAVA API是什么?
? ? ? ?先了解一下EWS JAVA API:它是用來訪問 Exchange Web 服務(wù)的 Java 客戶端,說白了就是一套訪問Exchange郵件服務(wù)的Java API庫,利用它我們可以編寫Java代碼來動態(tài)創(chuàng)建和發(fā)送所需要的html郵件了。
二、發(fā)送內(nèi)嵌圖片的html郵件步驟:
開始前先上圖看看實現(xiàn)效果:
Step 1 準(zhǔn)備html郵件模板:
這有兩個方法:
a.直接使用一個html文件的模板然后通過Java代碼讀取其html字符串進行相應(yīng)的修改。
b.直接使用Jsoup庫像寫js一樣直接動態(tài)生成HTML頁面,關(guān)于Jsoup的使用請參考其文檔:
我們使用的是第二種方法通過Jsoup來動態(tài)生成html郵件,細(xì)節(jié)如下圖:
Step 2 html郵件中添加img標(biāo)簽:
注意:<img>標(biāo)簽最關(guān)鍵的地方是src屬性中有cid:"圖片附件cid值", 這個cid是維一標(biāo)識那張圖片附件顯示在此位置,關(guān)于這個附件cid值如何生成后面的步驟將詳細(xì)介紹。
Step 3 初始化ExchangeService
Step 4 初始化郵件主題及正文
注意:設(shè)置郵件內(nèi)容的格式為html
Step 5 添加圖附件
attachmentPath是一個圖片附件的字符串?dāng)?shù)組,每數(shù)組項目保存的是一個圖片路徑用于從本地讀取圖片文件,attachment.setContentId("image_"+a)是給每一個圖附件指定一個CID,我這里使用的是一個image_編號來表示,當(dāng)然你也可以使用文件名作為CID值,注意這個值一定要與Step 2中<img>標(biāo)簽中的值對應(yīng),不然圖片就不會顯示在郵件正文中了而是顯示為附件了。
Step 5 發(fā)送郵件
至此已經(jīng)完成所有的步驟,
三、注意的坑:
要注意的一個坑是: 網(wǎng)上很多人說使用下面的方法來內(nèi)嵌圖片到郵件正文中,但我一直沒有成功,后來查到一個老外寫的文檔,其中詳細(xì)說明這種情況是因為Outlook2007以上的版本不再支持這種方式,后來使用cid附件的方式就成功了。