Spring Boot笔记(二) springboot 集成 SMTP 发送邮件
个人博客网:https://wushaopei.github.io/ (你想要这里多有)
笔记:乘着项目迭代的间隙,把一些可复用的功能从项目中抽取出来,这是其中之一,
一、添加SMTP 及 MAIL 的 pom.xml 依赖
<!--郵箱發送-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
注意: 依赖添加后会要求刷新 springBootConguration 的配置信息,可执行也可不理睬
具体操作如下:

二、配置yml邮箱参数
1、在 application-dev.yml中配置对应的邮箱参数
#邮件配置
email:
host: smtp.163.com
username: 1598974689@163.com
password: 1598974689wsp
senderName: 1598974689@163.com
#发送提醒邮件的接收方
sendToMail: 1862030785@foxmail.com
sendToPeopleName: wen
2、由于是使用SMTP实现邮箱发送,除了提供必要的邮箱、密码等参数外,还要开启邮箱账号的 SMTP 设置,


打勾选中要设置的服务项,通过校验短信息设置授权码,使用授权码代替 邮箱密码 实现邮件的发送,流程很简单的。
三、相关工具类和 实体类的创建
1、邮箱 参数 config

package com.example.poiutis.model.common;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
/**
* @ClassName EmailConfig
* @Description TODO
* @Author wushaopei
* @Date 2019/7/25 10:24
* @Version 1.0
*/
@Configuration
@ConfigurationProperties(prefix = "email", ignoreUnknownFields = false)
//@PropertySource("classpath:/application.yml")
public class EmailConfig {
private String host;
private String username;
private String password;
private String senderName;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSenderName() {
return senderName;
}
public void setSenderName(String senderName) {
this.senderName = senderName;
}
@Override
public String toString() {
return "EmailConfig{" +
"host='" + host + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
", senderName='" + senderName + '\'' +
'}';
}
}
2、 Email 发送实现工具类

package com.example.poiutis.utils.Email;
import com.example.poiutis.model.common.EmailConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
/**
* @ClassName MailSenderFacade
* @Description TODO
* @Author wushaopei
* @Date 2019/7/25 10:22
* @Version 1.0
*/
@Component
public class MailSenderFacade {
@Autowired
private EmailConfig emailConfig;
private final Logger logger = LoggerFactory.getLogger(MailSenderFacade.class);
public void sendMailHtml(final String toEmail,final String subject,final String text){
try{
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setUsername(emailConfig.getUsername());
javaMailSender.setPassword(emailConfig.getPassword());
javaMailSender.setHost(emailConfig.getHost());
javaMailSender.setPort(25);
javaMailSender.setProtocol("smtp");
javaMailSender.setDefaultEncoding("UTF-8");
Properties mailProperties = new Properties();
mailProperties.put("mail.smtp.auth", true);
mailProperties.put("mail.smtp.starttls.enable", true);
javaMailSender.setJavaMailProperties(mailProperties);
MimeMessage mimeMessage = getMimeMessage(toEmail,subject,text, javaMailSender);
javaMailSender.send(mimeMessage);
logger.info("发往 "+toEmail+" 邮件发送成功");
} catch (MessagingException e) {
logger.error("发往 "+toEmail+" 邮件发送异常", e);
}
}
private MimeMessage getMimeMessage(String toEmail,String subject,String text, JavaMailSenderImpl javaMailSender) throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
mimeMessageHelper.setFrom(emailConfig.getSenderName());
mimeMessageHelper.setTo(toEmail);
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(text, true);
return mimeMessage;
}
}
四、测试SMTP功能发送一个邮件试试
@RequestMapping(value = "/please/emailTest", method = RequestMethod.GET)
public Object getEmailTest() {
Map<String,Object> map = null;
try{
map = new HashMap<>();
mailSenderFacade.sendMailHtml("18620307785@163.com", "来自邮箱测试接口邮件", "来自邮箱测试接口邮件");
map.put("state","0");
map.put("message", "导出成功");
}catch (Exception e){
map.put("state","1");
map.put("message", "导出失敗");
e.printStackTrace();
}
return map;
}
发送成功:

收到的邮件:

