使用Spring Boot 优雅地发送邮件
1、前言
2、发送邮件
2.1 准备工作
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.2 添加配置
#邮箱环境配置 如何用Spring Boot优雅地发送邮件
#发送邮件服务器
spring.mail.host=smtp.163.com
#发送邮件的邮箱地址
spring.mail.username=XXX@163.com
#邮箱密码
spring.mail.password=yourPassword
spring.mail.default-encoding=utf-8
#邮件协议
spring.mail.protocol=smtps
#设置ssl端口
spring.mail.port=465
# I/O连接超时时间,单位为毫秒,默认为永不超时
spring.mail.smtp.timeout=1000
#设置默认的邮件发送源地址
spring.mail.from=${spring.mail.username}
这些配置除了spring.mail.from需要手动注入项目,其他项将自动注入,无需人为干预,贴心!如果是QQ邮箱,需要设置yourPassword为QQ官方服务授权码,自己问问度娘吧!自动装载邮件传输协议配置属性的源码:
org.springframework.boot.autoconfigure.mail.MailSenderPropertiesConfiguration
打断点并启动系统后,可以看到如下信息:
下面是发送邮件的接口:
public interface MailService { Boolean sendSimpleMail(String to, String subject, String content);
String sendHtmlEmail(String to, String subject, String content);
String sendAttachmentsMail(String to, String subject, String content, String filePath);
}
下面是实现类,负责创建和发送新的电子邮件消息。
@Service
@Slf4j
public class MailServiceImpl implements MailService {
@Autowired
private JavaMailSender javaMailSender;
@Value("${spring.mail.from}")
private String from;
/**
* 发送普通电子邮件
* @param to 邮件接收地址
* @param subject 邮件主题
* @param content 邮件内容
* @return 电子邮件是否发送成功
*/
@Override
public Boolean sendSimpleMail(String to, String subject, String content) {
SimpleMailMessage msg = new SimpleMailMessage();
msg.setFrom(from);
msg.setTo(to);
msg.setSubject(subject);
msg.setText(content);
try {
javaMailSender.send(msg);
log.info("简单邮件已经发送。" + content);
} catch (MailException ex) {
log.error("发送失败:" + ex.getMessage());
return false;
}
return true;
}
/**
* 发送HTML邮件
* @param to
* @param subject
* @param content
* @return
*/
@Override
public String sendHtmlEmail(String to, String subject, String content) {
MimeMessage message = null;
try {
message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from); helper.setTo(to);
helper.setSubject(subject);
// 撰写HTML格式的内容
StringBuffer sb = new StringBuffer("<p style='color:#6db33f'>使用Spring Boot发送HTML格式电子邮件。</p>");
helper.setText(sb.toString(), true);
javaMailSender.send(message);
return "发送成功";
} catch (Exception e) {
return e.getMessage();
}
}
/**
* 发送带附件的邮件
*
* @param to
* @param subject
* @param content
* @param filePath
*/
@Override
public String sendAttachmentsMail(String to, String subject, String content, String filePath) {
MimeMessage message = javaMailSender.createMimeMessage();
try {
//true表示需要创建一个multipart message
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true); FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
helper.addAttachment(fileName, file); javaMailSender.send(message);
log.info("带附件的邮件已经发送。");
} catch (Exception e) {
log.error("发送带附件的邮件时发生异常!", e);
return "失败";
}
return "成功";
}
}
简单邮件是没有样式的,很多时候,我们希望发送的邮件内容带有样式,此时可发送HTML邮件,使用第二个函数即可满足需求。如果遇到需要为邮件插入附件的场景,请调用第三个函数。
3、测试入口类
@RestController
@RequestMapping("/sendEmail")
public class SendEmailsController { @Autowired
private MailService mailService;
private static String to = "yyy@163.com";
@RequestMapping("/sendSimpleEmail")
@ResponseBody
public boolean sendEmail() {
return mailService.sendSimpleMail(to, "一封文本格式的邮件", "哈哈哈");
}
@RequestMapping("/sendHtmlEmail")
@ResponseBody
public String sendHtmlEmail() {
return mailService.sendHtmlEmail(to, "一封HTML格式的邮件", "哈哈哈");
}
@GetMapping(value = "/sendAttachmentsMail")
public String sendAttachmentsMail() {
return mailService.sendAttachmentsMail(to, "测试发送附件Title",
"测试发送附件 title", "C:\\Users\\20190265\\Pictures\\15718018.jpg");
}
}
关于在Spring Boot中发送电子邮件的不同姿势,大家有什么看法?欢迎留言讨论,祝各位生活愉快,工作顺利!
Reference
使用Spring Boot 优雅地发送邮件的更多相关文章
- spring boot使用常规发送邮件
spring boot使用常规发送邮件 1.pom.xml文件依赖: <!-- javax.mail begin--> <dependency> <groupId> ...
- 如何在 Spring Boot 优雅关闭加入一些自定义机制
个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...
- Spring Boot 优雅的配置拦截器方式
https://my.oschina.net/bianxin/blog/2876640 https://cs.xieyonghui.com/java/55.html 其实spring boot拦截器的 ...
- Spring Boot优雅地处理404异常
背景 在使用SpringBoot的过程中,你肯定遇到过404错误.比如下面的代码: @RestController @RequestMapping(value = "/hello" ...
- Spring Boot使用JavaMailSender发送邮件
http://www.cnblogs.com/wxc-xiaohuang/p/9532631.html https://blog.csdn.net/icannotdebug/article/detai ...
- 九、Spring Boot 优雅的实现CORS跨域
前言 我们的springboot 架手架已经包含了mysql,redis,定时任务,邮件服务,短信服务,文件上传下载,以及docker-compose 构建镜像等等. 接下来让我们解决另一个常见的问题 ...
- Spring Boot 系列:最新版优雅停机详解
爱生活,爱编码,本文已收录架构技术专栏关注这个喜欢分享的地方. 开源项目: 分布式监控(Gitee GVP最有价值开源项目 ):https://gitee.com/sanjiankethree/cub ...
- Spring Boot 项目中常见注解
@Autowired 自动导入依赖的 Bean.byType方式.把配置好的 Bean拿来用,完成属性.方法的组装,它可以对类成员变量.方法及构造函数进行标注,完成自动装配的工作 import org ...
- Spring Boot笔记之邮件(spring-boot-starter-mail)
Spring Boot环境中发送邮件 pom.xml引入`spring-boot-starter-mail` application.yml配置 163邮箱 QQ邮箱 Gmail邮箱 发送邮件 ser ...
- Spring Boot 发送邮件
需求 最近因为业务的变更,需要对老用户进行发送邮件处理.目前市面上也有很多代发邮件的接口,可以接入.由于量不是特别大,放弃了这个途径.改用我们自己通过 smtp 发送邮件来处理. 技术选择 Java ...
随机推荐
- win7系统安装mysql新建数据库/数据表及故障处理,安装mysql后net start mysql服务无法启动
问题描述:win7系统安装mysql,安装mysql后net start mysql服务无法启动 1.下载mysql: 官网地址:https://dev.mysql.com/downloads/mys ...
- Appflowy cloud 部署测试避坑指南
在进行 Appflowy cloud 部署测试时,我可谓是踩坑无数.下面,我想从几个关键方面来分享一下我的经验. 先给大家讲讲我的基础情况.Appflowy cloud 的部署是在 docker 环境 ...
- Web前端入门第1问:英语是否很重要?有哪些前置条件?
HELLO,这里是大熊学习前端开发的入门笔记. 本系列笔记基于 windows 系统. 在入门之前,是否有这样的疑问: 程序员的英语是否很牛?毕竟程序员的代码像天书一样,比如这样: 答案是否定的. 英 ...
- QTableView实现在表格内直接对数据库内容进行修改、新增和删除等操作
文章目录 前言 QSqlTableModel 新增 删除 修改 提交 取消 前言 本文主要利用QSqlTableModel+QTableView来实现直接在QTableView中进行对数据库数据的操作 ...
- git和github的入门操作
之前因为工作中用的都是SVN版本控制工具,没接触过git和github,现在开始深入自学Django框架技术后,看到官网推荐使用git,然后这两天网上查阅了很多文章教程,学到入门操作需要学习的点,太多 ...
- windows端5款mysql客户端工具
1. MySQL Workbench 这属于mysql官方出品,免费,功能强大,是首选. 2. HeidiSQL 免费,功能强大,强烈推荐. 3. dbForge Studio for MySQL 收 ...
- delphi判断字符是否是汉字
function IsHZ(ch: WideChar): boolean; var i: Integer; begin i := Ord(ch); if (i < 19968) or (i &g ...
- MySQL 修复损坏表
修复MySQL损坏表的简单步骤,不一定适用任意情况下的表损坏的问题,留爪. 简单3步曲: # 用`root`用户登录MySQL # 这里可能需要输入密码 mysql -uroot -p # 使用指定数 ...
- access的多个left outer join连接
虽然你有一万个理由,但是选择ACCESS数据库就是一个不能再蠢的决定. 从AC990账务系统中采集凭证记录,需要做多个左连接.在sql server管理器中执行蛮好,没有问题.可是在程序中就一堆Err ...
- 把postgreSQL的表导入SQLite
万能的互联网,一查一大堆废话,几乎搞不定.现将查到的资料结合实践概况如下,对不对也不清楚,反正可以跑了. 1.把PostgreSQL的表SQL语句复制出来 CREATE TABLE "mai ...