使用JavaMail发送邮件时嵌入公司logo图片
- 第一种方式:`img`标签和`logo`图片链接
- 第二种方式:使用`img`标签和图片`base64`字符串
- 第三种方式(推荐):将`logo`当做附件一起发送并设置`ContentID`,再使用`img`标签,使用`cid`指向`ContentID`
- 参考文章
最近有个优化,是给公司发出邮件的正文后面加一个公司logo
,下面记录一下踩坑过程。
发送邮件的功能这里就不赘述了,大家自行百度参考,我这里随便贴一个参考链接:https://blog.51cto.com/u_16099331/6477716
公司用的是Outlook邮箱进行邮件接收,其他邮箱暂时没有试过。以下示例都基于此邮箱接收邮件进行展示。
这里先放附件的属性类 AppendixEntity:
第一种方式:img
标签和logo
图片链接
开始的想法是在正文中嵌入一个img
标签,然后使用一个可访问的图片链接,最终发现不可行,原因为Outlook邮箱将img
标签的src
参数改为了blockedimagesrc
参数,最终导致logo
显示为空白图标
这里将正文内容抽出来了,后面的截图会进行打码
邮件正文嵌套logo:
邮件填充内容和附件部分:
这里扩展一下MIMEMultipart的类型:https://blog.csdn.net/weixin_43199103/article/details/89681221
发送邮件结果:(可以看到图片显示为空白图片)
第二种方式:使用img
标签和图片base64
字符串
这种方式直接报错了,提示字符串过长了。而且也看到其他文章说base64
字符串对gmail
和outlook
两种邮箱不显示。
这种我程序运行就直接报错了,就没试了,大家可自行实验。
第三种方式(推荐):将logo
当做附件一起发送并设置ContentID
,再使用img
标签,使用cid
指向ContentID
这种方式就是把img
标签内容直接指向附件图片,需要在发送的时候设置唯一的ContentID
邮箱正文(注意标红处):
设置logo属性(这里我们用的google
云,直接在云上拉取图片):
邮件附件部分:
发送结果展示:发现附件中的图片没有出来,logo出也没有出来
这里就需要修改上面邮件部分划红线的地方的MIMEMultipart
类型:
重新发送邮件结果如下
不过后来写博客重新试了一下,发现MIMEMultipart
类型用mixed
和related
都能正常发送,上面出现的问题没有复现,大家看看就行了。
参考文章
- https://blog.csdn.net/shengruxiahua2571/article/details/103293981
- https://www.jianshu.com/p/60a6d69544a8