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>
He resuelto tu pregunta.
cómo implementar un servicio de correo electrónico asíncrono en primavera
Tenga en cuenta que esto funciona en la primavera 3, así que no estoy seguro con la primavera 2.
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
- Inhabilité la autenticación de 2 factores https://support.google.com/accounts/answer/1064203?hl=en&ref_topic=7189195
- He habilitado aplicaciones menos seguras https://www.google.com/settings/security/lesssecureapps
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!!!
También me enfrentaba a esta excepción de autenticación y esto se debe a la seguridad de gmail. Abra la siguiente URL
https://www.google.com/settings/security/lesssecureapps
y habilite la función de menos seguridad.