使用Java发送邮件时,既需要发送html文档又需要在邮件中内嵌图片(非附件形式),这里封装了一个类使用JavaMail组织的邮件发送,支持多张图片发送,并指定图片位置。注意img标签src要如下写<img src=\"cid:abcd\">"其中abcd对应mageMailDto#imageCid,可以自行定义,不要出现重复。

发送方法,注意替换几个邮件参数,如host、user、password

 /*** 发送内嵌图片的邮件** @param fromEmailAddress   发件人邮箱地址* @param fromEmailName      发件人邮箱显示名称* @param subject            主题* @param content            邮件正文* @param toEmailAddressList 收件人邮箱集合(支持群发)* @return true:成功;false:失败*/@Overridepublic boolean sendImageHtmlEmail(String fromEmailAddress, String fromEmailName, String subject, String content, List<String> toEmailAddressList, ImageMailDto[] imageData) throws RuntimeException {if (CollectionUtils.isEmpty(toEmailAddressList)) {throw new RuntimeException("toEmailAddressList is empty!");}if (toEmailAddressList.size() > MAX_SEND_SIZE) {throw new RuntimeException("toEmailAddressList is more than [" + MAX_SEND_SIZE + "]!");}try {Properties props = new Properties();props.put("mail.smtp.host", hostName);props.put("mail.smtp.auth", "true");Session sendMailSession = Session.getDefaultInstance(props, authenticator);MimeMessage mimeMessage = new MimeMessage(sendMailSession);mimeMessage.setFrom(new InternetAddress(fromEmailAddress));InternetAddress[] address = new InternetAddress().parse(toEmailAddressList.toString());mimeMessage.setRecipients(Message.RecipientType.TO, address);mimeMessage.setSubject(subject);mimeMessage.setSentDate(new Date());BodyPart mdp = new MimeBodyPart();//新建一个存放信件内容的BodyPart对象mdp.setContent(content, "text/html;charset=utf-8");//给BodyPart对象设置内容和格式/编码方式Multipart mm = new MimeMultipart();//新建一个MimeMultipart对象用来存放BodyPart对mm.addBodyPart(mdp);//将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)if (imageData != null) {for (ImageMailDto dto : imageData) {MimeBodyPart image = new MimeBodyPart();image.setDataHandler(new DataHandler(new ByteArrayDataSource(dto.getImageData(), dto.getMimeType())));  //javamail jafimage.setContentID(dto.getImageCid());mm.addBodyPart(image);}}mimeMessage.setContent(mm);//把mm作为消息对象的内容mimeMessage.saveChanges();Transport.send(mimeMessage);return true;} catch (Exception e) {log.error("邮件发送异常邮件地址" + toEmailAddressList, e);throw new RuntimeException(e);}}

鉴权类写法:

  Authenticator authenticator = new DefaultAuthenticator(props.getProperty("mail.smtp.user"),props.getProperty("mail.smtp.password"));

图片存储类(自定义,可以修改替换):

import java.io.Serializable;/*** 邮件发送图片** @author wangqing* @since 16-3-2 下午4:39*/
public class ImageMailDto implements Serializable {private static final long serialVersionUID = 1L;private byte[] imageData;private String imageCid;//"好好工作<img src=\"cid:abcd\">"private String mimeType;//like image/jpeg、image/bmp、image/gifpublic byte[] getImageData() {return imageData;}public void setImageData(byte[] imageData) {this.imageData = imageData;}public String getImageCid() {return imageCid;}public void setImageCid(String imageCid) {this.imageCid = imageCid;}public String getMimeType() {return mimeType;}public void setMimeType(String mimeType) {this.mimeType = mimeType;}}

Java发送内嵌图片的邮件相关推荐

  1. java发送内嵌图片邮件

    前言: 博客系统中需要邮件服务的功能,以前写过类似的功能,不过功能太简单了,仅仅是发送文本内容,现在尝试一下发送内嵌图片邮件! 准备工作: 请参考:http://www.cnblogs.com/huj ...

  2. java smtp 内嵌图片,SMTP 发送内嵌图片 邮件

    本文实验用QQ邮箱发不了,网易163能发文字不能发img标签的内容 在新浪邮箱实验成功: public bool sendEmailto(List   shoujianren,string biaot ...

  3. JavaMail(四)——发送HTML格式、内嵌图片、带附件的邮件

    代码如下: package com.company;import javax.activation.DataHandler; import javax.activation.FileDataSourc ...

  4. WPS内嵌图片怎样使用Java获取图片?

    wps表格中,将图片如图设置为内嵌图片格式时,Java后端的POI无法读取图片,有其他的解决办法吗?(图片设置为浮动图片时可正常读取)

  5. SpringBoot Zxing _ Java 生成二维码(可内嵌图片)

    前提 jdk 要求:1.8:会 SpringBoot.Maven: 以下代码可以直接复制粘贴到项目中,可以直接使用~ 一.pom 准备 <?xml version="1.0" ...

  6. java 枚举内嵌枚举_高度有用的Java ChronoUnit枚举

    java 枚举内嵌枚举 几年前,我发表了博客文章" The Highly有用的Java TimeUnit Enum ",其中介绍了JDK 5引入的TimeUnit枚举. JDK 8 ...

  7. java 枚举内嵌枚举_Java枚举益智游戏

    java 枚举内嵌枚举 假设我们有以下代码: enum Case {CASE_ONE,CASE_TWO,CASE_THREE;private static final int counter;priv ...

  8. Markdown内嵌图片的解决方法

    Markdown内嵌图片的解决方法 文章目录 Markdown内嵌图片的解决方法 问题与解决方案 一.实现功能 二.脚本制作 1.利用文件选择框选择文件或者从剪贴板读取图像 2.将图片转为Base64 ...

  9. 二维码 内嵌图片,下载二维码

    功能 二维码可内嵌图片 可下载二维码 功能集合成Vue组件 使用技术 Vue.qrcodejs2.html2canvas 直接上代码 <template><div class=&qu ...

最新文章

  1. Python 类对象及属性内置方法 classmethod、delattr、dir、hasattr、getattr、callable
  2. 再也不买仙剑正版盘了
  3. Linux疑难杂症解决方案100篇(五)-SHELL脚本中case语句的多种使用场景
  4. LeetCode算法入门- Longest Valid Parentheses -day12
  5. 计算机网络链接的主要目标 主要功能,计算机网络课程教案‌.doc
  6. Python基础——NaN(Not a Number)
  7. java 规则引擎roolie_【智能决策引擎】规则引擎介绍
  8. memcached(十)动态扩容
  9. tps5430应用电路详解_详解常用电阻的优缺点
  10. 初入行的C++程序员,如何快速摆脱CRUD阶段?
  11. [Android实例] 【eoeAndroid社区索引】图形图像之动画
  12. 基于python的数字印刷体识别_不告诉你我用了它配合Python简简单单开发OCR识别,带你识别手写体、印刷体、身份证等N种,附代码!...
  13. 计算机毕业设计ssm高校物资捐赠管理系统0e45o系统+程序+源码+lw+远程部署
  14. CIS坐标系统与投影变换
  15. 2.3用卡诺图化简逻辑函数210807
  16. python求奇偶数和_python奇偶数求和
  17. Python电影观众数量回归分析 随机森林 可视化 实验报告
  18. 小米10青春版科学计算机,中端新势力 小米10青春版对华为nova 7 SE
  19. 2W字长文吐血整理 Docker云原生
  20. 知识图谱之NELL数据集简介

热门文章

  1. linux图像查看软件下载,Linux 如何用 CLI 图像查看器来在终端上查看图像?
  2. OSChina 周一乱弹 —— 红薯表情包 V1.0 精彩大放送
  3. 初中毕业学计算机需要学那部分,初中毕业学计算机需要关注哪些点?
  4. mate20pro更换鸿蒙系统,华为mate20pro更换成mate40如何?
  5. BigDecimal的加减乘除,以及四舍五入和比较大小
  6. 调查微软恶意升级 Windows 10 请愿即将达成
  7. 爱一个要多久!忘一个人要多久!
  8. 后端使用JsonResult类返回数据
  9. 02-SpringBoot核心功能之配置文件
  10. Unity中画2D图表(2)——用XChart包绘制散点分布图 + 一条直线方程