J'essaie de trouver les propriétés correctes à utiliser pour se connecter au serveur SMTP Gmail à l'aide de la classe JavaMailSenderImpl.
Permettez-moi d'abord de dire que j'ai essayé l'approche trouvée ici . Cela a bien fonctionné. Mais lorsque j'ai essayé la configuration ci-dessous, avec les mêmes informations d'authentification, j'ai reçu une exception javax.mail.AuthenticationFailedException.
Ma configuration actuelle ressemble à ceci.
<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>
Pourquoi ai-je toujours cette exception javax.mail.AuthenticationFailedException si je sais que mes informations d'identification sont correctes.
Voici mon code mis à jour basé sur les réponses ci-dessous. Je reçois toujours la même exception.
<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>
Cela a fonctionné pour moi:
<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>
Le vrai truc pour moi s'est avéré être que la valeur "protocole" doit être "smtp" (pas "smtps").
J'ai eu du mal pendant une heure à trouver les bons paramètres pour envoyer un e-mail à partir de Gmail à l'aide de javamailsender et je l'ai finalement fait. Je poste ceci car je ne trouve pas d'exemple complet à envoyer via gmail avec javamailsender donc j'espère que cela aidera quelqu'un qui veut faire la même chose:
ÉTAPE 1:
Ajoutez les paramètres suivants à 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
Et puis dans votre classe mailConfiguration, @Valuez-les dans:
@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;
}
}
Veuillez noter que mon serveur Spring est compatible SSL, c'est pourquoi j'utilise le port 465. Pour SSL, utilisez le port 465. Si vous utilisez 487, vous devez utiliser TLS.
ÉTAPE 2:
En suivant ce lien et choisissez d'activer l'accès aux applications moins sécurisées.
https://www.google.com/settings/security/lesssecureapps
ÉTAPE 3:
Désactivez AVAST si vous l'avez sur votre PC. AVAST Mail Shield entre en conflit avec l'envoi d'e-mails. Si vous ne le désactivez pas, vous obtiendrez l'erreur suivante:
Servlet.service () pour servlet [dispatcherServlet] dans le contexte avec le chemin [] a levé l'exception [Échec du traitement de la demande; l'exception imbriquée est org.springframework.mail.MailSendException: la connexion au serveur de messagerie a échoué; l'exception imbriquée est javax.mail.MessagingException: réponse de lecture d'exception; l'exception imbriquée est: javax.net.ssl.SSLHandshakeException: Sun.security.validator.ValidatorException: la création du chemin PKIX a échoué: Sun.security.provider.certpath.SunCertPathBuilderException: impossible de trouver un chemin de certification valide vers la cible demandée.
Pour que Gmail fonctionne avec TLS ou SSL:
Port pour TLS/STARTTLS: 587
Port pour SSL: 465
Les deux paramètres obligatoires sont javax.net.ssl.SSLSocketFactory
, mail.smtp.socketFactory.fallback
et fais mail.smtp.starttls.enable
à faux.
<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>
travaillé comme un charme !!!
La seule propriété requise pour GMail est
<prop key="mail.smtp.starttls.enable">true</prop>
Parfois/pour la première fois, Google empêche la connexion à votre compte par une application tierce ou en utilisant votre code. lorsque vous vous connecterez à votre compte dans le navigateur, vous recevrez un message "Google empêche une tentative suspecte de vous connecter à votre compte" voir la capture d'écran ci-dessous.
cliquez sur "Était-ce vous?" et autorisez la connexion.
La configuration ci-dessous (format yaml) a fonctionné pour moi aprè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
Voici le javaConfig qui a fonctionné pour moi:
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;
}
Je pense que vous devez utiliser le port 587 pour que le TLS fonctionne.
Cela a fonctionné pour moi :
<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>
Consultez le support Google pour plus d'informations: http://support.google.com/mail/bin/answer.py?hl=en&answer=78799
Cela ne semble pas très différent, mais essayez peut-être:
<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>
J'étais également confronté à cette exception d'authentification et cela est dû à la sécurité de Gmail. Ouvrez l'url suivante
https://www.google.com/settings/security/lesssecureapps
et activer la fonction de sécurité moins.
Vous devez spécifier votre adresse "de", soit comme <prop key="mail.smtp.from">[email protected]</prop>
, ou lors de la création d'un message.
J'ai résolu votre question.
comment implémenter un service de messagerie asynchrone au printemps
Remarque, cela fonctionne sur le ressort 3, donc je ne suis pas sûr avec le ressort 2.