1、引入依赖包

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2、配置文件

spring:mail:host: smtp.qq.com# 发送者的邮箱账号username: 1111@qq.com# 邮箱密码授权码password: ****default-encoding: utf-8properties:mail:debug: truesmtp:auth: truestarttls:enable: truerequired: true

3、业务逻辑

3.1 定义邮件发送类

@Data
public  class MailInfo {// 邮件接收人private String[] receiver;// 邮件主题private String subject;// 邮件的文本内容private String content;// 抄送人private String[] cc;// 邮件附件的文件名private String[] attachFileNames;// 邮件内容内嵌图片private Map<String,String> imageMap;
}

3.2 定义 ISendMsgHandle

public interface ISendMsgHandle {/*** 功能描述:发送text邮件* @param mailInfo 邮件信息* @return {@link }* @author weigang* @date 2021/12/29 9:27 上午*/void sendSimpleTextEmail(MailInfo mailInfo);/*** 功能描述:发送html邮件* @param mailInfo 邮件信息* @param html 是否是html邮件* @return {@link }* @author weigang* @date 2021/12/29 9:27 上午*/void sendHtmlEmail(MailInfo mailInfo,boolean html);/*** 功能描述:发送文本内容(内嵌图片)且带附件的html邮件* @param mailInfo 邮件信息* @return {@link }* @author wi-gang* @date 2021/12/29 2:49 下午*/void sendEnclosureEmail(MailInfo mailInfo);
}

3.3 邮件处理逻辑

import com.weigang.email.bean.MailInfo;
import com.weigang.email.handle.ISendMsgHandle;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.annotation.Resource;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.*;@Slf4j
@Component
public class EmailSendMsgHandle implements ISendMsgHandle {@Resourceprivate JavaMailSender javaMailSender;@Value(value = "${spring.mail.username}")private String emailFrom;@Overridepublic void sendSimpleTextEmail(MailInfo mailInfo) {try {SimpleMailMessage mailMessage = new SimpleMailMessage();//发件人mailMessage.setFrom(emailFrom);//接收人mailMessage.setTo(mailInfo.getReceiver());//邮件主题mailMessage.setSubject(mailInfo.getSubject());//邮件抄送mailMessage.setCc(mailInfo.getCc());//邮件内容mailMessage.setText(mailInfo.getContent());//发送邮件javaMailSender.send(mailMessage);} catch (Exception e) {log.error("邮件发送失败:{}", e.getMessage());}}@Overridepublic void sendHtmlEmail(MailInfo mailInfo,boolean html) {try {MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();//true 表示需要创建一个multipart messageMimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage);//发件人mimeMessageHelper.setFrom(emailFrom);//接收人mimeMessageHelper.setTo(mailInfo.getReceiver());//邮件主题mimeMessageHelper.setSubject(mailInfo.getSubject());//邮件抄送mimeMessageHelper.setCc(mailInfo.getCc());//邮件内容mimeMessageHelper.setText(mailInfo.getContent(), html);javaMailSender.send(mimeMailMessage);} catch (Exception e) {log.error("邮件发送失败:{}", e.getMessage());}}@Overridepublic void sendEnclosureEmail(MailInfo mailInfo) {try {MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();//true 表示需要创建一个multipart messageMimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);//发件人mimeMessageHelper.setFrom(emailFrom);//邮件接收人mimeMessageHelper.setTo(mailInfo.getReceiver());//邮件主题mimeMessageHelper.setSubject(mailInfo.getSubject());//邮件抄送mimeMessageHelper.setCc(mailInfo.getCc());//设置显示的发件时间mimeMessageHelper.setSentDate(new Date());MimeMultipart allMultipart = new MimeMultipart();//创建代表邮件正文和附件的各个MimeBodyPart对象MimeBodyPart contentPart = createContent(mailInfo.getContent(), mailInfo.getImageMap());allMultipart.addBodyPart(contentPart);//创建用于组合邮件正文和附件的MimeMultipart对象for (int i = 0; i < mailInfo.getAttachFileNames().length; i++) {allMultipart.addBodyPart(createAttachment(mailInfo.getAttachFileNames()[i]));}//设置整个邮件内容为最终组合出的MimeMultipart对象mimeMailMessage.setContent(allMultipart);mimeMailMessage.saveChanges();javaMailSender.send(mimeMailMessage);} catch (Exception e) {log.error("邮件发送失败:{}", e.getMessage());}}/*** 功能描述:邮件附件* @param filename 文件路径* @return {@link MimeBodyPart}* @author wi-gang* @date 2021/12/29 2:50 下午*/public MimeBodyPart createAttachment(String filename) throws Exception {//创建保存附件的MimeBodyPart对象,并加入附件内容和相应的信息MimeBodyPart attachPart = new MimeBodyPart();FileDataSource fsd = new FileDataSource(filename);attachPart.setDataHandler(new DataHandler(fsd));attachPart.setFileName(fsd.getName());return attachPart;}/*** 功能描述:文本内容* @param body html格式的文本内容* @return {@link MimeBodyPart}* @author wi-gang* @date 2021/12/29 2:50 下午*/public MimeBodyPart createContent(String body) throws Exception {//创建代表组合Mime消息的MimeMultipart对象,将该MimeMultipart对象保存到MimeBodyPart对象MimeBodyPart contentPart = new MimeBodyPart();MimeMultipart contentMultipart = new MimeMultipart("related");//创建用于保存HTML正文的MimeBodyPart对象,并将它保存到MimeMultipart中MimeBodyPart htmlBodyPart = new MimeBodyPart();htmlBodyPart.setContent(body, "text/html;charset=UTF-8");contentMultipart.addBodyPart(htmlBodyPart);//将MimeMultipart对象保存到MimeBodyPart对象contentPart.setContent(contentMultipart);return contentPart;}/*** 功能描述:文本内嵌图片* @param body html格式的文本内容* @param map 图片集合* @return {@link MimeBodyPart}* @author wi-gang* @date 2021/12/29 2:50 下午*/public MimeBodyPart createContent(String body, Map<String, String> map) throws Exception {//创建代表组合Mime消息的MimeMultipart对象,将该MimeMultipart对象保存到MimeBodyPart对象MimeBodyPart contentPart = new MimeBodyPart();MimeMultipart contentMultipart = new MimeMultipart("related");//创建用于保存HTML正文的MimeBodyPart对象,并将它保存到MimeMultipart中MimeBodyPart htmlBodyPart = new MimeBodyPart();htmlBodyPart.setContent(body, "text/html;charset=UTF-8");contentMultipart.addBodyPart(htmlBodyPart);if (map != null && map.size() > 0) {Set<Map.Entry<String, String>> set = map.entrySet();for (Map.Entry<String, String> entry : set) {//创建用于保存图片的MimeBodyPart对象,并将它保存到MimeMultipart中MimeBodyPart gifBodyPart = new MimeBodyPart();FileDataSource fds = new FileDataSource(entry.getValue());//图片所在的目录的绝对路径gifBodyPart.setDataHandler(new DataHandler(fds));gifBodyPart.setContentID(entry.getKey());    //cid的值contentMultipart.addBodyPart(gifBodyPart);}}//将MimeMultipart对象保存到MimeBodyPart对象contentPart.setContent(contentMultipart);return contentPart;}
}

3.4 测试

(1)简单邮件发送

