必须首先发出 STARTTLS 命令。使用 Java 和 Google Apps 发送电子邮件

2022-09-02 05:25:27

我正在尝试使用 Bill the Lizard 的代码使用 Google Apps 发送电子邮件。我收到此错误:

Exception in thread "main" javax.mail.SendFailedException: Sending failed;
  nested exception is: 
    javax.mail.MessagingException: 530 5.7.0 Must issue a STARTTLS command first. f3sm9277120nfh.74

    at javax.mail.Transport.send0(Transport.java:219)
    at javax.mail.Transport.send(Transport.java:81)
    at SendMailUsingAuthentication.postMail(SendMailUsingAuthentication.java:81)
    at SendMailUsingAuthentication.main(SendMailUsingAuthentication.java:44)

Bill 的代码包含下一行,这似乎与错误有关:

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

但是,这无济于事。

这些是我的导入语句:

import java.util.Properties; 
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

有谁知道这个错误?


答案 1

我发现了问题。以前我使用j2ee.jar来导入javax.mail。

我从类路径中删除了j2ee.jar并下载了JavaMail 1.4.1,并在我的类路径中放入了两个jar,smtp.jar和mailapi.jar。我现在使用 smtp 而不是 smtp

Transport transport = session.getTransport("smtps");            

现在,蜥蜴比尔的代码工作了。


答案 2

设置以下标签。它会起作用。

props.put("mail.smtp.user","username"); 
props.put("mail.smtp.host", "smtp.gmail.com"); 
props.put("mail.smtp.port", "25"); 
props.put("mail.debug", "true"); 
props.put("mail.smtp.auth", "true"); 
props.put("mail.smtp.starttls.enable","true"); 
props.put("mail.smtp.EnableSSL.enable","true");

props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");   
props.setProperty("mail.smtp.socketFactory.fallback", "false");   
props.setProperty("mail.smtp.port", "465");   
props.setProperty("mail.smtp.socketFactory.port", "465"); 

推荐