1、引用JavaMail
在pom.xml
中添加依赖如下,
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
参考文档:https://javaee.github.io/javamail/
2、使用Gmail SMTP的TLS
1)SMTP的url和port
SMTP = smtp.gmail.com Port = 587
2)实现代码
package com.cjavapy;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class SendEmailTLS {
public static void main(String[] args) {
final String username = "username@gmail.com";
final String password = "password";
Properties prop = new Properties();
prop.put("mail.smtp.host", "smtp.gmail.com");
prop.put("mail.smtp.port", "587");
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.starttls.enable", "true"); //TLS
Session session = Session.getInstance(prop,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("from@gmail.com"));
message.setRecipients(
Message.RecipientType.TO,
InternetAddress.parse("to_username_a@gmail.com, to_username_b@163.com")
);
message.setSubject("Gmail TLS 测试");
message.setText("邮件内容,"
+ "\n\n 测试邮件内容");
Transport.send(message);
System.out.println("发送成功");
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
3、使用Gmail SMTP的SSL
1)SMTP的url和port
SMTP = smtp.gmail.com Port = 465
2)实现代码
package com.cjavapy;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class SendEmailSSL {
public static void main(String[] args) {
final String username = "username@gmail.com";
final String password = "password";
Properties prop = new Properties();
prop.put("mail.smtp.host", "smtp.gmail.com");
prop.put("mail.smtp.port", "465");
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.socketFactory.port", "465");
prop.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
Session session = Session.getInstance(prop,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("from@gmail.com"));
message.setRecipients(
Message.RecipientType.TO,
InternetAddress.parse("to_username_a@gmail.com, to_username_b@163.com")
);
message.setSubject("Gmail SSL 测试");
message.setText("邮件内容,"
+ "\n\n 测试邮件内容");
Transport.send(message);
System.out.println("发送成功");
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
4、Gmail 启用不太安全的应用程序
从 2022 年 5 月 30 日起,Google 不再支持使用第三方应用或设备,这些应用或设备要求仅使用的用户名和密码登录的 Google 帐户。因此,必须为应用程序使用不同的解决方案。为此,需要先为我们的 Gmail 帐户启用两步验证,然后我们可以使用应用密码功能来解决这个问题。
需要要启用两步验证,我们必须:
导航到我们的 Google 帐户 - 将从 (https://myaccount.google.com/) 发送电子邮件的帐户
1)在左侧的菜单中,我们应该选择 Security
2)然后在“登录谷歌”部分下,我们可以看到两步验证已关闭——所以我们必须点击它
3)单击开始,提供您的密码,并通过提供手机号码确认代码
4)如果一切顺利,应该会看到打开选项,因此只需单击它,此时,我们已经启用了两步验证,我们可以返回安全页面。在那里,在相同的“登录谷歌”部分下,我们可以找到应用专用密码选项设置为无。
5)我们必须点击它提供密码,单击选择应用程序菜单,并选择其他(自定义名称)选项,为我们的应用程序提供我们喜欢的任何名称,然后单击“生成”按钮,将为我们生成一个新密码,我们应该在我们的appsettings.json文件中使用它而不是我们的个人密码。
有了这个,我们可以再次使用我们的第三方应用程序发送电子邮件。
参考文档:https://support.google.com/accounts/answer/185833?p=InvalidSecondFactor