it-swarm.com.de

So konfigurieren Sie Spring JavaMailSenderImpl für Google Mail

Ich versuche, die richtigen Eigenschaften für die Verbindung zum Gmail-SMTP-Server mithilfe der JavaMailSenderImpl-Klasse zu finden.

Lassen Sie mich zuerst sagen, dass ich den gefundenen Ansatz ausprobiert habe hier . Das hat gut funktioniert. Aber als ich die Konfiguration unter diesem Beitrag mit genau den gleichen Authentifizierungsinformationen ausprobierte, erhielt ich eine javax.mail.AuthenticationFailedException.

Meine aktuelle Konfiguration sieht so aus.

<bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" >
    <property name="username" value="[email protected]" />
    <property name="password" value="XXX" />
    <property name="javaMailProperties">
    <props>
        <prop key="mail.smtp.Host">smtp.gmail.com</prop>
        <prop key="mail.smtp.port">587</prop>
        <prop key="mail.smtp.auth">true</prop>
        <prop key="mail.smtp.starttls.enable">true</prop>
    </props>
    </property>
</bean>

Warum erhalte ich immer noch diese javax.mail.AuthenticationFailedException, wenn ich weiß, dass meine Anmeldeinformationen korrekt sind?.

Aktualisieren

Hier ist mein aktualisierter Code basierend auf den Antworten unten. Ich erhalte immer noch die gleiche Ausnahme.

<bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" >
    <property name="username" value="[email protected]" />
    <property name="password" value="XXX" />
    <property name="javaMailProperties">
    <props>
        <prop key="mail.smtp.from">[email protected]</prop>
        <prop key="mail.smtp.user">[email protected]</prop>
        <prop key="mail.smtp.password">XXX</prop>
        <prop key="mail.smtp.Host">smtp.gmail.com</prop>
        <prop key="mail.smtp.port">587</prop>
        <prop key="mail.smtp.auth">true</prop>
        <prop key="mail.smtp.starttls.enable">true</prop>
    </props>
    </property>
</bean>
38
Andrew

Das hat bei mir funktioniert:

        <property name="Host"><value>smtp.gmail.com</value></property>
        <property name="port"><value>587</value></property>
        <property name="protocol"><value>smtp</value></property>
        <property name="username"><value>${mail.username}</value></property>
        <property name="password"><value>${mail.password}</value></property>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">true</prop>
                <prop key="mail.smtp.starttls.enable">true</prop>
                <prop key="mail.smtp.quitwait">false</prop>
            </props>
        </property>

Der eigentliche Trick für mich war, dass der "Protokoll" -Wert "smtp" (nicht "smtps") sein muss.

33
Ken Burcham

Ich hatte eine Stunde lang Mühe, die richtigen Einstellungen zu finden, um eine E-Mail von Google Mail mit javamailsender zu senden, und tat es schließlich. Ich poste dies, da ich kein umfassendes Beispiel für den Versand über Google Mail mit Javamailsender finden kann. Hoffentlich hilft dies jemandem, der dasselbe tun möchte:

SCHRITT 1:

Fügen Sie mail.properties die folgenden Einstellungen hinzu:

mail.protocol=smtp
mail.Host=smtp.gmail.com
mail.port=465
mail.smtp.socketFactory.port=465
mail.smtp.auth=true
mail.smtp.starttls.enable=true
mail.smtp.debug=true
mail.smtp.starttls.required=true
mail.smtp.socketFactory.fallback=false
[email protected]
[email protected]
mail.password=my_password

Und dann in Ihrer mailConfiguration-Klasse, @Value sie in:

@Configuration
@PropertySource("classpath:mail.properties")
public class MailConfiguration {

    @Value("${mail.protocol}")
    private String protocol;
    @Value("${mail.Host}")
    private String Host;
    @Value("${mail.port}")
    private int port;
    @Value("${mail.smtp.socketFactory.port}")
    private int socketPort;
    @Value("${mail.smtp.auth}")
    private boolean auth;
    @Value("${mail.smtp.starttls.enable}")
    private boolean starttls;
    @Value("${mail.smtp.starttls.required}")
    private boolean startlls_required;
    @Value("${mail.smtp.debug}")
    private boolean debug;
    @Value("${mail.smtp.socketFactory.fallback}")
    private boolean fallback;
    @Value("${mail.from}")
    private String from;
    @Value("${mail.username}")
    private String username;
    @Value("${mail.password}")
    private String password;

