starter mkyong mail javamailsender example java spring gmail

mkyong - spring mail sender java config



Cómo configurar Spring JavaMailSenderImpl para Gmail (12)

Aquí está el javaConfig que funcionó 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 debes usar el puerto 587 para que el TLS funcione.

Estoy tratando de encontrar las propiedades correctas para usar para conectarme al servidor SMTP de Gmail usando la clase JavaMailSenderImpl.

Permítanme primero decir que probé el enfoque que se encuentra 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 obteniendo esta javax.mail.AuthenticationFailedException si sé que mis credenciales son correctas?

Actualizar

Aquí está mi código actualizado basado en 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>


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


En algún momento / primera vez, google evita que cualquier aplicación de terceros inicie sesión en su cuenta o utilice su código. cuando inicie sesión en su cuenta en el navegador, recibirá el mensaje " Google evita un intento sospechoso de iniciar sesión en su cuenta ", consulte la captura de pantalla a continuación.

haga clic en "Was it you" y permita el inicio de sesión.


Esto funcionó para mí :

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

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


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").


Esto no parece ser significativamente diferente, pero quizás intente:

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



La única propiedad necesaria para GMail es

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


La configuración a continuación (formato yaml) funcionó para mí después

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


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 publicando esto porque no puedo encontrar un ejemplo completo para enviar a través de gmail con javamailsender, así que espero que esto ayude a alguien que quiera hacer lo mismo:

PASO 1:

Agregue la siguiente configuración a mail.properties:

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 de configuración de correo, @Value 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 Spring está habilitado para SSL, por eso estoy usando el puerto 465. Para SSL, use el puerto 465. Si está usando 487, debe usar TLS.

PASO 2:

Sigue este enlace y elige activar el acceso a aplicaciones menos seguras.

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

PASO 3:

Desactiva AVAST si lo tienes en tu PC. AVAST Mail Shield entra en conflicto con el envío de correos electrónicos. Si no lo desactivas, obtendrás el siguiente error:

Servlet.service () para servlet [dispatcherServlet] en contexto con path [] lanzó excepción [Falló el proceso de solicitud; la excepción anidada es org.springframework.mail.MailSendException: Falló la conexión del servidor de correo; la excepción anidada es javax.mail.MessagingException: respuesta de lectura de excepción; la excepción anidada es: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: no se puede encontrar una ruta de certificación válida para el objetivo solicitado.


Para que Gmail trabaje con TLS o SSL:

Puerto para TLS / STARTTLS: 587
Puerto para SSL: 465

Ambos son parámetros de manditory son javax.net.ssl.SSLSocketFactory , mail.smtp.socketFactory.fallback y make mail.smtp.starttls.enable en 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!!!