2010-01-06 9 views
29

Estoy tratando de encontrar las propiedades correctas para usar para conectar con el servidor SMTP de Gmail utilizando la clase JavaMailSenderImpl.Cómo configurar Spring MandaMailSenderImpl para Gmail

Déjame decir primero que he intentado el enfoque encontrado here. Esto funcionó bien. Pero cuando probé la configuración debajo de esa publicación con la misma información de autenticación, recibí una javax.mail.AuthenticationFailedException.

Mi configuración actual se ve así.

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

¿Por qué sigo recibiendo este javax.mail.AuthenticationFailedException si sé que mis credenciales son correctas.

actualización

Aquí está mi código actualizada en base a las respuestas a continuación. Todavía estoy recibiendo la misma excepción.

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

Hay un ejemplo de trabajo en: http://www.mkyong.com/spring/spring-sending-e-mail-via-gmail-smtp-server-with-mailsender/ –

+0

He resuelto su pregunta. http: // stackoverflow.com/questions/17786132/how-to-implements-an-async-email-service-in-spring –

Respuesta

0

Esto no parece muy diferente, pero quizás Proveedores:

<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

Lo he intentado antes sin suerte. También probé la propiedad mail.smtp.passwd solo para patadas. – Andrew

0

debe indicar su dirección "De", ya sea como <prop key="mail.smtp.from">[email protected]</prop>, o al crear un mensaje.

+0

Lo estaba configurando al crear el mensaje, pero también he agregado la propiedad en mi publicación actualizada. – Andrew

27

Esto funcionó para mí:

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

El verdadero truco para mí resultó ser que el valor de "protocolo" tiene que ser "SMTP" (no "smtps").

+0

tnx hombre, eso es útil –

+0

@Ken funcionó para mí, gracias. – MikeNereson

+0

ya que estoy tercero en la fila aquí, ¡gracias triple! –

4

La única propiedad necesaria para Gmail es

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

Esto funcionó para mí:

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

Ver Google para más información: http://support.google.com/mail/bin/answer.py?hl=en&answer=78799

+0

mail.smtps.auth no es correcto. ver el comentario de Kens. – vvursT

+0

@vvursT Como dije en la publicación: funcionó ** para mí **. Yo mantengo. La solución de Ken (es decir, el uso de 'smtp' en lugar de' smtps') no. –

4

En algún momento/primera vez que Google prevenir el inicio de sesión en su cuenta mediante una aplicación de terceros o el uso de su código. cuando inicie sesión en su cuenta en el navegador, obtendrá un mensaje "Google evita un intento sospechoso de iniciar sesión en su cuenta" vea la captura de pantalla a continuación. . enter image description here

clic en el "¿Era usted" y permitir que el signo en

5

Para Gmail para trabajar con TLS o SSL:

Port for TLS/STARTTLS: 587
Port for SSL: 465

Ambos son parámetro de manditory son javax.net.ssl.SSLSocketFactory, mail.smtp.socketFactory.fallback y crea mail.smtp.starttls.enable a falso.

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

trabajado como un encanto!

2

Aquí está la javaConfig que trabajó para mí:

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

Creo que se necesita para usar el puerto 587 para el TLS para trabajar.

8

Luché durante una hora para encontrar la configuración correcta para enviar un correo electrónico desde Gmail usando javamailsender y finalmente lo hice. Estoy publicar esto ya que no puedo encontrar un ejemplo completo para enviar a través de Gmail con javamailsender y espero que esto ayude a alguien que quieren hacer lo mismo:

PASO 1:

Añadir los siguientes ajustes de correo. propiedades:

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 

Y luego en su clase mailConfiguration, @Valor en:

@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; 
    } 
} 

Tenga en cuenta que mi servidor de primavera es SSL habilitado, por eso estoy usando el puerto 465. Para SSL, use el puerto 465. Si usa 487, debe usar TLS.

PASO 2:

Siguiendo este enlace y elegir a su vez en acceso a aplicaciones menos seguras.

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

PASO 3:

Apagar AVAST si lo tiene en su PC. AVAST Mail Shield entra en conflicto con el envío de correos electrónicos. Si no lo apaga, obtendrá el siguiente error:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Exception reading response; nested exception is: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.

+0

Su implementación es dinámica y eso es lo que necesitaba. Mejor respuesta – SAM

+0

una pequeña corrección por cierto, el puerto tls es 587 – SAM

0

La configuración de abajo (formato yaml) trabajado para mí después de


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