SpringBoot中快速实现邮箱发送
前言
在许多企业级项目中,需要用到邮件发送的功能,如:
- 注册用户时需要邮箱发送验证
- 用户生日时发送邮件通知祝贺
发送邮件给用户等
创建工程导入依赖
<!-- 邮箱发送依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- 小火龙代码简化 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
本工程依赖于SpringBoot,是基于SpringBoot再次对邮箱发送进行了一次封装。
创建Application.properties
# JavaMailSender 邮件发送的配置
spring.mail.host=smtp.qq.com
spring.mail.username=lovelyWu98k@qq.com
#授权码
spring.mail.password=
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.default-encoding=UTF-8
封装邮箱发送工具类
创建邮箱信息实体类,如下:
/**
* 邮件信息实体
*
* @author:伍梓涛
* @version:1.0.0
* @Modified By:SimpleWu
* @CopyRright (c)2019-:YUM架构平台
*/
@Data
public class MailEntity {
private String to; //收件人
private String subject;//标题
private String text;//正文
private boolean isHtml = false;//是否html邮件
private List<String> files;//附件地址
private Date sentDate;//发送时间
}
创建邮箱信息实体类工具,快捷创建邮件信息
/**
* 邮箱发送信息统一处理封装
*
* @author:伍梓涛
* @version:1.0.0
* @Modified By:SimpleWu
* @CopyRright (c)2019-:YUM架构平台
*/
@Slf4j
public class MailEntityHelper {
public static MimeMessageHelper craeteMessageHelper(MimeMessage mimeMessage, MailEntity mailBean) throws MessagingException {
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
// mimeMessageHelper.setFrom(emailSender);//发件人
mimeMessageHelper.setTo(mailBean.getTo());//收件人
mimeMessageHelper.setSubject(mailBean.getSubject());//标题
mimeMessageHelper.setText(mailBean.getText(), mailBean.isHtml());//是否html
mimeMessageHelper.setSentDate(mailBean.getSentDate() == null ? new Date() : mailBean.getSentDate());// 客户端邮箱发送时间
if (mailBean.getFiles() != null && mailBean.getFiles().size() > 0) {
//附件添加
mailBean.getFiles().forEach(filename -> {
String ext = filename.substring(filename.lastIndexOf(".") + 1, filename.length());
File diskfile = new File(filename);
try {
mimeMessageHelper.addAttachment(diskfile.getName(), diskfile);
} catch (MessagingException e) {
e.printStackTrace();
log.error("设置附件失败:{}", mailBean);
}
});
}
return mimeMessageHelper;
}
}
创建邮箱发送工具类,进行邮箱发送:
/**
* 邮箱发送工具类
*
* @author:伍梓涛
* @version:1.0.0
* @Modified By:SimpleWu
* @CopyRright (c)2019-:YUM架构平台
*/
@Component
@Slf4j
public class MailHelper {
@Autowired
private JavaMailSender javaMailSender;
@Value("${spring.mail.username}")
private String emailSender;
private static MailHelper mailHelper;
public MailHelper() {
mailHelper = this;
}
/**
* 构建静态获取实例
*
* @return
*/
public static MailHelper buidler() {
if (mailHelper == null) {
return null;
}
return mailHelper;
}
/*public void sendSimpleMail(EmailContextPojo mailBean) {
try {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
//邮件发送人
simpleMailMessage.setFrom(emailSender);
//邮件接收人
simpleMailMessage.setTo(mailBean.getTo());
//邮件主题
simpleMailMessage.setSubject(mailBean.getSubject());
//邮件内容
simpleMailMessage.setText(mailBean.getText());
javaMailSender.send(simpleMailMessage);
} catch (Exception e) {
e.printStackTrace();
log.error("邮件发送失败", e.getMessage());
}
}*/
public void sendMail(MailEntity mailBean) {
MimeMessage mimeMailMessage = null;
try {
mimeMailMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = MailEntityHelper.craeteMessageHelper(mimeMailMessage, mailBean);
mimeMessageHelper.setFrom(emailSender);//发件人
javaMailSender.send(mimeMailMessage);
} catch (Exception e) {
log.error("邮件发送失败", e.getMessage());
}
}
public void sendMail(MailEntity... mailBeans) {
//批量发送集合
List<MimeMessage> mimeMessages = new ArrayList<>(mailBeans.length);
try {
if (mailBeans != null || mailBeans.length > 0) {
for (int i = 0; i < mailBeans.length; i++) {
MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = MailEntityHelper.craeteMessageHelper(mimeMailMessage, mailBeans[i]);
messageHelper.setFrom(emailSender);//发件人
mimeMessages.add(mimeMailMessage);
}
}
MimeMessage[] resultMessage = new MimeMessage[mimeMessages.size()];
mimeMessages.toArray(resultMessage);
javaMailSender.send((resultMessage));
} catch (Exception e) {
log.error("邮件发送失败", e.getMessage());
}
}
}
在之前通过邮箱发送信息统一处理的工具类,对邮件信息实体进行封装后,这里就只需要传入对象参数即可。由于在这里使用的是SpringBoot已经封装好的,由于我们要把它当成工具类使用,每次需要注入并不方便。
所在在类中加了个静态对象,在Spring 容器实例化的时候给他初始化直接赋值给javaMailSender并且通过buidler()可以静态获取到实例对象,但是这样如果被重新创建对象后就会产生问题,所以最好在工具类中使用Spring 容器去获取 javaMailSender即可 。
发送邮件
1.发送普通邮件
MailEntity emailContextPojo = new MailEntity();
emailContextPojo.setSubject("Ycloud 邮箱标题");
emailContextPojo.setText("Ycloud 邮箱正文");
emailContextPojo.setTo(" 接收邮箱号 ");
MailHelper.buidler().sendMail(emailContextPojo);
2.发送Html邮件
emailContextPojo.setHtml(true);
只需要将信息实体类设置成true即可。
3.发送附件
emailContextPojo.setFiles(Arrays.asList("D:\\Yum系统架构平台\\004.高系统部署\\004.PXC\\部署手册.docx"));
只需要增加附件路径即可。
注: 请勿直接在项目中使用邮箱发送
可参考JOB实现定时发送邮件:https://www.cnblogs.com/SimpleWu/p/11341453.html
本文代码案例:https://github.com/450255266/open-doubi/tree/master/SpringBoot/email
SpringBoot中快速实现邮箱发送的更多相关文章
- 玩转 SpringBoot 2 快速整合 | JSP 篇
前言 JavaServer Pages(JSP)技术使Web开发人员和设计人员能够快速开发和轻松维护利用现有业务系统的信息丰富的动态Web页面. 作为Java技术系列的一部分,JSP技术可以快速开发独 ...
- IDEA中SpringBoot项目快速创建单元测试
如何在IDEA中对于SpringBoot项目快速创建单元测试 创建测试用例 右键需要进行测试的方法,选择GO TO然后选择Test 点击Create New Test 勾选需要创建单元测试的方法 然后 ...
- 如何在优雅地Spring 中实现消息的发送和消费
本文将对rocktmq-spring-boot的设计实现做一个简单的介绍,读者可以通过本文了解将RocketMQ Client端集成为spring-boot-starter框架的开发细节,然后通过一个 ...
- Springboot使用javaMail进行邮件发送
导入相关依赖 <!--邮件发送--> <dependency> <groupId>javax.mail</groupId> <artifactId ...
- springboot中使用RabbitMq
转载:http://www.ityouknow.com/springboot/2016/11/30/spring-boot-rabbitMQ.html RabbitMQ 即一个消息队列,主要是用来实现 ...
- SpringBoot开发快速入门
SpringBoot开发快速入门 目录 一.Spring Boot 入门 1.Spring Boot 简介 2.微服务 3.环境准备 1.maven设置: 2.IDEA设置 4.Spring Boot ...
- springboot中RedisTemplate的使用
springboot中RedisTemplate的使用 参考 了解 Redis 并在 Spring Boot 项目中使用 Redis--以IBM为学习模板 springboot之使用redistemp ...
- SpringBoot中Jackson的过滤使用
在接口的返回对象中,可能会有一些属性为null或者需要禁止某些字段返回给客户端. 在SpringBoot中可使用内置了Jackson实现这个需求 1. 过滤为null字段 在实体类中使用@JsonIn ...
- [UWP]UWP中获取联系人/邮件发送/SMS消息发送操作
这篇博客将介绍如何在UWP程序中获取联系人/邮件发送/SMS发送的基础操作. 1. 获取联系人 UWP中联系人获取需要引入Windows.ApplicationModel.Contacts名称空间. ...
随机推荐
- Excel催化剂开源第12波-VSTO开发遍历功能区所有菜单按钮及自定义函数清单
在插件开发过程中,随着功能越来越多,用户找寻功能入口将变得越来越困难,在Excel催化剂 ,将采用遍历所有功能的方式,让用户可以轻松使用简单的查找功能找到想要功能所在位置,查找的范围有:功能按钮的显示 ...
- MyEclipse2014破解版
百度云:链接:http://pan.baidu.com/s/1c3jKMa 密码:yss0 等版本)后,不要打开软件. 二.解压破解文件压缩包,得到一下文件列表: 三.双击run.bat,即可运行cr ...
- TestNG中group的用法
TestNG中的组可以从多个类中筛选组属性相同的方法执行. 比如有两个类A和B,A中有1个方法a属于组1,B中有1个方法b也属于组1,那么我们可以通过配置TestNG文件实现把这两个类中都属于1组的方 ...
- 使用hexo中遇到的问题
- Shiro权限框架与SpringMVC集成
1.Shiro整合SpringMVC 我们学习Shiro框架肯定是要应用到Web项目上的,所以我们需要整合Shiro和SpringMVC 整合步骤: 第一步:SpringMVC框架的配置 spring ...
- Spring JdbcTemplate之使用详解
最近在项目中使用到了 Spring 的 JdbcTemplate, 中间遇到了好多坑, 所以花一些时间对 JdbcTemplate 的使用做了一个总结, 方便以后自己的查看.文章中贴出来的API都是经 ...
- spring boot 学习笔记(二)之打包
一.叙述 spring boot 在 pom 中可以配置成 packaging 为 jar ,这样打包出来的就是一个 jar 包,可以通过 Java 命令直接运行, Java 命令为: java - ...
- 【Java例题】4.3 3. 使用Gauss消元法求解n元一次方程组的根,
3. 使用Gauss消元法求解n元一次方程组的根,举例,三元一次方程组:0.729x1+0.81x2+0.9x3=0.6867x1+x2+x3=0.83381.331x1+1.21x2+1.1x3=1 ...
- 微信公众平台注册及AppID和AppSecret的获取
一.注册公众平台 1.入口 浏览器搜索“微信公众平台”,进入官网,点右上角立即注册. 2.选择账号类型 注册前需要选择一个账号类型,共有4个账号类型可以选择,每种类型能提供不同的功能,功能区别见下图. ...
- 什么是Singleton?
Singleton:在Java中即指单例设计模式,它是软件开发中最常用的设计模式之一. 单:指唯一 例:指实例 单例设计模式,即某个类在整个系统中只能有一个实例对象可被获取和使用的代码模式. 要点: ...