当前位置: 首页 > 知识库问答 >
问题:

使用带有JavaMail的Gmail SMTP服务器:必须首先发出STARTTLS命令(JavaMail版本1.4.1)

姬旭
2023-03-14

在发帖之前,我已经在网上读了很多东西和建议的问题,但是没有找到任何适合我的东西。

  • 关于使用Gmail的JavaMail常见问题
  • 堆栈溢出问题
  • JavaMail教程
  • 谷歌搜索的任何其他结果

在过去的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.....debug:!anyloaded

调试:未加载资源:/meta-inf/javamail.address.map

debug:未加载文件: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

debug: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 false 220 smtp.gmail.com ESMTP T2SM2978726WME.0-gsmtp

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

EHLO FOO

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

250-尺寸35882577

250-8bitmime

250-starttls

250-增强状态代码

250-流水线

250块

250 SMTPUTF8

调试SMTP:找到扩展名“size”,参数“35882577”

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

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

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

调试SMTP:找到扩展“Pipelining”,参数“”

调试SMTP:找到扩展“chunking”,参数“”

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

传输: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

共有1个答案

端木骞尧
2023-03-14

因为您使用的是非常旧的JavaMail,所以需要使用以下内容:

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

注意引号。

更好的方法是升级到当前版本。

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

 类似资料:
  • 问题内容: 我正在使用我的帐户运行此简单示例,但该示例无法正常工作并给出以下错误: 这是我的代码 问题答案: 您可能正在尝试使用端口25上的Gmail服务器通过未经身份验证的连接将邮件传递给第三方。Gmail不允许您这样做,因为这样 任何人 都可以使用Gmail的服务器将邮件发送给其他任何人。这称为 开放中继 ,在早期是垃圾邮件的常见促成因素。Internet上不再接受开放中继。 您将需要让SMT

  • 问题内容: SMTP服务器响应:530 5.7.0必须首先发出STARTTLS命令 我在php脚本文件中使用mail()函数时收到此错误消息… 我正在使用gmail SMTP服务器和gmail使用STARTTLS(这是安全SSL),并且我已经在我的contact.php文件中使用了这些命令 所以我可以使用什么命令来启用STARTTLS或在php,ini文件中进行配置? 问题答案: 首先,确保您的P

  • 问题内容: 我正在创建一个应用程序并尝试向其中添加电子邮件功能,为此我在build.sbt文件中添加了依赖项,但下面解释了一个异常 我的密码 application.conf中包含的代码 但我有一个例外 我怎么解决这个问题? 问题答案: 我认为您必须先指定要发送TLS电子邮件,然后再发送电子邮件。 我不确定100%,但是我认为它可以解决问题。 另外,有关更多信息,您可以参考此用户指南:https

  • 我试图发送电子邮件从php到一个gmail帐户。我的笔记本电脑上有以下设置: Windows 8 Internet连接 XAMPP 1.7.4,PHP版本5.3.5, 我有以下php.ini设置 [邮件功能];仅适用于Win32。;http://php.net/SMTP SMTP=SMTP.gmail.com;http://php.net/smtp-端口 smtp_port=:465 ;仅适用于W

  • 在构建一个插件时,我会遇到一个“找不到类”的异常 有人已经设法创建了插件或类加载器XPages就这样杀死了?

  • 当我试图从“smtpout.asia.secureserver.net”发送邮件时,它是从本地主机而不是“secureserver”主机发送的。下面是代码: catt(MessagingExc的e){抛出新的Runtime异常(e);} 调试: 但是如果我将主机更改为“smtp.gmail.com”,它就可以正常工作。