SpringBoot实现邮件发送
目录
需求背景
实现过程
开启POP3/SMTP服务
书写发送邮件部分代码
测试结果
接口请求
发送成功
异常示例
邮箱授权码错误
邮箱服务器地址错误
使用邮箱密码而非生成的授权码
邮箱未开启POP3/SMTP服务
总结
需求背景
- 因项目需求,需要实现Java发送邮件预警,这里简单的做一个spring boot项目实现Java发送邮件示例(简单调通);
- 发送邮箱:xxx@qq.com,配置项都和邮箱有关,比如qq邮箱发送和网易邮箱发送的配置就不一样;
- 接受邮箱:不规定;
- 项目是sprint boot项目;
- 文章不列出踩过的坑,按照正确的步骤一把过。
实现过程
开启POP3/SMTP服务
- 打开网站登录qq邮箱
登录QQ邮箱
- 开启POP3/SMTP服务
书写发送邮件部分代码
- 引入依赖
<dependencies><dependency> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>
</dependencies>
- 在application.yml中添加邮箱配置
spring:mail:host: smtp.qq.com #邮箱服务器地址(其他非qq邮箱服务器地址需要对应修改)username: 11xxxxxx50@qq.com #用户名password: jchdzdeppdtjxhbhe #密码default-encoding: UTF-8mail:fromMail.addr: 11xxxxxx50@qq.com #以谁来发送邮件
上图中的password需要登录邮箱生成,如下(按照提示发送短信就会生成):
- 基本类:Mail
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Mail {private String to;private String subject;private String content;
}
- 服务层接口:MailService
public interface MailService {void sendSimpleMail(Mail mail);
}
- 服务层实现类:MailServiceImpl
@Service
public class MailServiceImpl implements MailService {final Logger logger = LoggerFactory.getLogger(this.getClass());@Autowiredprivate JavaMailSender mailSender;@Value("${mail.fromMail.addr}")private String from;@Overridepublic void sendSimpleMail(Mail mail) {SimpleMailMessage message = new SimpleMailMessage();message.setFrom(from);message.setTo(mail.getTo());message.setSubject(mail.getSubject());message.setText(mail.getContent());try {mailSender.send(message);logger.info("简单邮件已经发送。");} catch (Exception e) {logger.error("发送简单邮件时发生异常!", e);}}}
- 控制层:MailController
@RestController
@RequestMapping("/mail")
public class TestController {@Autowiredprivate MailServiceImpl mailService;@GetMapping("/send")public void sendMail(@RequestBody Mail mail) {mailService.sendSimpleMail(mail);}
}
测试结果
接口请求
发送成功
异常示例
邮箱授权码错误
org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535 Login Fail. Please enter your authorization code to login. More information in http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
邮箱服务器地址错误
org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535 Error: authentication failed
使用邮箱密码而非生成的授权码
org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535 Login Fail. Please enter your authorization code to login. More information in http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
邮箱未开启POP3/SMTP服务
org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535 Login Fail. Please enter your authorization code to login. More information in http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
注意:"邮箱授权码错误"和"邮箱未开启POP3/SMTP服务"错误一样。
总结
注意两个地方:
- 邮箱对应的服务器地址必须要匹配,不知道可以去网上查;
- 代码里配置的邮箱password必须是POP3/SMTP服务下生成的授权码,写实际邮箱密码会报异常 ;
- 授权码一经生成,关闭POP3/SMTP服务后再开启,授权码依然有效(所以开启POP3/SMTP服务邮箱就存在安全风险)。
更多更详细可参考:Spring Boot (十):邮件服务 - 纯洁的微笑博客
SpringBoot实现邮件发送相关推荐
- Java技术:SpringBoot实现邮件发送功能
邮件发送功能基本是每个完整业务系统要集成的功能之一,今天小编给大家介绍一下SpringBoot实现邮件发送功能,希望对大家能有所帮助! 今天主要给大家分享简单邮件发送.HTML邮件发送.包含附件的邮件 ...
- Springboot实现邮件发送(2020最新版)
在正式讲解如何用Springboot发送邮件之前,先普及四个容易忽视的概念(好多教程直接忽略介绍): 1.邮件协议,简单理解下:小明给小红发了一封邮件,指的是小明登录邮箱客户端(比如通过浏览器登录QQ ...
- 使用SpringBoot实现邮件发送
邮件发送是一个非常常见的功能,注册时的身份认证.重要通知发送等都会用到邮件发送.Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐,Spring中提供了JavaMailSender用来简化 ...
- 补习系列(12)-springboot 与邮件发送
目录 一.邮件协议 关于数据传输 二.SpringBoot 与邮件 A. 添加依赖 B. 配置文件 C. 发送文本邮件 D.发送附件 E. 发送Html邮件 三.CID与图片 参考文档 一.邮件协议 ...
- SpringBoot整合邮件发送
本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringBoot相关知识相关知识,打造完整的SpringBoot学习步骤,提升工程化编码能力和思维能力,写出高质量代码.希望大家都能够从中有所收 ...
- SpringBoot整合邮件发送功能
说在前头:本人为大二在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,发布的文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正.若在阅 ...
- SpringBoot 实现邮件发送功能
1.知识点疏通 邮件再项目中经常会被用到,比如邮件发送通知,比如通过邮件注册,认证,找回密码,系统报警通知,报表信息等. 接下来先了解一下邮件协议. 1.1 SMTP.POP.IMAP4协议 SMIP ...
- Springboot之邮件发送(内附源码)
目录 概述 邮件协议简介 常用SMTP服务器地址 准备工作 授权密码申请 1.进入邮箱设置 2.开启SMTP服务 coding 1.Maven依赖添加 2.yml配置 3.创建参数实体 4.创建业务调 ...
- android javamail获取邮件太多太慢_「Java」 - SpringBoot amp; 邮件发送
发送邮件是web应用系统的必备功能之一,用于用户注册验证.忘记密码找回或者发送营销信息.最早期使用JavaMail相关API写发送邮件的相关代码,后来Spring推出了JavaMailSender简化 ...
- 学习SpringBoot 集成邮件发送(参考纯洁的微笑) 记录其中遇到的问题
2019独角兽企业重金招聘Python工程师标准>>> 1.pom里面,增加相关依赖包 <!--邮件集成--> <dependency><groupId ...
最新文章
- C++迟后联编和虚函数表
- python pyyaml模块使用示例:读取yaml文件内容
- Maven,Eclipse和Java 9
- STL源码剖析 Stack栈 queue队列
- java http 下载文件_JAVA通过HttpURLConnection 上传和下载文件的方法
- Flutter MaterialButton 实现圆角边框按钮
- Spring Boot 你所不知道的超级知识学习路线清单
- python中国官网-Python教程
- Atitit 四种自动机 fsm pda 目录 1. 自动机可分为有限自动机、后进先出自动机、线性有界自动机、图灵机等几种。它们对语言的识别能力各不相同。	2 1.1. 抽象自动机的理论。	2 1.
- 【java工具类】将明文密码转成MD5密码
- 达索系统携百世慧科技亮相第二届四川装备智造国际博览会
- QFP封装芯片手工焊接和拆卸技巧
- 缓解精神内耗的“马原疗法”
- IT大学生成长周报 | 第 5 期
- 如何进行自媒体创业?你是否能把握住,短视频都有哪些变现方式?
- 马少平、周枫、王小川、楼天城、唐文斌……清华计算机系与AI的40年
- 【数据手册】LM1117L3芯片的使用
- updata联表修改
- C++转换为C需要注意的各项问题
- 梦飞 —— 述:我只是一个普通农民家的孩子,但我有一个梦想