SpringBoot中快速实现邮箱发送代码解析

前言
在许多企业级项目中,需要用到邮件发送的功能,如:

注册用户时需要邮箱发送验证
用户生日时发送邮件通知祝贺
发送邮件给用户等

创建工程导入依赖
Copy
<!-- 邮箱发送依赖 -->
<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
Copy
# 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
封装邮箱发送工具类
创建邮箱信息实体类,如下:

Copy
/**
* 邮件信息实体
*
* @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;//发送时间

}
创建邮箱信息实体类工具,快捷创建邮件信息

Copy
/**
* 邮箱发送信息统一处理封装
*
* @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;
}

}
创建邮箱发送工具类,进行邮箱发送:

Copy

/**
* 邮箱发送工具类
*
* @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.发送普通邮件

Copy
MailEntity emailContextPojo = new MailEntity();
emailContextPojo.setSubject("Ycloud 邮箱标题");
emailContextPojo.setText("Ycloud 邮箱正文");
emailContextPojo.setTo(" 接收邮箱号 ");
MailHelper.buidler().sendMail(emailContextPojo);
2.发送Html邮件

Copy
emailContextPojo.setHtml(true);
只需要将信息实体类设置成true即可。
3.发送附件

Copy
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

(0)

相关推荐

  • Spring Boot实现邮件服务(附:常见邮箱的配置)

    前言 发送邮件应该是网站的必备功能之一,什么注册验证,忘记密码或者是给用户发送营销信息.最早期的时候我们会使用JavaMail相关api来写发送邮件的相关代码,后来spring退出了JavaMailSender更加简化了邮件发送的过程,在之后springboot对此进行了封装就有了现在的spring-boot-starter-mail,本文将详细给大家介绍了关于Spring Boot邮件服务的相关内容,下面话不多说了,来一起看看详细的介绍吧 1. pom.xml文件中引入依赖 <dependen

  • java实现163邮箱发送邮件到qq邮箱成功案例

    下载和上传附件.发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时间去弄,现在终于成功以163邮箱发送邮件到qq邮箱,以下是相关代码,具体解释可以参考代码中注释: package test; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Properties; import java.ut

  • thinkphp5使用bootstrapvalidator进行异步验证邮箱的示例

    本文介绍了thinkphp5使用bootstrapvalidator进行异步验证邮箱的示例,分享给大家,具体如下: js验证 /** * Created by HONGXIN on 2017-10-23. */ $(function () { $('form').bootstrapValidator({ message: 'This value is not valid', feedbackIcons: { valid: 'glyphicon glyphicon-ok', invalid: 'g

  • Java实现邮箱找回密码实例代码

    通过邮件找回密码功能的实现 1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密码. 2.参考别人的思路:发送邮件→请求邮件里的URL→验证url→{验证成功修改密码,不成功跳转到失败页面} 重点就是如何生成这个url和如何解析这个url. 需要注意的是一个url只能修改一次密码,当同一帐号发送多封邮件,只有最后一封邮件的url 邮箱 3.加密能防止

  • spring mail借助qq邮箱服务器发送邮件

    spring mail封装了javaMail的邮件服务,让邮件服务使用起来更简单,下面以qq邮箱服务器为例,用spring mail服务来发送邮件 配置qq邮箱,"设置"--"账户",打开smtp服务,生成授权码 生成授权码需要验证手机,接下来用qq邮箱账号和授权码就可以发送邮件了,不需要qq密码 spring mail服务在spring-context-support中,配置依赖,然后就可以借助qq邮箱提供的发件服务器发送邮件了 <dependency>

  • Java发送邮箱验证码、session校验功能

    本篇主要描述"发送邮箱验证码.session校验"相关前(html\js)后(java)台代码,业务逻辑示例,闲话少诉,直接上代码. 1.引入的jar包是mail-1.4.jar 2.java底层发送邮箱方法 public boolean sendEMail(Map<String, Object> map) { log.info("電子郵件接口執行開始!"); String from = Cache.getInstance().getParamsCons

  • SpringBoot中快速实现邮箱发送代码解析

    前言 在许多企业级项目中,需要用到邮件发送的功能,如: 注册用户时需要邮箱发送验证 用户生日时发送邮件通知祝贺 发送邮件给用户等 创建工程导入依赖 Copy <!-- 邮箱发送依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency&g

  • SpringBoot中实现数据字典的示例代码

    我们在日常的项目开发中,对于数据字典肯定不模糊,它帮助了我们更加方便快捷地进行开发,下面一起来看看在 SpringBoot 中如何实现数据字典功能的 一.简介 1.定义 数据字典是指对数据的数据项.数据结构.数据流.数据存储.处理逻辑等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明,使用数据字典为简单的建模项目.简而言之,数据字典是描述数据的信息集合,是对系统中使用的所有数据元素的定义的集合. 数据字典(Data dictionary)是一种用户可以访问的记录数据库和应用程序元数

  • SpringBoot中使用RocketMQ的示例代码

    目录 1 订单微服务发送消息 1.1 订单微服务添加rocketmq的依赖 1.2 添加配置 1.3 编写测试代码 1.4 测试 2 用户微服务订阅消息 2.1 用户微服务增加rocketmq依赖 2.2 修改主类,启动nacos客户端 2.3 修改配置文件 2.4 编写消息接收服务 2.5 测试 接下来我们模拟一种场景:商品下单成功之后,向下单用户发送短信.以此来示例SpringBoot中RocketMQ的使用方式. 1 订单微服务发送消息 1.1 订单微服务添加rocketmq的依赖 <!-

  • Shiro在springboot中快速实现方法

    目录 一.shiro使用必须了解的知识 1.shiro是什么? 2.shiro架构三个常用三大核心对象 3.在springboot中使用时,主要可将其看作两个模块(请求过滤模块.认证授权模块) 4.依赖 二.具体使用 1.编写配置类(config) 1.1.Shiro过滤对象(ShiroFilterFactoryBean) 1.2.Shiro安全对象(DefaultWebSecurity) 1.3.创建realm对象(自定义) 2.创建realm对象 2.1.自定义realm类去继承Author

  • mysql查询语句中用户变量的使用代码解析

    上一篇文章中我们介绍了MySQL优化总结-查询总条数.这篇文章我们来介绍下查询语句中的另一个知识:用户变量的使用代码解析. 先上代码吧 SELECT `notice`.`id` , `notice`.`fid` , `notice`.`has_read` , `notice`.`notice_time` , `notice`.`read_time` , `f`.`fnum` , `f`.`forg` , `f`.`fdst` , `f`.`actual_parking` AS `parking`

  • java中幂指数值的运算代码解析

    说到幂指数的运算我们就会用到Math.pow(doublea,doubleb),返回的结果是a的b次方. 在Java中,当我们计算2的n次方时,可以直接用Math.pow来计算.非常方便. 但是,已知一个幂的结果为M和幂的底数a,现在要求幂的指数n.Math中提供的有log(double)方法,但是只能传入一个参数,即M.那么问题来了,如何简单.方便.快捷的达到我们的要求呢?答案如下: n=Math.log(M)/Math.log(a); 这个方法可以满足我们大多数幂指数的计算,但是每次访问的值

  • java中的异或问题代码解析

    java的位运算符中有一个叫异或的运算符,用符号(^)表示,其运算规则是:两个操作数的位中,相同则结果为0,不同则结果为1.下面看一个例子: public class TestXOR{ public static void main(String[] args){ int i = 15, j = 2; System.out.println("i ^ j = " + (i ^ j)); } } 运行结果是:i^j=13. 分析上面程序,i=15转成二进制是1111,j=2转成二进制是00

  • springboot中使用redis的方法代码详解

    特别说明: 本文针对的是新版 spring boot 2.1.3,其 spring data 依赖为 spring-boot-starter-data-redis,且其默认连接池为 lettuce ​redis 作为一个高性能的内存数据库,如果不会用就太落伍了,之前在 node.js 中用过 redis,本篇记录如何将 redis 集成到 spring boot 中.提供 redis 操作类,和注解使用 redis 两种方式.主要内容如下: •docker 安装 redis •springboo

  • java中xml进行报文发送和解析操作

    利用OKhttp网络框架,进行Maven项目管理 //报文发送 <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.8.0</version> </dependency> //报文解析 <dependency> <groupId>xom</gr

  • Python中sort和sorted函数代码解析

    本文研究的主要是Python中sort和sorted函数的相关内容,具体如下. 一.sort函数 sort函数是序列的内部函数 函数原型: L.sort(cmp=None, key=None, reverse=False) 函数作用: 它是把L原地排序,也就是使用后并不是返回一个有序的序列副本,而是把当前序列变得有序 参数说明: (1) cmp参数 cmp接受一个函数,拿整形举例,形式为: def f(a,b): return a-b 如果排序的元素是其他类型的,如果a逻辑小于b,函数返回负数:

随机推荐