使用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邮件,细节如下图:


初始化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附件的方式就成功了。

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

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文包括:1、名词解释2、邮件收发过程3、JavaMail 知识概要4、发送一封符合 MIME 协议的 JavaM...
    廖少少阅读 4,430评论 2赞 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,251评论 19赞 139
  • 一、邮件开发涉及到的一些基本概念 邮件服务器和电子邮箱 邮件传输协议 电子邮件的发送和接收过程 1.1邮件服务器和...
    yjaal阅读 1,665评论 0赞 7
  • 西北几乎没有雨季,一年里能有几场正儿八经的雨是相当难得的。乌鲁木齐的春天也格外的迟钝,大雨前几天终于临幸了这里。 ...
    陈旧啊阅读 284评论 1赞 3
  • 千古红尘色淡然, 骚人墨客绘江山。 才子佳人皆风韵, 脍炙诗篇后人传。 谁言诗人酸情苦? 千年文化诉千年。 我提笔...
    黎若雪阅读 411评论 0赞 0

友情链接更多精彩内容