    @Bean
    public JavaMailSender javaMailSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();

        Properties mailProperties = new Properties();
        mailProperties.put("mail.smtp.auth", auth);
        mailProperties.put("mail.smtp.starttls.enable", starttls);
        mailProperties.put("mail.smtp.starttls.required", startlls_required);
        mailProperties.put("mail.smtp.socketFactory.port", socketPort);
        mailProperties.put("mail.smtp.debug", debug);
        mailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        mailProperties.put("mail.smtp.socketFactory.fallback", fallback);

        mailSender.setJavaMailProperties(mailProperties);
        mailSender.setHost(Host);
        mailSender.setPort(port);
        mailSender.setProtocol(protocol);
        mailSender.setUsername(username);
        mailSender.setPassword(password);
        return mailSender;
    }
}

Bitte beachten Sie, dass mein Spring-Server SSL-fähig ist, weshalb ich Port 465 verwende. Verwenden Sie für SSL Port 465. Wenn Sie 487 verwenden, müssen Sie TLS verwenden.

SCHRITT 2:

Folgen Sie diesem Link und wählen Sie , um den Zugriff auf weniger sichere Apps zu aktivieren .

https://www.google.com/settings/security/lesssecureapps

SCHRITT 3:

Schalten Sie AVAST aus, wenn Sie es auf Ihrem PC haben. Der AVAST Mail Shield widerspricht dem Versenden von E-Mails. Wenn Sie es nicht ausschalten, wird die folgende Fehlermeldung angezeigt:

