目录
一、邮件发送原理和流程图
二、Java发送邮件基本步骤
三、QQ邮箱授权码获取
四、示例代码
注:本章内容仅作为了解JavaMail邮件收发的基本原理,不建议作为实际项目使用,项目中建议通过SpringBoot项目加入mail的starter依赖来构建,代码更为精简可靠。
一、邮件发送原理和流程图
二、Java发送邮件基本步骤
-
使用JavaMail API建立与邮件服务器的通信。
-
创建邮件对象并设置发件人、收件人、主题和内容。
-
调用
Transport.send
方法发送邮件。 -
关闭连接。
三、QQ邮箱授权码获取
四、示例代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>Javamail</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
</dependencies>
</project>
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 Test {
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
// 设置QQ邮件服务器
prop.setProperty("mail.host", "smtp.qq.com");
// 设置邮件发送协议
prop.setProperty("mail.transport.protocol", "smtp");
// 设置需要验证用户密码
prop.setProperty("mail.smtp.auth", "true");
// 对于部分大公司的邮箱,还需要设置SSL加密,加上以下代码即可
MailSSLSocketFactory sf = new MailSSLSocketFactory();
// 设置信任所有主机
sf.setTrustAllHosts(true);
// 启用SSL加密
prop.put("mail.smtp.ssl.enable", "true");
prop.put("mail.smtp.ssl.socketFactory", "true");
// 使用JavaMail发送邮件的5个步骤
// 1. 新建一个认证器
Authenticator auth = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 设置发件人邮箱和密码
return new PasswordAuthentication("123456@qq.com", "123456ddd@");
}
};
// 2. 创建定义整个应用程序所需的环境信息的Session会话对象
Session session = Session.getInstance(prop, auth);
// 开启session的debug模式,这样就可以查看到程序发送Email的运行状态
session.setDebug(true);
// 3. 通过Session得到transport对象
Transport ts = session.getTransport();
// 4. 使用邮箱的用户名和授权码连上邮件服务器
ts.connect("smtp.qq.com", "123456@qq.com", "vkxypfjuv1pobbajg");
// 5. 创建邮件:写邮件
MimeMessage message = new MimeMessage(session);
// 6. 指明邮件的发件人
message.setFrom(new InternetAddress("123456@qq.com"));
// 7. 指明邮件的收件人,这里发件人和收件人是一样的,给自己发
message.setRecipient(Message.RecipientType.TO, new InternetAddress("123456@qq.com"));
// 邮件的标题
message.setSubject("只包含文本的简单邮件");
// 8. 邮件的文本内容
message.setContent("<h1 style='color: red'>你好啊!<h1>", "text/html;charset=UTF-8");
ts.sendMessage(message, message.getAllRecipients());
// 9. 关闭连接
ts.close();
}
}