gpt4 book ai didi

java - 将 Gmail SMTP 服务器与 JavaMail 结合使用 : Must issue a STARTTLS command first (JavaMail version 1. 4.1)

转载 作者:行者123 更新时间:2023-11-30 03:11:34 24 4
gpt4 key购买 nike

在发布之前,我在互联网上阅读了很多内容和建议的问题,但找不到任何适合我的内容。

  • 有关使用 gmail 的 JavaMail 常见问题解答
  • Stackoverflow 问题
  • JavaMail 教程
  • Google 搜索的任何其他结果

在过去的 5 天里,我一直在寻找解决此问题的方法,但一直找不到。

相关代码:

private void sendMail(){

final String username = "foo";
final String password = "bar";

Properties props = System.getProperties();
props.put("mail.smtp.starttls.enable", true); // added this line
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.user", username);
props.put("mail.smtp.password", password);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", true);
props.put("mail.debug", "true");

Session session = Session.getInstance(props,null);
MimeMessage message = new MimeMessage(session);

System.out.println("Port: "+session.getProperty("mail.smtp.port"));

// Create the email addresses involved
try {
InternetAddress from = new InternetAddress(username);
message.setSubject("Yes we can");
message.setFrom(from);
message.addRecipients(Message.RecipientType.TO, InternetAddress.parse("ardilgulez@gmail.com"));

// Create a multi-part to combine the parts
Multipart multipart = new MimeMultipart("alternative");

// Create your text message part
BodyPart messageBodyPart = new MimeBodyPart();
String htmlMessage = "Our html text";
messageBodyPart.setContent(htmlMessage, "text/html");

// Add html part to multi part
multipart.addBodyPart(messageBodyPart);

// Associate multi-part with message
message.setContent(multipart);

// Send message
Transport transport = session.getTransport("smtp");
transport.connect("smtp.gmail.com", username, password);
System.out.println("Transport: "+transport.toString());
transport.sendMessage(message, message.getAllRecipients());
} catch (MessagingException e) {
e.printStackTrace();
}

}

邮件调试日志文件:

调试:JavaMail 版本 1.4.1……调试:!anyLoaded

调试:未加载资源:/META-INF/javamail.address.map

调试:未加载文件:C:\Java\JDK16~1.0_4\jre\lib\javamail.address.map

DEBUG: java.io.FileNotFoundException: C:\Java\JDK16~1.0_4\jre\lib\javamail.address.map (系统找不到指定的文件)

端口:587

调试:getProvider() 返回 javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]

调试 SMTP:useEhlo true,useAuth false

调试 SMTP:尝试连接到主机“smtp.gmail.com”,端口 587,isSSL false220 smtp.gmail.com ESMTP t2sm2978726wme.0 - gsmtp

调试 SMTP:已连接到主机“smtp.gmail.com”,端口:587

EHLO 福

250-smtp.gmail.com 为您服务,[212.156.0.126]

250-尺寸 35882577

250-8BITMIME

250-STARTTLS

250 个增强状态代码

250-流水线

250-分块

250 SMTPUTF8

调试 SMTP:找到扩展名“SIZE”,arg“35882577”

调试 SMTP:找到扩展名“8BITMIME”,arg“”

调试 SMTP:找到扩展名“STARTTLS”,arg“”

调试 SMTP:找到扩展名“ENHANCEDSTATUSCODES”,arg“”

调试 SMTP:找到扩展名“PIPELINING”,arg“”

调试 SMTP:找到扩展名“CHUNKING”,arg“”

调试 SMTP:找到扩展名“SMTPUTF8”,arg“”

传输:smtp://foo@smtp.gmail.com

调试 SMTP:use8bit false

邮件来自:

530 5.7.0 必须首先发出 STARTTLS 命令。 t2sm2978726wme.0 - gsmtp

DEBUG SMTP:收到响应代码 530,响应为:530 5.7.0 必须首先发出 STARTTLS 命令。 t2sm2978726wme.0 - gsmtp

最佳答案

因为您使用的是非常旧版本的 JavaMail,所以您需要使用此:

props.put("mail.smtp.starttls.enable", "true");

注意引号。

更好的是,upgrade to a current version .

哦,没有 mail.smtp.password 属性,并且您不需要 mail.smtp.host 和 mail.smtp.user 属性,因为您将它们显式传递给 connect 方法。

关于java - 将 Gmail SMTP 服务器与 JavaMail 结合使用 : Must issue a STARTTLS command first (JavaMail version 1. 4.1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33523051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com