Servlet.service () für Servlet [DispatcherServlet] im Kontext mit Pfad [] hat eine Ausnahme ausgelöst [Anforderungsverarbeitung fehlgeschlagen; verschachtelte Ausnahme ist org.springframework.mail.MailSendException: Mail-Server-Verbindung fehlgeschlagen; verschachtelte Ausnahme ist javax.mail.MessagingException: Ausnahme Leseantwort; verschachtelte Ausnahme ist: javax.net.ssl.SSLHandshakeException: Sun.security.validator.ValidatorException: PKIX-Pfadaufbau fehlgeschlagen: Sun.security.provider.certpath.SunCertPathBuilderException: Es konnte kein gültiger Zertifizierungspfad zum angeforderten Ziel gefunden werden.

13
Simon

Damit Google Mail mit TLS oder SSL funktioniert:

Port für TLS/STARTTLS: 587
Port für SSL: 465

Beide sind Pflichtparameter sind javax.net.ssl.SSLSocketFactory, mail.smtp.socketFactory.fallback und mache mail.smtp.starttls.enable auf false.

<beans>
    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="Host"><value>smtp.gmail.com</value></property>
        <property name="port"><value>465</value></property>
        <property name="protocol"><value>smtp</value></property>
        <property name="username"><value>[email protected]</value></property>
        <property name="password"><value>XXXX</value></property>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">true</prop>
                <prop key="mail.smtp.starttls.enable">false</prop>
                <prop key="mail.smtp.quitwait">false</prop>
                <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
                <prop key="mail.smtp.socketFactory.fallback">false</prop>
                <prop key="mail.debug">true</prop>
            </props>
        </property>
    </bean>
    <bean id="mailMail" class="com.embitel.service.email.EmailService">
        <property name="mailSender" ref="mailSender" />
        <property name="simpleMailMessage" ref="customeMailMessage" />
    </bean>
    <bean id="customeMailMessage" class="org.springframework.mail.SimpleMailMessage">
        <property name="from" value="[email protected]" />
        <property name="to" value="[email protected]" />
        <property name="subject" value="Testing Subject Line for email senind.." />
        <property name="text">
            <value>
        <![CDATA[
            Dear %s,
            Mail Content : %s
        ]]>
            </value>
        </property>
    </bean>
</beans>

lief wie am Schnürchen!!!

5
Vinod Java JEE

Die einzige Eigenschaft, die für GMail benötigt wird, ist

<prop key="mail.smtp.starttls.enable">true</prop>
4
timomeinen

Irgendwann/zum ersten Mal verhindert Google die Anmeldung in Ihrem Konto durch eine Drittanbieteranwendung oder die Verwendung Ihres Codes. Wenn Sie sich in Ihrem Browser in Ihrem Konto anmelden, erhalten Sie die Meldung "Google verhindert einen verdächtigen Versuch, sich in Ihrem Konto anzumelden" (siehe Abbildung unten). enter image description here

klicken Sie auf "Was warst du?" und lassen Sie die Anmeldung zu.

4
Rakesh Soni

Die unten stehende Konfiguration (yaml-Format) hat nachher für mich funktioniert


spring.mail:
  Host: smtp.gmail.com
  port: 465
  protocol: smtp
  username: [email protected]
  password: abc
  test-connection: true
  properties:
    "mail.smtp.auth": true
    "mail.smtp.starttls.enable": true
    "mail.smtp.starttls.required": true
    "mail.smtp.socketFactory.class": javax.net.ssl.SSLSocketFactory
    "mail.debug": true

Hier ist die JavaConfig, die bei mir funktioniert hat:

    public JavaMailSender getJavaMailSender()
    {
        JavaMailSenderImpl sender = new JavaMailSenderImpl();
        sender.setProtocol("smtp");
        sender.setHost("smtp.gmail.com");
        sender.setPort(587);
        sender.setUsername("username");
        sender.setPassword("password");

        Properties mailProps = new Properties();
        mailProps.put("mail.smtps.auth", "true");
        mailProps.put("mail.smtp.starttls.enable", "true");
        mailProps.put("mail.smtp.debug", "true");

        sender.setJavaMailProperties(mailProps);

        return sender;
    }

Ich denke, Sie müssen Port 587 verwenden, damit der TLS funktioniert.

2
leeor

Das hat bei mir funktioniert :

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="Host" value="smtp.gmail.com" />
    <property name="port" value="465" />
    <property name="protocol" value="smtps" />
    <property name="username" value="[email protected]" />
    <property name="password" value="my_password" />
    <property name="javaMailProperties">
    <props>
        <prop key="mail.smtps.auth">true</prop>
    </props>
    </property>
</bean>

Weitere Informationen erhalten Sie vom Google-Support: http://support.google.com/mail/bin/answer.py?hl=de&answer=78799

1

Das scheint nicht wesentlich anders zu sein, aber vielleicht versuchen Sie:

<bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" >
    <property name="username" value="[email protected]" />
    <property name="password" value="XXX" />
    <property name="javaMailProperties">
    <props>
        <prop key="mail.smtp.user" value="[email protected]" />
        <prop key="mail.smtp.password" value="XXX" />
        <prop key="mail.smtp.Host">smtp.gmail.com</prop>
        <prop key="mail.smtp.port">587</prop>
        <prop key="mail.smtp.auth">true</prop>
        <prop key="mail.smtp.starttls.enable">true</prop>
    </props>
    </property>
</bean>
0
jsight

Ich war auch mit dieser Authentifizierungsausnahme konfrontiert und dies liegt an der Google Mail-Sicherheit. Öffnen Sie die folgende URL

https://www.google.com/settings/security/lesssecureapps

und aktivieren Sie die weniger Sicherheitsfunktion.

0
Hemant Nagpal

Sie sollten Ihre Absenderadresse angeben, entweder als <prop key="mail.smtp.from">[email protected]</prop> oder beim Erstellen einer Nachricht.

0
axtavt

Ich habe Ihre Frage gelöst.

wie ein asynchroner E-Mail-Dienst im Frühjahr implementiert wird

Beachten Sie, dass dies bei Feder 3 funktioniert, daher bin ich mir bei Feder 2 nicht sicher.

0
karl li