SpringBoot2.x整合JavaMail以qq邮箱发送邮件
本文参考spring官网email接口文档所写。
spring-email官方网址:https://docs.spring.io/spring/docs/5.1.8.RELEASE/spring-framework-reference/integration.html#mail
1:相关依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>
2:邮箱收件人model
package com.dev.model.email; import java.io.Serializable; /**
* Created on 2019-08-02 16:16.
*
* @author zgq7
*/
public class EmailModel implements Serializable { /**
* 收件人姓名
**/
private String recieverName; /**
* 收件人邮箱地址
**/
private String recieverEmailAddress; /**
* 邮件主题
**/
private String emailTheme; /**
* 邮件内容
**/
private String emailContent; public String getRecieverName() {
return recieverName;
} public void setRecieverName(String recieverName) {
this.recieverName = recieverName;
} public String getRecieverEmailAddress() {
return recieverEmailAddress;
} public void setRecieverEmailAddress(String recieverEmailAddress) {
this.recieverEmailAddress = recieverEmailAddress;
} public String getEmailTheme() {
return emailTheme;
} public void setEmailTheme(String emailTheme) {
this.emailTheme = emailTheme;
} public String getEmailContent() {
return emailContent;
} public void setEmailContent(String emailContent) {
this.emailContent = emailContent;
}
}
3:邮箱工具类
package com.dev.utils.email; import com.dev.model.email.EmailModel;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator; import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; /**
* Created on 2019-08-02 16:06.
*
* @author zgq7
*/
public class MailSendUtils { private static final Logger logger = LoggerFactory.getLogger(MailSendUtils.class); /**
* 发送者地址
**/
private static String posterAdress = "xxx@qq.com"; /**
* 发送者姓名
**/
private static final String posterName = "xxx"; @Autowired
private JavaMailSender javaMailSender; @Autowired
private JavaMailSenderImpl javaMailSenderImpl; /**
* 文本发送
**/
public void sendEmailAsText(final EmailModel emailModel) {
MimeMessagePreparator mimeMessagePreparator = mimeMessage -> {
mimeMessage.setFrom(posterAdress);
mimeMessage.setRecipients(Message.RecipientType.TO, emailModel.getRecieverEmailAddress());
mimeMessage.setText("<html><body>"
+ "hello:" + emailModel.getRecieverName()
+ "<br>" + "msg:" + emailModel.getEmailContent()
+ "<br>" + "from :" + posterName
+ "</body></html>");
};
try {
this.javaMailSender.send(mimeMessagePreparator);
logger.info("邮箱已返送至[{}]邮箱!", emailModel.getRecieverName());
} catch (MailException e) {
logger.error("邮箱异常:{}", e);
}
} /**
* html 网页发送
* 该方法为同步方法
**/
public void sendEmailAsSysExceptionHtml(final EmailModel emailModel) {
MimeMessage mimeMessage = javaMailSenderImpl.createMimeMessage();
MimeMessageHelper mimeMessageHelper;
try {
mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setFrom(posterAdress);
mimeMessageHelper.setTo(emailModel.getRecieverEmailAddress());
mimeMessageHelper.setText("<!DOCTYPE html>\n" +
"<html>\n" +
"\t<head>\n" +
"\t\t<meta charset=\"UTF-8\">\n" +
"\t\t<title></title>\n" +
"\t</head>\n" +
"\t<style>\n" +
"\t\tbody,\n" +
"\t\ttable,\n" +
"\t\ttbody,\n" +
"\t\ttr {\n" +
"\t\t\tbackground-color: aquamarine;\n" +
"\t\t\tbackground-size: 100%;\n" +
"\t\t}\n" +
"\t</style>\n" +
"\n" +
"\t<body>\n" +
"\t\t<table border=\"solid 2 px\" align=\"center\" style=\"text-align: center;\">\n" +
"\t\t\t<tbody>\n" +
"\t\t\t\t<tr>\n" +
"\t\t\t\t\t<td width=\"200px\" bgcolor=\"coral\">时间</td>\n" +
"\t\t\t\t\t<td width=\"80%\" bgcolor=\"azure\">" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "</td>\n" +
"\t\t\t\t</tr>\n" +
"\t\t\t\t<tr>\n" +
"\t\t\t\t\t<td width=\"200px\" bgcolor=\"coral\">信息</td>\n" +
"\t\t\t\t\t<td width=\"80%\" bgcolor=\"azure\">" + "测试" + "</td>\n" +
"\t\t\t\t</tr>\n" +
"\t\t\t\t<tr>\n" +
"\t\t\t\t\t<td width=\"200px\" bgcolor=\"coral\">堆栈</td>\n" +
"\t\t\t\t\t<td width=\"80%\" bgcolor=\"azure\" style=\"text-align: left;\">" + emailModel.getEmailContent() + "</td>\n" +
"\t\t\t\t</tr>\n" +
"\t\t\t</tbody>\n" +
"\t\t</table>\n" +
"\t</body>\n" +
"\n" +
"</html>"
, true); this.javaMailSender.send(mimeMessage);
logger.info("邮箱已返送至[{}]邮箱!", emailModel.getRecieverName()); } catch (MessagingException e) {
e.printStackTrace();
} catch (MailException e) {
logger.error("邮箱异常:{}", e);
}
} }
notice3.1:可自行设置文本发送api、html发送api、图片发送api等。我的工具包中只写了文本发送和html发送两种格式的api。
4:注册EmailUtils的bean
package com.dev.config;
import com.dev.utils.email.MailSendUtils;
/**
* Created by zgq7 on 2019/6/6.
* 注册一些bean进入ioc
*
*/
@Configuration
public class BeanRegistryCenterConfig {
/**
* 邮箱工具类 bean 注册
**/
@Bean
public MailSendUtils mailSendUtils() {
return new MailSendUtils();
} }
5:Application.properties配置
spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=你的qq@qq.com
spring.mail.password=xxxxx
spring.mail.protocol=smtp
spring.mail.default-encoding=UTF-8
notice1:spring.mail.usernam,是你的qq邮箱地址
notice2:spring.mail.password,不要用真正的qq邮箱密码,而是qq邮箱第三方服务授权码
下面是获取qq邮箱第三方服务授权码的操步骤:
5.1:登录qq邮箱,进入首页,点击设置按钮

