本文参考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邮箱发送邮件的更多相关文章

  1. 基于java mail实现简单的QQ邮箱发送邮件

    刚学习到java邮件相关的知识,先写下这篇博客,方便以后翻阅学习. -----------------------------第一步 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 S ...

  2. 杂项之使用qq邮箱发送邮件

    杂项之使用qq邮箱发送邮件 本节内容 特殊设置 测试代码 1. 特殊设置 之前QQ邮箱直接可以通过smtp协议发送邮件,不需要进行一些特殊的设置,但是最近使用QQ邮箱测试的时候发现以前使用的办法无法奏 ...

  3. ecshop QQ邮箱发送邮件服务器配置

    ecshop QQ邮箱发送邮件服务器配置 1.邮件服务:采用其他的SMTP服务 2.邮件服务器是否要求加密连接(SSL): 是 此项设置需要php支持openSSL模块 开启方法: a.php.ini ...

  4. SpringBoot使用qq邮箱发送邮件

    最近公司要做一个邮箱注册和重置密码的功能,因为之前就做过,但是不是Springboot项目,所以相对来说还是比较容易的,在这里记录一下. 一.引用Maven依赖 这里使用spring自带的邮件jar包 ...

  5. python qq邮箱发送邮件

    使用qq发送邮件 # coding=utf8 """ qq邮箱发送邮件 """ import sys reload(sys) sys.set ...

  6. python3通过qq邮箱发送邮件

    python3通过qq邮箱发送邮件 0.了解qq邮箱的SMTP QQ邮箱 POP3 和 SMTP 服务器地址设置如下: 邮箱 POP3服务器(端口995) SMTP服务器(端口465或587) qq. ...

  7. 使用 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 ...

  8. legend3---lavarel中使用qq邮箱发送邮件

    legend3---lavarel中使用qq邮箱发送邮件 一.总结 一句话总结: 第一步:配置邮箱做服务器,比如qq邮箱,网易163邮箱 第二步:配置lavarel的配置文件 第三部:写邮件发送代码就 ...

  9. 用JavaMail通过QQ邮箱来发送邮件(第一篇博客,备忘)

    1.先启用QQ邮箱里POP3/STMP服务:生成授权码 2.导入mail.jar包(不要用太古董的技术,你懂得) 3.注意要在代码里加上开启SSL加密的代码 4.直接上代码 import java.u ...

随机推荐

  1. MB与Mb

    MB/s的含义是兆字节每秒,Mbit/s的含义是兆比特每秒,前者是指每秒传输的字节数量,后者是指每秒传输的比特位数.即B=Byte,b=bit,1Byte=8bit.下载时用的是B,交换机上用的是b, ...

  2. 2019 第十届蓝桥杯大赛软件类省赛 Java A组 题解

    2019 第十届蓝桥杯大赛软件类省赛 Java A组 试题A 题解 ​ 题目最后一句贴心的提示选手应该使用 long (C/C++ 应该使用 long long). ​ 本题思路很直白,两重循环.外层 ...

  3. B 明码

    B 明码 :汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛. 16点阵的字库把每个汉字看成是16x16个像素信息.并把这些信息记录在字节中. 一个字节可以存储8位信息,用32个字节就 ...

  4. HDOJ 3398

    这个题坑了太久太久啊!!!!!贡献了得有30+WA才发现 原来是因为在乘法中有溢出导致一直TLE啊.... 但是到最后也不知道有个问题怎么解决的. 就是在getp()中的num值的诡异的改变! #in ...

  5. poj1066 线段相交简单应用(解题报告)

    #include<stdio.h> #include<math.h> const double eps=1e-8; int n; struct Point { double x ...

  6. Codeforces Round #582 (Div. 3) C. Book Reading

    传送门 题意: 给你n,k.表示在[1,n]这个区间内,在这个区间内找出来所有x满足x%k==0,然后让所有x的个位加到一起(即x%10),输出. 例如:输入10 2 那么满足要求的数是2 4 6 8 ...

  7. L3-007 天梯地图 (30分) 最短路+dp

    最短路+dp思路:nuoyanli 520 Let's play computer game 输入样例1: 10 15 0 1 0 1 1 8 0 0 1 1 4 8 1 1 1 5 4 0 2 3 ...

  8. Revit二次开发环境配置(Revit 2020 +Visual Studio 2019)

    Revit二次开发环境搭建(Revit 2019+Visual Studio 2017)准备内容 Revit 2019开发环境的搭建,需要安装的内容如下: Revit 2019(主要的开发环境) Vi ...

  9. Linunx系统引导过程及MBR/GRUB故障

    Linunx系统引导过程 系统初始化进程 init进程 Systemd Systemd单元类型 允许级别所对应的systemd目标 修复MBR扇区故障 解决思路 操作 修复GRUB引导故障 解决思路 ...

  10. 包机制和javadoc

    包机制 一般用公司域名倒置作为包名: eg com.baidu.www 可以在src里自己鼠标右键建立包,包内可以存放代码, 包的路径必须在最上面, eg:package com.kuang; (自动 ...