准备工作

发送邮件需要获得协议和支持! 开启服务 POP3/SMTP 服务

如何开启 POP3/SMTP 服务:https://www.cnblogs.com/pojo/p/14276637.html

依赖

mail.jar:https://repo1.maven.org/maven2/javax/mail/mail/1.4.7/mail-1.4.7.jar

activation.jar: https://repo1.maven.org/maven2/javax/activation/activation/1.1.1/activation-1.1.1.jar

Maven

<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.activation/activation -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>

封装邮件发送工具类

使用

// User user = new User("收件人用户名", "收件人密码", "收件人邮箱");
User user = new User(username, password, email);
// 用户注册成功, 使用线程来发送邮件, 防止阻塞
SendMail sendMail = new SendMail(user);
sendMail.start();

工具类

package com.pro.utils;

import com.pro.pojo.User;
import com.sun.mail.util.MailSSLSocketFactory; import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties; // 网站三秒原则
public class SendMail extends Thread {
// 发送邮件的邮箱
private String from = "33344466@qq.com";
// 邮箱用户名
private String username = "33344466@qq.com";
// 授权码
private String password = "absasyncawait";
// 发送邮件的服务器地址
private String host = "smtp.qq.com"; private User user; public SendMail(User user) {
this.user = user;
} @Override
public void run() {
try {
Properties prop = new Properties();
prop.setProperty("mail.host", host); // 设置qq邮件服务器
prop.setProperty("mail.transport.protocol", "smtp"); // 邮件发送协议
prop.setProperty("mail.smtp.auth", "true"); // 需要验证用户名密码 // 关于qq邮箱, 还要设置SSL加密
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable", "true");
prop.put("mail.smtp.ssl.socketFactory", sf); // 使用 JavaMail 发送邮件的5个步骤 // 1. 定义整个应用程序所需要的环境信息的 Session 对象
// 这一步是qq邮箱才有, 其他邮箱不用
Session session = Session.getDefaultInstance(prop, new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
// 发件人邮箱 用户名和授权码
return new PasswordAuthentication(username, password);
}
}); // 开启 Session debugger 模式, 可以看到邮件发送的运行状态
session.setDebug(true); // 2. 通过 Session得到 transport 对象
Transport transport = session.getTransport(); // 3. 使用邮箱用户名和授权码连上邮件服务器 (登陆)
transport.connect(host, username, password); // 4. 创建邮件: 写邮件
MimeMessage message = new MimeMessage(session); // ======== 写邮件 ========
// 设置邮件的发件人
message.setFrom(new InternetAddress(from));
// 设置邮件的收件人
message.setRecipient(Message.RecipientType.TO,new InternetAddress(user.getEmail())); // 邮件标题
message.setSubject("用户注册通知");
// 邮件文本内容
String content = "<div>" +
"<span>恭喜你注册成功,你的用户名是:" +
user.getEmail() +
",你的密码是:" +
user.getPassword() +
",请妥善保管。</span>" +
"<a href='https://www.tmall.com/' target='_blank'>" +
"<img width='100%' src='https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2672619668,2196295127&fm=26&gp=0.jpg' />" +
"</a>" +
"<h4 style='color: red'>This email is sent from Java, 本邮件由Java程序发送, from to 33344466</h4>" +
"</div>";
message.setContent(content, "text/html; charset=UTF-8");
// ======== 写邮件 ======== // 5. 发送邮件
transport.sendMessage(message, message.getAllRecipients()); // 关闭连接
transport.close();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
}

最新文章

  1. nginx安装waf防护
  2. Hard Drive Inspector Pro 4.26.208(硬盘检测工具)简体中文特别版
  3. 【bzoj2333】 [SCOI2011]棘手的操作 可并堆+lazy标记
  4. AC自动机 - 关于Fail指针
  5. 《DDNS服务器的搭建和案例解决方法》
  6. Mina学习之IoFilter
  7. Traffic Manager:Azure中国版 正式发布
  8. mysql -数据库(备份与恢复)
  9. SonarQube 项目配置文件
  10. iOS如何兼容的应用程序32位系统和64Bit系统
  11. IO流的操作规律
  12. RabbitMQ消息队列系列教程(一)认识RabbitMQ
  13. ASP.NET Core身份认证服务框架IdentityServer4(2)-整体介绍
  14. Vue.js项目详解
  15. window下域名解析系统DNS诊断命令nslookup详解
  16. 【PAT】B1074 宇宙无敌加法器(20 分)
  17. java调用Linux执行Python爬虫,并将数据存储到elasticsearch中--(java后台代码)
  18. margin auto 实现居中,与text-align:center的区别
  19. 焦作网赛-G-欧拉降幂
  20. GBDT+Lr

热门文章

  1. MVC-采用Bundles方式引入css和js文件
  2. 简洁404页面源码 | 自适应404页面HTML好看的404源码下载
  3. [日常摸鱼]HDU1348Wall-凸包
  4. Numpy的学习2-基础转换
  5. HTML 防盗链 用src引用网上图片显示 403 Forbidden
  6. C#读取DLL文件获取所有类
  7. mysql 5.7 主从复制搭建及原理
  8. double 转为long类型
  9. 返回前端页面的属性名称和实体类的名称不一致用@JsonProperty
  10. springboot项目配置数据库