SpringBoot使用qq邮箱发送邮件
最近公司要做一个邮箱注册和重置密码的功能,因为之前就做过,但是不是Springboot项目,所以相对来说还是比较容易的,在这里记录一下。
一、引用Maven依赖 这里使用spring自带的邮件jar包
<!-- 邮件服务 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
二、yml配置
#邮箱配置
spring:
mail:
host: smtp.exmail.qq.com
port: 465
protocol: smtp
username: ******** //你的邮箱账号
password: ******** //你的登陆密码
default-encoding: UTF-8
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
三、创建EmailImpl类作为email组件
@Component
public class EmailImpl { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Resource
private RedisUtil redisUtil; @Value("${spring.mail.username}")
public String from;
@Value("${spring.mail.password}")
public String password;// 登录密码
@Value("${spring.mail.protocol}")
public String protocol;// 协议
@Value("${spring.mail.port}")
public String port;// 端口
@Value("${spring.mail.host}")
public String host;// 服务器地址 private String theme = "注册验证码"; private String reset = "重置验证码"; //初始化参数
public Session initProperties() {
Properties properties = new Properties();
properties.setProperty("mail.transport.protocol", protocol);
properties.setProperty("mail.smtp.host", host);
properties.setProperty("mail.smtp.port", port);
// 使用smtp身份验证
properties.put("mail.smtp.auth", "true");
// 使用SSL,企业邮箱必需 start
// 开启安全协议
MailSSLSocketFactory mailSSLSocketFactory = null;
try {
mailSSLSocketFactory = new MailSSLSocketFactory();
mailSSLSocketFactory.setTrustAllHosts(true);
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
properties.put("mail.smtp.enable", "true");
properties.put("mail.smtp.ssl.socketFactory", mailSSLSocketFactory);
properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.put("mail.smtp.socketFactory.fallback", "false");
properties.put("mail.smtp.socketFactory.port", port);
Session session = Session.getDefaultInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(from, password);
}
});
// 使用SSL,企业邮箱必需 end
// TODO 显示debug信息 正式环境注释掉
session.setDebug(true);
return session;
} /**
* 发送注册邮箱验证码
* @param sender
* @return
*/
public Boolean sendHtmlEmail(String sender) {
boolean lean = false;
try {
Session session = initProperties();
MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.setFrom(new InternetAddress(from,"Tesra"));// 发件人,可以设置发件人的别名
// 收件人,多人接收
InternetAddress[] internetAddressTo = new InternetAddress().parse(sender);
mimeMessage.setRecipients(Message.RecipientType.TO, internetAddressTo);
// 主题
mimeMessage.setSubject(theme);
// 时间
mimeMessage.setSentDate(new Date());
// 容器类 附件
MimeMultipart mimeMultipart = new MimeMultipart();
// 可以包装文本,图片,附件
MimeBodyPart bodyPart = new MimeBodyPart();
String code = CodeUtils.getMathVal();
// 设置内容 getEmailHtml是邮箱内容模板
bodyPart.setContent(getEmailHtml(sender,code), "text/html; charset=UTF-8");
mimeMultipart.addBodyPart(bodyPart);
// 添加图片&附件
// bodyPart = new MimeBodyPart();
// bodyPart.attachFile(fileSrc);
// mimeMultipart.addBodyPart(bodyPart);
mimeMessage.setContent(mimeMultipart);
mimeMessage.saveChanges();
Transport.send(mimeMessage);
redisUtil.set(sender,code, UserConstant.time);
lean = true;
} catch (MessagingException e) {
e.printStackTrace();
lean = false;
logger.error("发送注册邮件失败:"+sender+" ----"+e.getMessage());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
lean = false;
logger.error("发送注册邮件失败:"+sender+" ----"+e.getMessage());
}
return lean;
} /**
* 发送重置邮箱验证码
* @param sender
* @return
*/
public Boolean sendHtmlEmailCZ(String sender) {
Boolean lean = false;
try {
Session session = initProperties();
MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.setFrom(new InternetAddress(from,"Tesra"));// 发件人,可以设置发件人的别名
// 收件人,多人接收
InternetAddress[] internetAddressTo = new InternetAddress().parse(sender);
mimeMessage.setRecipients(Message.RecipientType.TO, internetAddressTo);
// 主题
mimeMessage.setSubject(reset);
// 时间
mimeMessage.setSentDate(new Date());
// 容器类 附件
MimeMultipart mimeMultipart = new MimeMultipart();
// 可以包装文本,图片,附件
MimeBodyPart bodyPart = new MimeBodyPart();
String code = CodeUtils.getMathVal();
// 设置内容 getEmailReset是发送邮箱的html模板
bodyPart.setContent(getEmailReset(sender,code), "text/html; charset=UTF-8");
mimeMultipart.addBodyPart(bodyPart);
// 添加图片&附件
// bodyPart = new MimeBodyPart();
// bodyPart.attachFile(fileSrc);
// mimeMultipart.addBodyPart(bodyPart);
mimeMessage.setContent(mimeMultipart);
mimeMessage.saveChanges();
Transport.send(mimeMessage);
redisUtil.set(sender,code, UserConstant.time);
lean = true;
} catch (MessagingException e) {
e.printStackTrace();
lean = false;
logger.error("发送重置邮件失败:"+sender+" ----"+e.getMessage());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
lean = false;
logger.error("发送重置邮件失败:"+sender+" ----"+e.getMessage());
}
return lean;
}
}
四、邮箱html模板
/**
* 注册邮箱模板
* @param to 邮箱号
* @param code 验证码
* @return
*/
public String getEmailHtml(String to,String code){
String[] tos = to.split("@");
String sub = tos[0].substring(0,2);
String email = sub+"*******@"+tos[1];
String html = "<div style=\"padding: 0px 0px 0px 20px;box-sizing: border-box;color: #333333;font-family: \"microsoft yahei\";font-size: 14px\">" +
"<h3 style=\"font-weight: normal;font-size: 18px;\">Test测试</h3>" +
"<h4 style=\"color:#2672EC;font-size: 40px;margin-top: 24px;font-weight: normal;\">账号注册验证码</h4>" +
"<div style=\"margin-top: 40px;\">您好,您正在使用<a href=\"javascript:;\" target=\"_blank\" style=\"color: #2672EC;text-decoration: none;\">"+email+"</a>注册账号。</div>" +
"<div style=\"margin-top: 30px;\">您的注册验证码为:<em style=\"font-style: normal;font-weight: 600;\">"+code+"</em></div>" +
"<div style=\"margin-top: 35px;\">谢谢!</div>" +
"<div style=\"margin-top: 10px;\">Test测试</div>" +
"</div>";
return html;
}
五、方法调用
@Autowired
private EmailImpl emailImpl; //email邮箱号
emailImpl.sendHtmlEmail(email);
至此就完成了SpringBoot使用qq邮箱发送邮件。
SpringBoot使用qq邮箱发送邮件的更多相关文章
- 杂项之使用qq邮箱发送邮件
杂项之使用qq邮箱发送邮件 本节内容 特殊设置 测试代码 1. 特殊设置 之前QQ邮箱直接可以通过smtp协议发送邮件,不需要进行一些特殊的设置,但是最近使用QQ邮箱测试的时候发现以前使用的办法无法奏 ...
- ecshop QQ邮箱发送邮件服务器配置
ecshop QQ邮箱发送邮件服务器配置 1.邮件服务:采用其他的SMTP服务 2.邮件服务器是否要求加密连接(SSL): 是 此项设置需要php支持openSSL模块 开启方法: a.php.ini ...
- 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. ...
- 基于java mail实现简单的QQ邮箱发送邮件
刚学习到java邮件相关的知识,先写下这篇博客,方便以后翻阅学习. -----------------------------第一步 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 S ...
- 使用 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的配置文件 第三部:写邮件发送代码就 ...
- QQ邮箱发送邮件,出现mail from address must be same as authorization user错误
之前做的一个系统,有个发送邮件的功能,一直能正常使用,今天同事说QQ邮箱发送不了. 立马着手调试,发现服务器一直出现“mail from address must be same as authori ...
- MVC模式下向qq邮箱发送邮件
将已经保存在数据库中的密码通过邮件发送到qq邮箱中.用的ssm框架,其中的config文件要先配置好. 用到的jar包有gson-2.2.1.jar,gson.jar,mail.jar,activat ...
随机推荐
- 关于linux上postgresql的一些理解
刚开始接触postgresql,安装后就有一个默认用户postgres,而且在启动postgresql后只能通过切换到linux的postgres用户才能登录数据库进行操作,和Mysql的登录认证居然 ...
- SQLServer存储过程自制数据字典
相信很多小伙伴都对[数据字典]很头疼. 小编刚入职的时候,老大丢一个项目过来,就一个设计文档,数据字典木有,字段说明木有, 全部都需要靠“联系上下文”来猜.所以小伙伴门一定要养成说明字段的习惯哦. 说 ...
- python3.6+selenium3.13 自动化测试项目实战一(增加自动发送邮件报告接口)
说明: 继实战项目一的基础上添加自动发送报告邮件接口,代码有部分调整,可以结合实战一和上篇文章学习 变动: 1.增加文本文档SendToUserinfo.txt 用来保存邮件接收者的信息 2.修改测试 ...
- Spark学习之路 (一)Spark初识
目录 一.官网介绍 1.什么是Spark 二.Spark的四大特性 1.高效性 2.易用性 3.通用性 4.兼容性 三.Spark的组成 四.应用场景 正文 回到顶部 一.官网介绍 1.什么是Spar ...
- 教程二 网页和lua交互修改openwrt
硬件 http://zhan.renren.com/h5/entry/3602888498044209332 GL-iNet 1 首先安装 webserver之lighttpd ,openwrt自带 ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之八 || API项目整体搭建 6.3 异步泛型仓储+依赖注入初探
代码已上传Github+Gitee,文末有地址 番外:在上文中,也是遇到了大家见仁见智的评论和反对,嗯~说实话,积极性稍微受到了一丢丢的打击,不过还好,还是有很多很多很多人的赞同的,所以会一直坚持下去 ...
- Identity Server 4 预备知识 -- OAuth 2.0 简介
OAuth 2.0 简介 OAuth有一些定义: OAuth 2.0是一个委托协议, 它可以让那些控制资源的人允许某个应用以代表他们来访问他们控制的资源, 注意是代表这些人, 而不是假冒或模仿这些人. ...
- GitHub 可以免费创建私人仓库啦
如果你不知道什么是 GitHub,也可以往下看,只不过可能感受不会那么深啦. 昨天,GitHub 博客发表了文章 其中比较重要的已经用蓝色线标注了. GitHub 支持开发者创建免费私人仓库,但是需要 ...
- 用VS2017进行移动开发(C#、VB.NET)——OfflineCameraButton控件,Smobiler移动开发
OfflineCameraButton控件 一. 样式一 我们要实现上图中的效果,需要如下的操作: 从工具栏上的“Smobiler Components”拖动一个OfflineCam ...
- redis的持久化方式RDB和AOF的区别
1.前言 最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据.由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能, ...