web-dev-qa-db-ja.com

SMTPを使用してSES用にSpringJavaMailSenderを構成する方法は?

SMTPを使用してAmazonのSESサービスと連携するようにSpringJavaMailSenderを構成しようとしていますが、次のエラーが発生します。

javax.mail.MessagingException: Could not connect to SMTP Host: email-smtp.us-east-1.amazonaws.com, port: 465, response: -1

これが私たちの構成です:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="Host" value="email-smtp.us-east-1.amazonaws.com" />
    <property name="port" value="465" />
    <property name="username" value="..." />
    <property name="password" value="..." />
    <property name="javaMailProperties">
        <props>
            <prop key="mail.smtp.auth">true</prop>
            <prop key="mail.smtp.ssl.enable">true</prop>
        </props>
    </property>
</bean>

何が間違っている可能性があるのですか?前もって感謝します。

PS:私たちはすでにここで解決策を試しました: SMTPホストに接続できませんでした:email-smtp.us-east-1.amazonaws.com、ポート:465、応答:-1 運がなかった。

15
rreyes1979

@GuCoの回答に基づく:これは私のために働いた完全な構成です:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="Host" value="email-smtp.us-east-1.amazonaws.com" />
    <property name="port" value="465" />
    <property name="protocol" value="smtps" />
    <property name="username" value="..." />
    <property name="password" value="..." />
    <property name="javaMailProperties">
        <props>
            <prop key="mail.smtps.auth">true</prop>
            <prop key="mail.smtp.ssl.enable">true</prop>
            <prop key="mail.transport.protocol">smtps</prop>
        </props>
    </property>
</bean>

<property name="protocol" value="smtps" />構成を忘れないでください。そうしないと、javaMailPropertiesが考慮されません。

37
rreyes1979

私はちょうど同じ問題に遭遇しました。実は数週間前に解決しようとして行き詰まってしまいました...

問題を特定するために私が最初にしたこと:メールAPIのデバッグモードをアクティブにする

<props>
    ...
    <prop key="mail.debug">true</prop> 
</props>

これは、実際にはSSLを使用していないことを示しています

DEBUG SMTP: trying to connect to Host "email-smtp.us-east-1.amazonaws.com", port 465, isSSL false

私の同僚は、SSLを実際に使用するために別のメールプロパティを含めることを指摘しました

<props>
    ...
    <prop key="mail.transport.protocol">smtps</prop>
    ...
</props>

この値を追加した後、「isSSL」値はtrueに変更されましたが、別のエラーが指摘されました。プロトコルが変更されたため、認証は使用されなくなりました。もちろん、プロパティを変更することで修正できます。

<prop key="mail.smtp.auth">true</prop>

<prop key="mail.smtps.auth">true</prop>

その旅の後、それはついに私のために働きました:-)

お役に立てば幸いです...

正しいプロパティを要約するだけです。

<props>
    <prop key="mail.smtps.auth">true</prop>
    <prop key="mail.smtp.ssl.enable">true</prop>
    <prop key="mail.transport.protocol">smtps</prop>
</props>
14
GuCo

この質問はかなり古いですが、誰かがSpringブート構成を必要とする場合、これが私のために働いたものです:

mail:
    Host: email-smtp.us-west-2.amazonaws.com
    port: 465
    username: <username>
    password: <pwd>

    properties:
        mail.smtp.auth: true
        mail.smtp.starttls.enable: true
        mail.smtp.starttls.required: true
        mail.smtp.ssl.enable: true
        mail.transport.protocol: smtps
        mail.smtp.from: [email protected]
3
Nacho Mezzadra

このコードは私のために働いています:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="Host" value="email-smtp.us-east-1.amazonaws.com" />
            <!--Obtaining Your Amazon SES SMTP Credentials. use http://docs.aws.Amazon.com/ses/latest/DeveloperGuide/smtp-credentials.html-->
    <property name="username" value="smtp user name" />
    <property name="password" value="smtp password" />
    <property name="javaMailProperties">
        <props>
            <prop key="mail.smtp.auth">true</prop>
            <prop key="mail.transport.protocol">smtp</prop>
            <prop key="mail.smtp.port">25</prop>
            <prop key="mail.smtp.starttls.enable">true</prop>
            <prop key="mail.smtp.starttls.required">true</prop>
            <prop key="mail.smtp.from">[email protected]</prop>
        </props>
    </property>
</bean>
2

@Beanを使用したい場合は、次のことがうまくいきました。

@Bean
public MailSender mailSender() {
    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
    mailSender.setHost("email-smtp.eu-west-1.amazonaws.com");
    mailSender.setUsername("...");
    mailSender.setPassword("...");
    mailSender.setPort(465);
    mailSender.setProtocol("smtps");

    // This can be very helpful
    Properties properties = new Properties();
    properties.setProperty("mail.debug", "true");
    mailSender.setJavaMailProperties(properties);

    return mailSender;
}
1
Sebastian