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 ...
随机推荐
- Maven三种打包方式jar war pom
1.pom工程 用在父级工程或聚合工程中.用来做jar包的版本控制.必须指明这个聚合工程的打包方式为pom 2.war工程 将会打包成war,发布在服务器上的工程.如网站或服务.在SpringBoot ...
- Codeforces Round #656 (Div. 3) C. Make It Good
题目链接:https://codeforces.com/contest/1385/problem/C 题意 去除一个数组的最短前缀使得余下的数组每次从首或尾部取元素可以排为非减序. 题解一 当两个大数 ...
- 牛客小白月赛30 B.最好的宝石 (线段树)
题意:RT. 题解:很明显的线段树维护区间最大值操作,但是我们同时还要维护最大值的个数,我们在build或者modify操作完子树然后push_up的时候,我们先从两个儿子取max更新父节点的最大值, ...
- hdu3033 I love sneakers!
Problem Description After months of hard working, Iserlohn finally wins awesome amount of scholarshi ...
- JavaScript函数console、this关键字
console.dir()打印出来的东西不加任何操作 console.log()打印出来东西实现进行了操作,打印出来的东西可能不是原型 具体对象的类型可以在"_proto_"中看, ...
- 数学知识-欧拉函数&快速幂
欧拉函数 定义 对于正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目,记作φ(n). 算法思路 既然求解每个数的欧拉函数,都需要知道他的质因子,而不需要个数 因此,我们只需求出他的质因子, ...
- QXDM和QCAT软件使用指南
一.传送门 链接:https://pan.baidu.com/s/1i55YXnf 密码:v6nw 二.QXDM,QPST和QCAT的简单说明 QXDM,QPST和QCAT是Qualcomm高通公司针 ...
- codeforces 858A
A. k-rounding time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- 洛谷p2216 多次单调队列,扫描矩阵中的最大值减去最小值最的固定大小子矩阵
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int ...
- 微服务架构Day04-SpringBoot之web开发
引入项目 把html页面放在模板引擎文件夹templates下,这样能使用模板引擎的功能. 登录页面国际化 国际化:编写国际化配置文件 1.编写国际化配置文件,抽取页面需要显示的国际化消息 2.Spr ...