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

Ser*_*Amo 20 java email google-apps

我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)

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

   props.put("mail.smtp.starttls.enable","true");
Run Code Online (Sandbox Code Playgroud)

但是,它没有帮助.

这些是我的导入声明:

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;
Run Code Online (Sandbox Code Playgroud)

有谁知道这个错误?

Ser*_*Amo 19

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

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

Transport transport = session.getTransport("smtps");            
Run Code Online (Sandbox Code Playgroud)

现在比尔蜥蜴的代码有效.


小智 16

设置以下标记.它会工作.

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"); 
Run Code Online (Sandbox Code Playgroud)


小智 8

它是java mail API的版本.我正面临这个问题,我刚刚将java邮件API更新为1.4.3它对我来说很好!

谢谢!


Zac*_*ena 4

我认为这与使用 SMTPS 而不是 SMTP 进行邮件传输有关。这是一个不同的版本,仿照有关访问 Gmail 的 JavaMail 常见问题解答。请注意,为了清楚起见,我省略了所有更精细级别的异常处理。

private static void send(
        final String username,
        final String password,
        final String recipients,
        final String subject,
        final String body)
        throws Exception
{
    final Session session = Session.getInstance(System.getProperties(), null);
    final Message msg = new MimeMessage(session);
    final String senderEmail = username.contains("@") ? username : (username + "@gmail.com");
    msg.setFrom(new InternetAddress(senderEmail));

    final Address[] recipientAddresses = InternetAddress.parse(recipients);
    msg.setRecipients(Message.RecipientType.TO, recipientAddresses);

    msg.setSentDate(new Date());
    msg.setSubject(subject);
    msg.setText(body);

    final Transport transport = session.getTransport("smtps");
    transport.connect(GMAIL_SMTP_HOST, GMAIL_SMTP_PORT, username, password);
    transport.sendMessage(msg, recipientAddresses);
    transport.close();
}
Run Code Online (Sandbox Code Playgroud)