2015-07-30 15 views
21

In primo luogo, ho bisogno di dire che l'invio di e-mail con 1.2.0.RELEASE funziona benePrimavera Boot 1.2.5.RELEASE - Invio di e-mail tramite SMTP di Gmail

application.properties:

spring.mail.host = smtp.gmail.com 
spring.mail.username = *****@gmail.com 
spring.mail.password = **** 
spring.mail.properties.mail.smtp.auth = true 
spring.mail.properties.mail.smtp.socketFactory.port = 465 
spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory 
spring.mail.properties.mail.smtp.socketFactory.fallback = false 

pox.xml

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.2.0.RELEASE</version> 
    <relativePath/> 
</parent> 

.......

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-web</artifactId> 
</dependency> 

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-mail</artifactId> 
</dependency> 


Dopo aver cambiato versione genitore di 1.2.5.RELEASE l'invio di email non ha funzionato

Docs dice: Se spring.mail.host e le librerie pertinenti (come definito da spring-boot-starter-mail) sono disponibili, viene creato un JavaMailSender predefinito se nessuna exis ts.


Così ho aggiunto

<dependency> 
    <groupId>javax.mail</groupId> 
    <artifactId>mail</artifactId> 
    <version>1.4.7</version> 
</dependency> 

Non ha aiutato e poi ho sostituito a

<dependency> 
    <groupId>com.sun.mail</groupId> 
    <artifactId>javax.mail</artifactId> 
    <version>1.5.4</version> 
</dependency> 

Inoltre ho provato

spring.mail.host = smtp.gmail.com 
spring.mail.username = *****@gmail.com 
spring.mail.password = **** 
spring.mail.port = 465 

Risultato lo stesso.

Non è un problema creare e configurare manualmente @Bean. Ma voglio usare tutta la bellezza di Spring Boot.
Per favore, indicami i miei errori.

Grazie in anticipo

+0

Quindi qual è il messaggio di errore? – dunni

+0

@dunni, Non c'è un messaggio di errore.Il thread mittente si blocca semplicemente – InsFi

+0

Quindi hai un progetto di esempio che utilizza Spring Boot 1.2.0 e funziona. E poi si cambia in spring boot 1.2.5 e poi si rompe? Nulla è cambiato tra queste due versioni, per quanto posso vedere. Puoi condividere il progetto? –

risposta

34

Sembra che ci sia un cambiamento di regressione/comportamento in Java Mail. The change sia in 1.5.3 che in 1.5.4. La tua app funziona con Boot 1.2.0 poiché utilizza Java Mail 1.5.2. Fallisce con Boot 1.2.5 poiché utilizza Java Mail 1.5.4.

Il problema in 1.5.3+ sembra essere che il trasporto SMTP si connette sulla porta 465 e GMail si aspetta un handshake SSL. Java Mail pensa erroneamente che non stia usando SSL quindi non inizia mai l'handshake e il tentativo di connessione (alla fine) va in timeout. È possibile convincere Java Mail a fare la cosa giusta essendo espliciti sull'uso di SSL. Aggiungere il seguente a application.properties:

spring.mail.properties.mail.smtp.ssl.enable = true 
+0

Ha funzionato anche per me. Ho avuto un errore aggiuntivo a causa del mio antivirus. Una volta ho disabilitato la protezione della posta su di esso, il messaggio è stato inviato con successo – Juanal

+0

Questa risposta è stata molto utile. L'ho usato, insieme all'uso di "spring.mail.test-connection = true" di spring-boot, per risolvere rapidamente il mio problema. –

3

Sembra che è una regressione. Ho creato #3624 per indagare sul problema. Grazie per il progetto di esempio!

Problemi correlati