邮箱
tio-utils 内置了邮箱工具类 com.litongjava.tio.utils.email.EMailUtils 用于支持发送邮件
添加依赖
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.5.0-b01</version>
</dependency>
or
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
这两个依赖的区别在于它们所依赖的不同版本的 Java 邮件库,以及这些版本可能带来的改动或增强。具体如下:
1. javax.mail:mail:1.5.0-b01
- 这是 Java 邮件 API (
JavaMail
) 的一个旧版本,归属于javax.mail
组下。这个库原先是由 Sun Microsystems 维护的,后来转移到了 Oracle 旗下。 - 版本 1.5.0 是较早的版本,某些新特性或者 bug 修复可能还没有包含在内。
- 如果你使用这个版本,你的 Maven 配置依赖的是较旧的邮件 API 版本。
2. com.sun.mail:javax.mail:1.6.2
com.sun.mail
版本的依赖是 JavaMail 的较新版本,由 Oracle 分离出来并以开源的方式发布在com.sun.mail
组下。- 这个库版本在 1.6.2 中做了大量的更新和 bug 修复。例如,它支持了更多的 SSL/TLS 配置选项,增强了对于非标准邮件协议的支持,并修复了一些长期存在的问题。
- 这个版本提供了更好的稳定性和性能,也修复了一些 1.5.x 版本中的安全漏洞。
如何修改代码:
如果你切换到 com.sun.mail:javax.mail:1.6.2
依赖,代码可以基本保持不变,因为 API 本身没有大的改变。你只需要在 pom.xml
文件中替换依赖接口
总结:
javax.mail:mail:1.5.0-b01
是旧的邮件库版本,功能较为基础,某些 bug 和安全问题可能没有得到修复。com.sun.mail:javax.mail:1.6.2
是较新的版本,提供更多的功能、增强的安全性和 bug 修复。
如果你需要更多的新特性、安全性,建议使用 com.sun.mail:javax.mail:1.6.2
。
发送邮件
使用网易 126 发送邮件
app.properties
mail.host=smtp.126.com
mail.protocol=smtp
mail.smpt.port=465
mail.user=litongjava_alarm@126.com
mail.password=g8NmXf6hcy9NexE
mail.from=litongjava_alarm
测试发送
String filename = "app.properties";
EnvUtils.load(filename);
EMailUtils.send("litongjava@qq.com", "验证码", "欢迎你登录XXX系统,你的验证码是 1234");
默认整合的邮箱是 网易 126 邮箱服务
使用 Gmail 发送邮件
app.properties
mail.host=smtp.gmail.com
mail.protocol=smtp
mail.smpt.port=465
mail.user=smtp_xxx@gmail.com
mail.password=xxxx xxxx xxxx xxxx
mail.from=smtp_alarm
import com.litongjava.tio.utils.email.EMailUtils;
import com.litongjava.tio.utils.email.GMailFactory;
import com.litongjava.tio.utils.environment.EnvUtils;
public class GmailTest {
public static void main(String[] args) {
EnvUtils.load("app.properties");
EMailUtils.setEMailFactory(new GMailFactory());
EMailUtils.send("litongjava001@gmail.com", "Adsgency AI Email Verification", "Your email verification code is 164403");
}
}
获取 Gmail 授权码
步骤
- 开启 google 两步验证
- 获取授权码 不开启 google 两步验证的情况下,无法获取邮箱专用的授权码的,开启 google 两步验证需要绑定手机号
开启 google 两步验证
登录您的 Google 账户:
- 访问 Google 账户 并登录。
访问安全性设置:
- 在 Google 账户主页上,点击左侧菜单的“安全性”选项。
找到“两步验证”: - 在“安全性”页面中,向下滚动直到您看到“登录到 Google”部分。 - 在那里,您会找到“两步验证”选项。点击“两步验证”。可能需要您输入密码再次确认身份。 https://myaccount.google.com/signinoptions/two-step-verification/enroll-welcome
开始设置两步验证:
- 点击“开始”或“设置”开始两步验证的设置过程。
添加您的电话号码:
- 按照屏幕上的指示添加您的电话号码。您可以选择接收验证码的方式,通常是短信或电话呼叫。
- 输入您收到的验证码以确认电话号码的正确性。
完成设置:
- 按照屏幕上的指示完成剩余的步骤。一旦设置成功,您将看到一个确认屏幕。
(可选)添加备用验证选项:
- 在设置了基本的电话验证之后,您还可以添加备用验证方法,例如备用电话号码、Google 提示信息、或使用 Google Authenticator 等应用生成的验证码。
生成应用程序专用密码:
- 在您开启两步验证之后,如果您要在邮件客户端等应用中使用 Gmail,您可能需要生成一个应用程序专用的密码。这可以在您的 Google 账户的安全性部分找到,通常在“密码与登录方式”或“应用程序专用密码”部分。
- 选择“管理应用程序专用密码”或类似选项,然后按照指示生成一个密码。这个密码将在生成时显示一次,不会再次显示,所以请在使用时确保复制并保存好。
访问 Google 账户设置:
- 登录您的 Google 账户,然后访问 Google 账户。
进入安全性设置:
- 在 Google 账户主页上,点击左侧菜单的“安全性”选项。
找到“应用程序专用密码”部分:
- 在“安全性”页面中,向下滚动直到您看到“登录到 Google”部分。
- 找到“应用程序专用密码”或类似的选项(这个选项只有在您已经开启两步验证后才会出现)。
生成应用程序专用密码:
- 点击“应用程序专用密码”或类似选项。
- 您可能需要再次输入您的账户密码进行确认。
- 在显示的界面中,选择“选择应用”和“选择设备”来指定您要使用授权码的应用程序和设备。
- 点击“生成”按钮,系统将为您生成一个 16 位数的授权码。
使用授权码:
- 将生成的授权码复制下来。请注意,授权码只显示一次,所以确保在关闭窗口前复制它。
- 在需要输入密码的地方,如邮件客户端或其他应用程序的登录界面,输入这个授权码代替您的 Google 账户密码。
获取授权码
访问 Google 账户设置:
- 登录您的 Google 账户,然后访问 Google 账户。
进入安全性设置:
- 在 Google 账户主页上,点击左侧菜单的“安全性”选项。
找到“应用程序专用密码”部分:
- 在“安全性”页面中,向下滚动直到您看到“登录到 Google”部分。
- 找到“应用程序专用密码”或类似的选项(这个选项只有在您已经开启两步验证后才会出现)。
生成应用程序专用密码:
- 点击“应用程序专用密码”或类似选项。https://myaccount.google.com/signinoptions/two-step-verification
- 您可能需要再次输入您的账户密码进行确认。
- 在显示的界面中,选择“选择应用”和“选择设备”来指定您要使用授权码的应用程序和设备。
- 点击“生成”按钮,系统将为您生成一个 16 位数的授权码。
使用授权码:
- 将生成的授权码复制下来。请注意,授权码只显示一次,所以确保在关闭窗口前复制它。
- 在需要输入密码的地方,如邮件客户端或其他应用程序的登录界面,输入这个授权码代替您的 Google 账户密码。
使用自定义邮箱
- 实现类 com.litongjava.tio.utils.email.EMail 重写 send 方法
- 2.实现类 com.litongjava.tio.utils.email.IEMailFactory 重写 getMail 方法 返回 Mail
- 调用 com.litongjava.tio.utils.email.EMailUtils.setEMailFactory(IEMailFactory) 设置实现类
package com.litongjava.tio.utils.email;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.litongjava.tio.utils.IoUtils;
import com.litongjava.tio.utils.environment.EnvUtils;
public class Wangyi126Mail implements EMail {
/**
* 发送邮件
* @param to 收件人
* @param subject 主题
* @param content 内容
* @paaram isDebug 是否开启debug模式
*/
public void send(String to, String subject, String content, boolean isDebug) {
String mailHost = EnvUtils.get("mail.host");
String mailTransportProtocol = EnvUtils.get("mail.protocol");
Integer smtpPort = EnvUtils.getInt("mail.smpt.port");
String user = EnvUtils.get("mail.user");
String password = EnvUtils.get("mail.password");
String from = EnvUtils.get("mail.from");
....
}
}
package com.litongjava.tio.utils.email;
public class Wangyi126MailFactory implements IEMailFactory {
@Override
public EMail getMail() {
return new Wangyi126Mail();
}
}
邮件地址日志
DEBUG: setDebug: JavaMail version 1.6.2
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL false
220 smtp.gmail.com ESMTP d9443c01a7336-20c138c9934sm7985785ad.63 - gsmtp
DEBUG SMTP: connected to host "smtp.gmail.com", port: 465
EHLO Ping-Windows
250-smtp.gmail.com at your service, [66.75.89.81]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "SMTPUTF8", arg ""
DEBUG SMTP: protocolConnect login, host=smtp.gmail.com, user=no-reply@withkimi.app, password=<non-null>
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2
DEBUG SMTP: Using mechanism LOGIN
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded
DEBUG SMTP: use8bit false
MAIL FROM:<no-reply>
250 2.1.0 OK d9443c01a7336-20c138c9934sm7985785ad.63 - gsmtp
RCPT TO:<litonglinux@gmail.com>
250 2.1.5 OK d9443c01a7336-20c138c9934sm7985785ad.63 - gsmtp
DEBUG SMTP: Verified Addresses
DEBUG SMTP: litonglinux@gmail.com
DATA
354 Go ahead d9443c01a7336-20c138c9934sm7985785ad.63 - gsmtp
Date: Fri, 4 Oct 2024 20:52:49 -1000 (HST)
From: no-reply
To: litonglinux@gmail.com
Message-ID: <375591241.0.1728111169768@smtp.gmail.com>
Subject: =?UTF-8?B?6aqM6K+B56CB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
5L2g55qE6aqM6K+B56CB5pivMTIzNDU2
.
250 2.0.0 OK 1728111248 d9443c01a7336-20c138c9934sm7985785ad.63 - gsmtp
DEBUG SMTP: message successfully delivered to mail server
QUIT
221 2.0.0 closing connection d9443c01a7336-20c138c9934sm7985785ad.63 - gsmtp