5.2:点击账户设置

并拉到最下面点击我圈中的开启按钮

然后会弹出一个小框提示你发信息,发就行了,发送之后点击验证会收到授权码


除了spring.mail.username、spring.mail.password 两项要换成自己的 ,其他的和我一样就行;
6:邮件发送测试
6.1:文本发送测试
/**
* Java Mail 文本发送
**/
@Test
public void EmaiTest() {
EmailModel emailModel = new EmailModel();
emailModel.setEmailTheme("测试");
emailModel.setRecieverName("测试");
emailModel.setEmailContent("测试");
emailModel.setRecieverEmailAddress("xxx@qq.com"); mailSendUtils.sendEmailAsText(emailModel);
}
发送成功后:

目标邮箱收到的邮件:

6.2:html发送测试
/**
* Java Mail 网页发送
**/
@Test
public void EmailTest2() throws MessagingException, InterruptedException {
EmailModel emailModel = new EmailModel();
emailModel.setEmailTheme("测试");
emailModel.setRecieverName("测试");
emailModel.setEmailContent("测试");
emailModel.setRecieverEmailAddress("xxx@qq.com"); mailSendUtils.sendEmailAsSysExceptionHtml(emailModel); }
目标邮箱收到的邮件:

这个展示效果可以自己设置。
7:注意点
发送邮件者的邮箱地址为qq邮箱,否则会QQ邮箱认证报错。而接收者邮箱可以为其他的邮箱,如企业邮箱、网易邮箱等。

