Frage Wie konfiguriert man Spring JavaMailSender für SES mit SMTP?


Wir versuchen, Spring JavaMailSender so zu konfigurieren, dass es mit dem SES-Dienst von Amazon unter Verwendung von SMTP funktioniert. Dieser Fehler tritt jedoch auf:

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

Das ist unsere Konfiguration:

<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>

Irgendwelche Ideen, was könnte falsch sein? Danke im Voraus.

PS: Wir haben die Lösung hier schon versucht: Verbindung zum SMTP-Host konnte nicht hergestellt werden: email-smtp.us-east-1.amazonaws.com, Port: 465, Antwort: -1 ohne Glück.


15
2018-01-18 21:05


Ursprung


Antworten:


Basierend auf @GuCo Antwort: Dies ist die vollständige Konfiguration, die für mich funktionierte:

<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>

Vergiss nicht das <property name="protocol" value="smtps" /> Konfiguration, oder die javaMailProperties werden nicht berücksichtigt.


36
2018-01-19 15:20



Ich bin gerade auf dasselbe Problem gestoßen. Eigentlich habe ich vor ein paar Wochen versucht, es zu lösen und bin steckengeblieben ...

Das erste, was ich getan habe, um das Problem zu identifizieren: Aktivieren Sie den Debugging-Modus für die Mail-API

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

Dies hat mir gezeigt, dass SSL eigentlich nicht verwendet wird

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

Mein Kollege wies darauf hin, eine weitere Mail-Eigenschaft aufzunehmen, um wirklich SSL zu verwenden

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

Nach dem Hinzufügen dieses Wertes hat sich der "isSSL" -Wert in "true" geändert, aber auf einen anderen Fehler hingewiesen. Es verwendet keine Authentifizierung mehr wegen der Änderung des Protokolls, die natürlich durch Ändern der Eigenschaft behoben werden kann

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

zu

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

Nach dieser Reise hat es endlich für mich geklappt :-)

Hoffe das war hilfreich ...

Um nur die richtigen Eigenschaften zusammenzufassen:

<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
2018-01-19 08:44



Dieser Code funktioniert für mich:

<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">abc@example.com</prop>
        </props>
    </property>
</bean>

2
2018-03-21 11:19



Wenn Sie @Bean verwenden möchten, funktionierte folgendes für mich:

@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
2018-04-30 12:58



Diese Frage ist ziemlich alt, aber für den Fall, dass jemand die Spring-Boot-Konfiguration benötigt, hat das für mich funktioniert:

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: no-reply@yourdomain.com

1
2018-04-02 02:30