    @Testvoid sendSimpleTextEmail() {MailInfo mailInfo = new MailInfo();mailInfo.setReceiver(new String[]{"11111@qq.com"});mailInfo.setSubject("测试主题");mailInfo.setContent("邮件内容");emailSendMsgHandle.sendSimpleTextEmail(mailInfo);}

​​​​
(2)以html格式发送

    @Testpublic void sendHTMLMail() {MailInfo mailBean = new MailInfo();//接收人mailBean.setReceiver(new String[]{"11111@qq.com"});mailBean.setSubject("SpringBootMailHTML之这是一封HTML格式的邮件");//抄送给谁mailBean.setCc(new String[]{"11111@qq.com","winsky.com"});StringBuilder sb = new StringBuilder();sb.append("<h2>SpirngBoot测试邮件HTML</h2>").append("<p style='text-align:left'>这是一封HTML邮件...</p>").append("<p> 时间为:"+ new Date() +"</p>");mailBean.setContent(sb.toString());//true、false控制以普通文本发送还是以html格式发送emailSendMsgHandle.sendHtmlEmail(mailBean,true);}


(2)以html格式发送并带附件

    @Testvoid sendEmail() {MailInfo mailBean = new MailInfo();mailBean.setReceiver(new String[]{"11111@qq.com"});mailBean.setSubject("SpringBootMailHTML之这是一封HTML格式的邮件");mailBean.setCc(new String[]{"11111@qq.com","winsky.com"});StringBuilder sb = new StringBuilder();sb.append("<h2>SpirngBoot测试邮件HTML</h2>").append("<p style='text-align:left'>这是一封HTML邮件...</p>").append("<p> 时间为:"+ new Date() +"</p>");mailBean.setContent(sb.toString());mailBean.setAttachFileNames(new String[]{"/Users/Downloads/密码管理.xlsx","/Users/Downloads/1635834323888.jpg"});emailSendMsgHandle.sendEnclosureEmail(mailBean);}


(3)以html格式内嵌图片并带附件发送

    @Testvoid sendEmail2() {MailInfo mailBean = new MailInfo();mailBean.setReceiver(new String[]{"111111@qq.com"});mailBean.setSubject("SpringBootMailHTML之这是一封HTML格式的邮件");mailBean.setCc(new String[]{"111111@qq.com","winsky.com"});StringBuilder sb = new StringBuilder();sb.append("<h2>SpirngBoot测试邮件HTML</h2>").append("<p style='text-align:left'>这是一封HTML邮件...</p>").append("<a href=http://www.baidu.com>点击进入百度</a><br/>")//内嵌图片.append("<img src=\"cid:a00000001\"><br/><br/>").append("<img src=\"cid:a00000002\">").append("<p> 时间为:"+ new Date() +"</p>");mailBean.setContent(sb.toString());//附件mailBean.setAttachFileNames(new String[]{"/Users/Downloads/密码管理.xlsx","/Users/Downloads/1635834323888.jpg"});//内嵌了多少张图片,如果没有,则new一个不带值的MapMap<String,String> image = new HashMap<>();image.put("a00000001", "/Users/Downloads/WechatIMG22.jpg");image.put("a00000002", "/Users/Downloads/face_1631083961355.png");mailBean.setImageMap(image);emailSendMsgHandle.sendEnclosureEmail(mailBean);}


(4)以表格的形式发送邮件

log.info(" --- 任务调度开始 --- ");try {//查询维保时间即将过期的产品List<CustomerProductVo> customerProductList = customerService.selectCustomerProductList();//根据项目编号去重List<CustomerProductVo> newCustomerProductList = customerProductList.stream().filter(distinctByKey(CustomerProductVo::getProjectCode)).collect(Collectors.toList());//发送邮件MailInfo mailBean = new MailInfo();
//            mailBean.setReceiver(new String[]{"weg@bj.com"});mailBean.setSubject("维保时间即将过期的客户产品");mailBean.setCc(new String[]{"weg@bj.com"});StringBuilder stringBuilder = new StringBuilder();//表格制作stringBuilder.append("\r\n");stringBuilder.append("<html><head></head><body><h2>您好,以下内容是维保时间即将过期的客户产品,请及时处理!</h2>");stringBuilder.append("<table border=\"5\" style=\"border:solid 1px #E8F2F9;font-size=14px;;font-size:22px;\">");stringBuilder.append("<tr style=\"background-color: #428BCA; color:#ffffff\">" +"<th width=\"180px\">客户中文名称</th>" +"<th width=\"180px\">客户英文名称</th>" +"<th width=\"180px\">项目名称</th>" +"<th width=\"180px\">项目编号</th>" +
//                    "<th width=\"180px\">产品名称</th>" +
//                    "<th width=\"180px\">产品版本</th>" +"<th width=\"180px\">查询时间</th>" +"<th width=\"200px\">维保结束时间</th>" +"</tr>");for (CustomerProductVo vo : newCustomerProductList) {stringBuilder.append("</tr>");stringBuilder.append("<td style=\"text-align:center\">" + vo.getCustomerChName() + "</td>");stringBuilder.append("<td style=\"text-align:center\">" + vo.getCustomerEnName() + "</td>");stringBuilder.append("<td style=\"text-align:center\">" + vo.getProjectName() + "</td>");stringBuilder.append("<td style=\"text-align:center\">" + vo.getProjectCode() + "</td>");
//                stringBuilder.append("<td style=\"text-align:center\">" + vo.getProductName() + "</td>");
//                stringBuilder.append("<td style=\"text-align:center\">" + vo.getProductVersion() + "</td>");stringBuilder.append("<td style=\"text-align:center\">" + DateUtils.date2Str(new SimpleDateFormat("yyyy-MM-dd")) + "</td>");stringBuilder.append("<td style=\"text-align:center\">" + DateUtils.date2Str(vo.getDealine(),new SimpleDateFormat("yyyy-MM-dd")) + "</td>");stringBuilder.append("</tr>");}stringBuilder.append("</table>");stringBuilder.append("</body></html>");//发送邮件mailBean.setContent(stringBuilder.toString());emailSendMsgHandle.sendHtmlEmail(mailBean,true);} catch (Exception e) {e.printStackTrace();log.error("邮件发送失败,失败原因是:{}",e.getMessage());}log.info(" --- 执行完毕,时间:"+DateUtils.now()+"---");

Springboot 邮件发送(html内嵌图片、附件)相关推荐

  1. 邮件中html内嵌图片,邮件内嵌html

    一般的HTML格式电子邮件,都可以使用内建有HTML编辑器的电子邮件程序(如:Outlook Express)编写发送.我们以Outlook Express 5.0(简称OE 5.0)为例,点击工具栏 ...

  2. 邮件中html内嵌图片,email - 在HTML电子邮件中嵌入附加图像 - SO中文参考 - www.soinside.com...

    你的问题的答案是在春季文档here. mailSender.send(new MimeMessagePreparator() { public void prepare(MimeMessage mim ...

  3. 邮件中html内嵌图片,在html电子邮件中嵌入图像

    尝试直接插入,这样您就可以在电子邮件的不同位置插入多个图像. 并且要使这篇文章对其他人有用:如果你没有base64数据字符串,可以从图像文件中轻松地创建一个:http: //www.motobit.c ...

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

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

  5. Java发送内嵌图片的邮件

    使用Java发送邮件时,既需要发送html文档又需要在邮件中内嵌图片(非附件形式),这里封装了一个类使用JavaMail组织的邮件发送,支持多张图片发送,并指定图片位置.注意img标签src要如下写& ...

  6. java发送内嵌图片邮件

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

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

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

  8. spring-boot邮件发送功能演示(163邮箱与QQ邮箱互发)

    背景:使用 Spring Boot 发送邮件,演示的邮箱为 163邮箱与QQ邮箱,两者可以实现互发邮件. 问题:自己可以实现一下 QQ邮箱 发 QQ邮箱,163发163,是什么样的. 演示 :163 ...

  9. 基于python的图形化邮件发送程序(支持添加附件)

    2019独角兽企业重金招聘Python工程师标准>>> 开发环境:centos7 基于:python3.5 调用库:tkinter smtplib email linux中类outl ...

  10. python发邮件给女朋友代码_python实现邮件发送完整代码(带附件发送方式)

    实例一:利用SMTP与EMAIL实现邮件发送,带附件(完整代码) __author__ = 'Administrator' #coding=gb2312 from email.Header impor ...

最新文章

  1. 深入探寻seajs的模块化与加载方式
  2. 堆排序(如何手写堆)
  3. 你不知道的APP色彩跟产品场景的关联因素(干货多图)
  4. 安装webpack以及webpack-dev-server
  5. zookeeper命令行(zkCli.shzkServer.sh)使用及四字命令
  6. (线段树)hdoj1166-敌兵布阵
  7. Emmet使用-----HTML
  8. phpcms开启在线编辑模版 方法
  9. 云栖社区 mysql_mysql
  10. 专家:苹果有能力打造Mac芯片但不会去做
  11. 信贷违约风险预测(三)简单的特征工程
  12. springboot+springcloudgateway+nacos+sleuth+zipkin+mysql
  13. 破解TexturePacker加密资源
  14. 网易2019实习生招聘编程题集合
  15. docker启动jenkins部署springboot到tomcat(集成:企业微信和邮件通知)
  16. 2-1:编写一个Java应用程序,输出俄文字母表。
  17. 白皮书《Leveraging Containers and OpenStack》(下)
  18. **R语言中的%in% 用法**
  19. 小程序源码:宅男必备福利壁纸大全自动采集微信小程序
  20. gmail 邮箱发送邮件 连接超时解决

热门文章

  1. 构建CF卡Linux系统的几个常见难题
  2. postman安装报错 无法定位_Postman中文版
  3. python 以图搜图1688_python 以图搜图
  4. 图片标签及以图搜图场景应用
  5. 华为android是什么文件夹,华为手机里的文件夹代表什么?哪些可以清除?看完秒懂!...
  6. win10安装visio2010出错_win10 office2013安装错误1907解决方法
  7. Carpet-mod常用的用法记录
  8. 使用Bugzilla,你肯定会遇到的坑。
  9. selenium+python实现登QQ邮箱并发送邮件自动化
  10. Rxjava + retrofit + dagger2 + mvp搭建Android框架