AmazonのSES/SMTPでメールを送信しようとしていますが、次のエラーが発生します。
javax.mail.MessagingException:SMTPホストに接続できませんでした:email-smtp.us-east-1.amazonaws.com、ポート:465、応答:-1 =
これが私がメールを送ろうとしている方法です:
Springメール送信者の設定:
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="Host" value="${mail.server}"/>
<property name="port" value="${mail.port}"/>
<property name="username" value="${aws.mail.smtp.user}"/>
<property name="password" value="${aws.mail.smtp.password}"/>
<property name="javaMailProperties">
<props>
<!-- Use SMTP-AUTH to authenticate to SMTP server -->
<prop key="mail.smtp.auth">true</prop>
<!-- Use TLS to encrypt communication with SMTP server -->
<prop key="mail.smtp.starttls.enable">true</prop>
</props>
</property>
</bean>
と:
mail.server =email-smtp.us-east-1.amazonaws.com
mail.port = 465
Amazon SESでは、設定は次のようにする必要があります。
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.ssl.enable">true</prop>
の代わりに:
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
デイブがほのめかしたように。
[〜#〜]編集[〜#〜]:このソリューションを使用してください: https://stackoverflow.com/a/8928559/536299
Amazon SES SMTPは、SMTPセッションの前にSSLを必要とします。 StartTLSコマンドはSESではサポートされていません。
ポート25でも同じ問題が発生しましたが、私にとってはポート587で機能しました。
これらの設定は私のために働いた:
mail.transport.protocol=smtp mail.smtp.port=25 mail.smtp.auth=true mail.smtp.starttls.enable=true mail.smtp.starttls.required=true mail.smtp.Host=email-smtp.us-east-1.amazonaws.com mail.smtp.user=[SMTP username] mail.smtp.password=[SMTP user password]
SSL接続を使用して接続しようとすると、接続が拒否されました。したがって、接続後にSTARTTLSを実行する必要があります。
Mail.debug = trueを追加して、失敗した場所を確認できます。
送信者の電子メールアドレスは確認済みの電子メールアドレスである必要があります。そうでない場合、SESは電子メールの転送を拒否します。
AWSのこの従業員は、SESはSSLをまったくサポートしていないと述べています。 https://forums.aws.Amazon.com/message.jspa?messageID=2183 。
Amazon SESは、トランスポート層セキュリティを有効にしてメールを送信しようとしますが、メッセージがTLSで送信されることを保証する方法はありません。 SESは、電子メールを送信するときに便宜的なTLSを使用します。つまり、最初にTLSを介して電子メールを送信しようとし、TLSが使用できない場合は通常のSMTPにフォールバックします。
したがって、あなたが見ている問題はTLSやSSLに関連するものではなく、何か別のものだと思います。
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.Host", "email-smtp.us-east-1.amazonaws.com");
props.setProperty("mail.user", "your_ses_user");
props.setProperty("mail.password", "your_ses_pwd");
Session mailSession = Session.getDefaultInstance(props, new Authenticator(){
public PasswordAuthentication getPasswordAuthentication() {
String username = "your_ses_user";
String password = "your_ses_pwd";
return new PasswordAuthentication(username, password);
}
});
これらのコードはテスト済みで、正常に機能します。 SMTP over SSLを使用する場合は、以下を構成してください。
props.setProperty("mail.smtp.starttls.enable", "true");
または、AWS Java SDK from [〜#〜] here [〜#〜] をダウンロードできます。
コードサンプルは [〜#〜] here [〜#〜]
https://forums.aws.Amazon.com/message.jspa?messageID=2183 のAWSノートは、メールメッセージの機密性を維持するためのサーバー間通信の暗号化について言及していることに注意してください。すべてのSMTPサービスの共通の特性。
この質問は、AWS SMTPサーバーへの安全な接続を使用して、AWSサーバーでの認証に使用されるパスワードを保護することに関するものです。