springboot发送邮件
场景需求:
客户修改邮箱,给修改的邮箱发送验证码。
通过查找,所需知识:
使用JavaMail是sun提供给开发人员的一款邮件发送和就接收的一款开源类库,支持常用的邮件协议,如:SMTP,POP3,IMAP,开发人员使用JavaMail编写邮件程序时,不需考虑底层通讯细节。
JavaMail可以发送各种复杂MIME格式的邮件内容,注意JavaMail仅支持JDK4及以上版本。虽然JavaMail是JDK的API但它并没有直接加入JDK中,所以我们需要另外添加依赖,
一。基础术语:
1.电子邮箱
- 电子邮箱(E-mail 地址)需要在邮件服务器上申请,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个账户。
- 用户在邮件服务器上申请了一个账户后,邮件服务器就会为这个账户分配一定的空间,用户从而可以使用这个账户以及空间发送电子邮件和保存别人发送过来的电子邮件
2.邮箱服务器
- 要在 Internet 上提供电子邮件功能,必须有专门的电子邮件服务器,例如现在网络上有很多提供邮件服务的厂商:新浪、搜狐、网易等等他们都有自己的邮件服务器
- 这些服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中
3.SMTP协议
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式
SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地
SMTP 服务器则是遵循 SMTP 协议的发送邮件服务器,用来发送或中转发出的电子邮件
通常把处理用户 SMTP 请求(邮件发送请求)的邮件服务器称之为 SMTP 服务器
4.POP3协议
POP3,全名为 “Post Office Protocol - Version 3”,即“邮局协议版本3”
本协议主要用于支持使用客户端远程管理在服务器上的电子邮件
POP 协议支持“离线”邮件处理,其具体过程是:邮件发送到服务器上,电子邮件客户端调用客户程序以连接服务器,并下载所有来阅读的电子邮件,这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人终端机器上,一般是 PC 机或 MAC。一旦邮件发送到 PC 机或 MAC 上。邮件服务器上的邮件将会被删除,但目前的 POP 邮件服务器大都可以“只下载邮件,服务器并不删除”,也就是改进的 POP3 协议
同样,用户若想从邮件服务器管理的电子邮箱中接收一封电子邮件的话,他连上邮件服务器后,也需要遵循一定的通讯格式,POP3 协议用于定义这种通讯格式
因而,通常我们也把处理用户 POP3 请求(邮件接收请求)的邮件服务器称之为 POP3 服务器
二。发送邮件代码
1.引入依赖Javax.mail类
<!--邮件发送功能依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>ss
</dependency>
2.添加邮箱配置
3.发送邮件
package com.haidaipuhui.service.common;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
/**
* @author wangdeqiu
* @date 2019年1月14日 上午10:13:14
* 类说明:短信发送验证
*/
@Service
public class EmailService {
@Value("${publicvariable.mailHost}")
private String mailHost;
@Value("${publicvariable.mailUsername}")
private String mailUsername;
@Value("${publicvariable.mailPassword}")
private String mailPassword;
private static Logger logger = LoggerFactory.getLogger(EmailService.class);
/**
*
* Desc:邮箱发送验证码
* @author wangdeqiu
* @date 2019年1月14日 上午10:55:07
* @param to:要发送的邮箱 code:验证码
* @return
*/
public void sendMail(String to,String code) throws AddressException, MessagingException {
// 1.创建连接对象,连接到邮箱服务器
Properties props = new Properties();
props.setProperty("mail.smtp.host", mailHost);// 设置邮件服务器 这里使用 163 邮箱
props.setProperty("mail.smtp.auth", "true");// 打开认证
Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(mailUsername,mailPassword);
}
});
// 2.创建邮件对象
Message message = new MimeMessage(session);
// 2.1设置发件人
message.setFrom(new InternetAddress(mailUsername));
// 2.2设置接收人
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// 2.3设置邮件主题
message.setSubject("【普惠财富】修改邮箱验证码");
// 2.4设置邮件内容
String content = "<html><head></head><body><h4>尊敬的用户:</h4></br>"
+"<p>您正在修改个人邮箱,验证码为【"
+ code + "】,有效期为1分钟,请勿泄露给他人</p></body></html>";
// String content = "尊敬的用户:您正在修改个人邮箱,验证码为【"+code+"】,有效期为1分钟,请勿泄露给他人";
message.setContent(content, "text/html;charset=UTF-8");
// 3.发送邮件
Transport.send(message);
logger.info("-----------邮箱发送验证码成功--验证码为"+code);
}
// public static void main(String[] args) throws AddressException, MessagingException {
// String to = "[email protected]";
// String code = "123456";
// sendMail(to,code);
//
// }
}
参考链接
https://blog.****.net/qq_22685831/article/details/79890058
https://www.jianshu.com/p/0991f0841b0a
https://blog.****.net/zhangxiaomin1992/article/details/80420374