SpringBoot2.x整合JavaMail以qq邮箱发送邮件的更多相关文章
- 基于java mail实现简单的QQ邮箱发送邮件
刚学习到java邮件相关的知识,先写下这篇博客,方便以后翻阅学习. -----------------------------第一步 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 S ...
- 杂项之使用qq邮箱发送邮件
杂项之使用qq邮箱发送邮件 本节内容 特殊设置 测试代码 1. 特殊设置 之前QQ邮箱直接可以通过smtp协议发送邮件,不需要进行一些特殊的设置,但是最近使用QQ邮箱测试的时候发现以前使用的办法无法奏 ...
- ecshop QQ邮箱发送邮件服务器配置
ecshop QQ邮箱发送邮件服务器配置 1.邮件服务:采用其他的SMTP服务 2.邮件服务器是否要求加密连接(SSL): 是 此项设置需要php支持openSSL模块 开启方法: a.php.ini ...
- SpringBoot使用qq邮箱发送邮件
最近公司要做一个邮箱注册和重置密码的功能,因为之前就做过,但是不是Springboot项目,所以相对来说还是比较容易的,在这里记录一下. 一.引用Maven依赖 这里使用spring自带的邮件jar包 ...
- python qq邮箱发送邮件
使用qq发送邮件 # coding=utf8 """ qq邮箱发送邮件 """ import sys reload(sys) sys.set ...
- python3通过qq邮箱发送邮件
python3通过qq邮箱发送邮件 0.了解qq邮箱的SMTP QQ邮箱 POP3 和 SMTP 服务器地址设置如下: 邮箱 POP3服务器(端口995) SMTP服务器(端口465或587) qq. ...
- 使用 QQ 邮箱发送邮件报错:java.net.SocketTimeoutException: Read timed out. Failed messages: javax.mail.MessagingException: Exception reading response
使用 QQ 邮箱发送邮件报错:java.net.SocketTimeoutException: Read timed out. Failed messages: javax.mail.Messagin ...
- legend3---lavarel中使用qq邮箱发送邮件
legend3---lavarel中使用qq邮箱发送邮件 一.总结 一句话总结: 第一步:配置邮箱做服务器,比如qq邮箱,网易163邮箱 第二步:配置lavarel的配置文件 第三部:写邮件发送代码就 ...
- 用JavaMail通过QQ邮箱来发送邮件(第一篇博客,备忘)
1.先启用QQ邮箱里POP3/STMP服务:生成授权码 2.导入mail.jar包(不要用太古董的技术,你懂得) 3.注意要在代码里加上开启SSL加密的代码 4.直接上代码 import java.u ...
随机推荐
- 秒啊,速来get这9个jupyter实用技巧
1 简介 jupyter notebook与jupyter lab作为广受欢迎的ide,尤其适合开展数据分析相关工作,而掌握它们相关的一些实用技巧,势必会大大提升日常工作效率.而今天我就来给大家介绍9 ...
- Luogu P2408 不同子串个数【SAM】
P2408 不同子串个数 计算一个字符串的不同子串个数 两种方法,一种是\(dp\)出来\(SAM\)从起点开始的路径数量 另一种方法就是计算每个点的\(len[i]-len[link[i]]\)这个 ...
- POJ2774 Long Long Message 【SAM】
POJ2774 Long Long Message 找两个串的最长公共字串 对其中一个串\(s\)建\(SAM\),然后我们如何找到最长公共字串,办法就是枚举\(t\)串所有的前缀,然后找各个前缀的最 ...
- 【poj 2115】C Looooops(数论--拓展欧几里德 求解同余方程 模版题)
题意:有一个在k位无符号整数下的模型:for (variable = A; variable != B; variable += C) statement; 问循环的次数,若"永不停息&q ...
- NCD 2019 H. Mr. Hamra and his quantum particles
题意:给你n个数,有m次操作,每次使得两个数相连接,询问q次,问某两个数是否连接在一起. 题解:这其实是一道并查集的裸题,这里就不再多说了,写个路径压缩的find函数即可. 代码: #include ...
- Codeforces Round #654 (Div. 2) D. Grid-00100 (构造)
题意:构造一个\(n\)x\(n\)只含\(0\)和\(k\)个\(1\)的矩阵,统计每一行每一列\(1\)的sum,然后构造一个权值最大行和最小行的差的平方加权值最大列和最小列的差的平方的最小和(\ ...
- Springboot 过滤器和拦截器详解及使用场景
一.过滤器和拦截器的区别 1.过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的.请求结束返回也是,是在servlet处理完后,返回给前端之前. 2.拦截 ...
- Leetcode(27)-移除元素
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...
- C++ STL (基础)
STL是什么(STL简介) 本节主要讲述 STL 历史.STL 组件.STL 基本结构以及 STL 编程概述.STL 历史可以追溯到 1972 年 C 语言在 UNIX 计算机上的首次使用.直到 19 ...
- P1337 [JSOI2004]平衡点(模拟退火)题解
题意: 如图:有n个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.图中X处就是公共的绳结.假设绳子是完全弹性的(不会造成能量损失),桌子足够高(因而重物不会垂到地 ...