使用QQ邮箱发送内容-Java Mail -Spring Boot
假如你想使用qq邮箱发送验证码 看这篇够用
一.首先我们先登录自己的QQ邮箱获取一个授权码
什么是授权码?
如果我们希望使用腾讯、网易的邮箱服务器发送邮件就需要先注册他们的邮箱,但是如果在程序中直接使用邮箱的密码并不安全,所以各邮箱企业推出授权码机制代表密码
推荐使用腾讯邮箱的授权码(qq号一般都绑定了qq邮箱),因为刚注册的邮箱账户一般不允许直接用程序给其他用户发送邮件
1.1登录QQ邮箱
1.2点击设置
1.3 选择账户选项卡
1.4 开启POP3/SMTP服务
1.5 使用密保手机向指定号码发送配置邮件客户端
1.6 牢记授权码,否则需要重新获取
二.使用Java Mail 发送邮件
2.1 添加依赖
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.6</version> </dependency>
2.2 添加发送邮件的工具类
@Component public class MailUtil { // 1.设置发送邮件的一些参数 private static Properties pro = new Properties(); //2.发送人 private static String sender; //3.发送人账号 private static String username; //4.发送人密码 private static String password; //TODO 因为要使用静态成员变量 又要从配置文件中加载参数 使用非静态方法给静态方法赋值 @Value("${mailbox.sender}") public void setSender(String sender) { MailUtil.sender = sender; } @Value("${mailbox.username}") public void setUsername(String username) { MailUtil.username = username; } @Value("${mailbox.password}") public void setPassword(String password) { MailUtil.password = password; } public MailUtil() { } static { pro.setProperty("mail.transport.protocol", "smtp"); pro.setProperty("mail.smtp.host", "smtp.qq.com"); pro.setProperty("mail.smtp.auth", "true"); pro.setProperty("mail.smtp.port", "587"); } /** * @Description: 邮件发送 * @Param: recipients 收件人 * @Param: content 发送内容 * @Param: headline 标题 * @return: boolean 未成功 成功 * @Author: @Dog_E * @Date: 2020/7/11 0011 */ public static boolean sendSimpleMail(String recipients, String content, String headline) { boolean res = false; try { // 2.创建一个会话对象和邮件服务器交互 Session session = Session.getDefaultInstance(pro); // 3.创建一个邮件对象 MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(sender)); // 发送人 message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(recipients)); // 收件人 message.setSubject(headline);// 设置邮件的标题 //正文 邮件内容 message.setContent(content, "text/html;charset=UTF-8");// 设置邮件的正文 message.setSentDate(new Date());// 发送时间 message.saveChanges(); // 保存设置 Transport transport = session.getTransport();// 获取一个传输对象 transport.connect(username, password);// 设置发送邮件用户名和密码 transport.sendMessage(message, message.getAllRecipients());// 发送邮件 transport.close(); res = true; } catch (Exception e) { e.printStackTrace(); } return res; } }
2.3 在 application.yml 添加 password 是刚申请QQ邮箱中的授权码
#邮件
mailbox:
# 发送人
sender: 664112979@qq.com
# 发送人的QQ号
username: 664112979@qq.com
# 发送人的 授权码
password: 必填
2.4 Conntroller
/** * @program: ruoyi * @description: 测试邮箱使用 * @author: @Dog_E * @create: 2020-07-11 17:55 **/ @RestController @RequestMapping("/test") public class LoginController { @PostMapping("/test") public String test(String recipients) { try { /** recipients 收件人 */ if (MailUtil.sendSimpleMail(recipients, "邮件内容", "标题:验证码")) { return "成功"; } else { return "失敗"; } } catch (Exception e) { e.printStackTrace(); return "失敗"; } } }
2.4 Postman测试
END-- 可以在线上环境 用于自己程序的异常抛出发送异常邮件或者邮件验证码 玩法多样(个人版的应该是有次数的)