最近公司要做一个邮箱注册和重置密码的功能,因为之前就做过,但是不是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邮箱发送邮件的更多相关文章

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

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

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

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

  3. python qq邮箱发送邮件

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

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

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

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

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

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

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

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

  8. QQ邮箱发送邮件,出现mail from address must be same as authorization user错误

    之前做的一个系统,有个发送邮件的功能,一直能正常使用,今天同事说QQ邮箱发送不了. 立马着手调试,发现服务器一直出现“mail from address must be same as authori ...

  9. MVC模式下向qq邮箱发送邮件

    将已经保存在数据库中的密码通过邮件发送到qq邮箱中.用的ssm框架,其中的config文件要先配置好. 用到的jar包有gson-2.2.1.jar,gson.jar,mail.jar,activat ...

随机推荐

  1. 产品经理之PRD详解

    文章大纲 一.PRD基础二.PRD要素讲解三.相关模板下载四.参考文章   一.PRD基础 1. PRD简介    PRD中文意思为:产品需求文档.PRD的主要使用对象有:开发.测试.项目经理.交互设 ...

  2. Git:三、工作原理

    首先,我们对工作区也就是文件夹中的文档进行修改. 然后,把修改并需要存档的文档用add命令放到暂存区,并且可以放很多文档. 最后,一个阶段的工作告一段落,使用commit命令把暂存区的内容一股脑存到G ...

  3. SQL Server排名或排序的函数

    SQL Server获得排名或排序的函数有如下几种: 1.Rank():在结果集中每一条记录所在的排名位置,但排名可能不连续,例如:若同一组内有两个第一名,则该组内下一个名次直接跳至第三名   sel ...

  4. 数据库艰难求生之路(基础:增删改查)part2

    一.数据库查询 由于这个点的东西实在是多的,我就和题目,知识点一起演示. 首先是创建数据库: create database ExampleInfo --创建数据库 use ExampleInfo - ...

  5. 第六周LINUX学习笔记

    DNS服务 DNS:Domain Name Service //协议     实现:BIND(Berkeley Internet Name Domain)     监听端口:        UDP:5 ...

  6. 一文搞懂RAM、ROM、SDRAM、DRAM、DDR、flash等存储介质

    一文搞懂RAM.ROM.SDRAM.DRAM.DDR.flash等存储介质 存储介质基本分类:ROM和RAM RAM:随机访问存储器(Random Access Memory),易失性.是与CPU直接 ...

  7. 为什么MIP-Cache存在

    在去年十月的一篇 博客文章 提到 MIP 加速器是由 MIP-HTML, MIP-JS 和 MIP-Cache 三个模块共同产生加速效果的.MIP-HTML 和 MIP-JS 都是开源的,在 GitH ...

  8. ASP.NET Aries 高级开发教程:Excel导入之多表高级导入配置(中)

    前言: 在面对Excel的各种复杂导入情况中,多表导入是很常见的情景. 今天就来写一下多表导入是如何配置的. 1.自定义导入模板 怎么自定义: 其实就是自己新建一个Excel了,把列头都写好. 不过有 ...

  9. 超好用的C#控制台应用模板

    本文是Wei的公众号投稿文章: 默认模板之缺 在工作学习中,我们经常需要创建一些简单的控制台应用(Console App)去验证某个想法,或者作为小工具交付给其他同事. 通常我们的选择是 Visual ...

  10. zabbix安装及简单使用备注

    1.安装mysql yum install -y mariadb mariadb-server systemctl start mariadb 2.安装apache yum -y install ht ...