1. ホーム
  2. java

[解決済み】STARTTLSコマンドを最初に発行する必要があります。

2022-01-27 03:41:18

質問

私はこの簡単な例を、私の Gmail のアカウントでログインしていますが、うまくいかず、以下のようなエラーが発生します。

      send failed, exception: com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. nv2sm4478384pbb.6      

以下は私のコードです。

   public class Email
{
   public static void main(String [] args)
   {

       Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.googlemail.com");
        props.put("mail.from", "[email protected]");
          Session session = Session.getInstance(props, null);

        try {
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom();
            msg.setRecipients(Message.RecipientType.TO,
                              "[email protected]");
            msg.setSubject("JavaMail hello world example");
            msg.setSentDate(new Date());
            msg.setText("Hello, world!\n");
            Transport.send(msg);
        } catch (MessagingException mex) {
            System.out.println("send failed, exception: " + mex);
        }
   }
}

解決方法は?

おそらく、ポート25のGmailサーバーを使用して、認証されていない接続で第三者にメールを配信しようとしているのでしょう。Gmail はこのようなことを許しません。 誰でも Gmailのサーバーを使用して、他の誰かにメールを送ることができるのです。これは オープンリレー 初期のころはスパムの常習犯でした。オープンリレーは、もはやインターネットでは受け入れられません。

SMTPクライアントに、認証された接続を使用してGmailに接続するよう依頼する必要があります。 ポート587 .