使用EWS JAVA API发送内嵌图片的邮件

        在最近的项目中需要使用Java代码动态生成html报告邮件,并且邮件正文中要嵌入图片,用过Outlook的同学可能都知道,这太简单不过了,编写正文时直接插入图片即可,但使用EWS JAVA API来嵌入图片时还是遇到了不少的坑,本文将详细介绍如何利用这个API来创建内嵌图片的Outlook邮件。

一、EWS JAVA API是什么?

       先了解一下EWS JAVA API:它是用来访问 Exchange Web 服务的 Java 客户端,说白了就是一套访问Exchange邮件服务的Java API库,利用它我们可以编写Java代码来动态创建和发送所需要的html邮件了。

EWS JAVA API官方开源代码Git库地址

二、发送内嵌图片的html邮件步骤:

开始前先上图看看实现效果:

图片被嵌入在邮件正文中


Step 1 准备html邮件模板:

这有两个方法:

a.直接使用一个html文件的模板然后通过Java代码读取其html字符串进行相应的修改。

b.直接使用Jsoup库像写js一样直接动态生成HTML页面,关于Jsoup的使用请参考其文档:

Jsoup官方主页    Jsoup使用文档

我们使用的是第二种方法通过Jsoup来动态生成html邮件,细节如下图:


使用EWS JAVA API发送内嵌图片的邮件_第1张图片
初始化Doc

Step 2 html邮件中添加img标签:

增加img标签用于邮件正文内嵌图片

注意:标签最关键的地方是src属性中有cid:"图片附件cid值", 这个cid是维一标识那张图片附件显示在此位置,关于这个附件cid值如何生成后面的步骤将详细介绍。

Step 3 初始化ExchangeService

使用EWS JAVA API发送内嵌图片的邮件_第2张图片
初始化ExchangeService并设置应用的连接URL与账号

Step 4 初始化邮件主题及正文

使用EWS JAVA API发送内嵌图片的邮件_第3张图片
初始化邮件主题、正文及接收者及抄送者

注意:设置邮件内容的格式为html

Step 5 添加图附件


使用EWS JAVA API发送内嵌图片的邮件_第4张图片
添加图附件

attachmentPath是一个图片附件的字符串数组,每数组项目保存的是一个图片路径用于从本地读取图片文件,attachment.setContentId("image_"+a)是给每一个图附件指定一个CID,我这里使用的是一个image_编号来表示,当然你也可以使用文件名作为CID值,注意这个值一定要与Step 2中标签中的值对应,不然图片就不会显示在邮件正文中了而是显示为附件了。


Step 5 发送邮件


使用EmailMessage对象的send方法来发送邮件。

至此已经完成所有的步骤,

三、注意的坑:

要注意的一个坑是: 网上很多人说使用下面的方法来内嵌图片到邮件正文中,但我一直没有成功,后来查到一个老外写的文档,其中详细说明这种情况是因为Outlook2007以上的版本不再支持这种方式,后来使用cid附件的方式就成功了。

支持或者不支持内嵌Base64编码图片的Email客户端

你可能感兴趣的:(使用EWS JAVA API发送内嵌图片的邮件)