在最近的项目中需要使用Java代码动态生成html报告邮件,并且邮件正文中要嵌入图片,用过Outlook的同学可能都知道,这太简单不过了,编写正文时直接插入图片即可,但使用EWS JAVA API来嵌入图片时还是遇到了不少的坑,本文将详细介绍如何利用这个API来创建内嵌图片的Outlook邮件。
一、EWS JAVA API是什么?
先了解一下EWS JAVA API:它是用来访问 Exchange Web 服务的 Java 客户端,说白了就是一套访问Exchange邮件服务的Java API库,利用它我们可以编写Java代码来动态创建和发送所需要的html邮件了。
二、发送内嵌图片的html邮件步骤:
开始前先上图看看实现效果:
图片被嵌入在邮件正文中
Step 1 准备html邮件模板:
这有两个方法:
a.直接使用一个html文件的模板然后通过Java代码读取其html字符串进行相应的修改。
b.直接使用Jsoup库像写js一样直接动态生成HTML页面,关于Jsoup的使用请参考其文档:
我们使用的是第二种方法通过Jsoup来动态生成html邮件,细节如下图:
初始化Doc
Step 2 html邮件中添加img标签:
增加img标签用于邮件正文内嵌图片
注意:<img>标签最关键的地方是src属性中有cid:"图片附件cid值", 这个cid是维一标识那张图片附件显示在此位置,关于这个附件cid值如何生成后面的步骤将详细介绍。
Step 3 初始化ExchangeService
初始化ExchangeService并设置应用的连接URL与账号
Step 4 初始化邮件主题及正文
初始化邮件主题、正文及接收者及抄送者
注意:设置邮件内容的格式为html
Step 5 添加图附件
添加图附件
attachmentPath是一个图片附件的字符串数组,每数组项目保存的是一个图片路径用于从本地读取图片文件,attachment.setContentId("image_"+a)是给每一个图附件指定一个CID,我这里使用的是一个image_编号来表示,当然你也可以使用文件名作为CID值,注意这个值一定要与Step 2中<img>标签中的值对应,不然图片就不会显示在邮件正文中了而是显示为附件了。
Step 5 发送邮件
使用EmailMessage对象的send方法来发送邮件。
至此已经完成所有的步骤,
三、注意的坑:
要注意的一个坑是: 网上很多人说使用下面的方法来内嵌图片到邮件正文中,但我一直没有成功,后来查到一个老外写的文档,其中详细说明这种情况是因为Outlook2007以上的版本不再支持这种方式,后来使用cid附件的方式就成功了。










网友评论