Spring Boot笔记(二) springboot 集成 SMTP 发送邮件的更多相关文章
- Spring Boot笔记(三) springboot 集成 Quartz 定时任务
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1. 在 pom.xml 中 添加 Quartz 所需要 的 依赖 <!--定时器 quartz- ...
- Spring Boot笔记(一) springboot 集成 swagger-ui
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.添加依赖 <!--SpringBoot整合Swagger-ui--> <depen ...
- Spring Boot笔记(六) springboot 集成 timer 定时任务
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.创建具体要执行的任务类: package com.example.poiutis.timer; im ...
- Spring Boot笔记(五) SpringBoot 集成Lombok 插件
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 为了减少代码量,为当前项目添加 lombok 来优雅编码 Lombok 插件安装: a . 添加依赖: ...
- Spring Boot (二)集成Jsp与生产环境部署
一.简介 提起Java不得不说的一个开发场景就是Web开发,也是Java最热门的开发场景之一,说到Web开发绕不开的一个技术就是JSP,因为目前市面上仍有很多的公司在使用JSP,所以本文就来介绍一下S ...
- Spring Boot笔记二:快速创建以及yml文件自动注入
上个笔记写了如何自己去创建Spring boot,以及如何去打jar包,其实,还是有些麻烦的,我们还自己新建了几个文件夹不是. Idea可以让我们快速的去创建Spring boot应用,来看 一.快速 ...
- Spring Boot实战二:集成Mybatis
Spring Boot集成Mybatis非常简单,在之前搭建好的项目中加入Mybatis依赖的jar,在配置文件中加入数据库配置即可,如下图所示: 创建对应的Controller.Service.Da ...
- Spring Boot(十二):spring boot如何测试打包部署
Spring Boot(十二):spring boot如何测试打包部署 一.开发阶段 1,单元测试 在开发阶段的时候最重要的是单元测试了,springboot对单元测试的支持已经很完善了. (1)在p ...
- spring boot / cloud (二) 规范响应格式以及统一异常处理
spring boot / cloud (二) 规范响应格式以及统一异常处理 前言 为什么规范响应格式? 我认为,采用预先约定好的数据格式,将返回数据(无论是正常的还是异常的)规范起来,有助于提高团队 ...
随机推荐
- Spring杂谈 | Spring中的AutowireCandidateResolver
接口定义 用于推断一个特定的beanDefinition是否能作为指定依赖的候选者的策略接口 public interface AutowireCandidateResolver { // 默认情况下 ...
- Day_09【常用API】扩展案例8_计算字符'j'和字符串'java'在字符串中出现的次数
需求说明 定义如下字符串: String str = "javajfiewjavajfiowfjavagkljjava"; 请分别定义方法统计出: 1.字符串中:字符j的数量 2. ...
- Vue.js-Vue的初体验
我是参考https://www.cnblogs.com/kidney/p/6052935.html 这位大神的 最开始接触vue的时候,是他的input框输入的文字和旁边的span展示的文字同步,当时 ...
- Mysql 常用函数(9)- reverse 函数
Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html reverse 的作用 将字符串反转,即顺序取反 ...
- lodash入门
简介 Lodash是一个著名的javascript原生库,不需要引入其他第三方依赖.是一个意在提高开发者效率,提高JS原生方法性能的JS库.简单的说就是,很多方法lodash已经帮你写好了,直接调用就 ...
- Python-控制台实现简单的名片管理系统
通过Python开发一个基于控制台的名片管理系统,具体看下图以及相关代码. cards_main.py文件中提供程序的入口 import cards_toolslx while True: # TOD ...
- spark机器学习从0到1特征选择-卡方选择器(十五)
一.公式 卡方检验的基本公式,也就是χ2的计算公式,即观察值和理论值之间的偏差 卡方检验公式 其中:A 为观察值,E为理论值,k为观察值的个数,最后一个式子实际上就是具体计算的方法了 n 为总 ...
- git :error: bad signature fatal: index file corrupt
删除.git/index文件再执行: git reset 不行的话就执行: git read-tree --empty https://stackoverflow.com/questions/213 ...
- Java Thread中,run方法和start方法的区别
两种方法的区别: 1.start方法 用 start方法来启动线程,是真正实现了多线程, 通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦 ...
- Holy Grail Bellman-Ford/spfa
Holy Grail Bellman-Ford #include <bits/stdc++.h> using namespace std; , maxm = ; const int inf ...