Je ne suis pas familier avec cette fonction pour envoyer du courrier en Java. Je reçois une erreur lors de l'envoi d'un courrier électronique pour réinitialiser un mot de passe. J'espère que vous pourrez me donner une solution.
Ci-dessous mon code:
public synchronized static boolean sendMailAdvance(String emailTo, String subject, String body)
{
String Host = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-ADDRESS");
String userName = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-USERNAME");
String password = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-PASSWORD");
String port = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-PORT");
String starttls = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-STARTTLS");
String socketFactoryClass = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-SOCKET-CLASS");
String fallback = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-ALLOW-FALLBACK");
try
{
Java.util.Properties props = null;
props = System.getProperties();
props.put("mail.smtp.user", userName);
props.put("mail.smtp.Host", Host);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.debug", "true");
if(!"".equals(port))
{
props.put("mail.smtp.port", port);
props.put("mail.smtp.socketFactory.port", port);
}
if(!"".equals(starttls))
props.put("mail.smtp.starttls.enable",starttls);
if(!"".equals(socketFactoryClass))
props.put("mail.smtp.socketFactory.class",socketFactoryClass);
if(!"".equals(fallback))
props.put("mail.smtp.socketFactory.fallback", fallback);
Session session = Session.getDefaultInstance(props, null);
session.setDebug(true);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(userName));
msg.setSubject(subject);
msg.setText(body, "ISO-8859-1");
msg.setSentDate(new Date());
msg.setHeader("content-Type", "text/html;charset=\"ISO-8859-1\"");
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(emailTo));
msg.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(Host, userName, password);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
return true;
}
catch (Exception mex)
{
mex.printStackTrace();
return false;
}
}
Lance l'erreur suivante:
DEBUG: setDebug: JavaMail version 1.4.1ea-SNAPSHOT
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.Sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: tentative de connexion à l'hôte "smtp.gmail.com", port 465, isSSL false 220 mx.google.com ESMTP m4sm5929870pbg.38 - gsmtp
DEBUG SMTP: connecté à l'hôte "smtp.gmail.com", port: 465
EHLO fatin
250-mx.google.com à votre service, [175.139.198.14]
TAILLE 250 35882577
250-8BITMIME
CONNEXION 250 AUTH PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN
CODE D'ETAT AMELIORE DE 250
250 CHUNKING
DEBUG SMTP: extension trouvée "SIZE", arg "35882577"
DEBUG SMTP: extension trouvée "8BITMIME", arg ""
DEBUG SMTP: extension trouvée "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN"
DEBUG SMTP: extension trouvée "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: extension trouvée "CHUNKING", arg ""
DEBUG SMTP: tentative d'authentification
AUTH LOGIN
334 VXNlcm5hbWU6
YWNjb3VudEBibG9vbWluZy5jb20ubXk =
334 UGFzc3dvcmQ6
Ymxvb21pbmc = 535-5.7.8 Le nom d'utilisateur et le mot de passe n'ont pas été acceptés. Pour en savoir plus, consultez la page 535 5.7.8 http://support.google.com/mail/bin/answer.py?answer=14257
m4sm5929870pbg.38 - gsmtp
[STDOUT] javax.mail.AuthenticationFailedException
[STDOUT] à javax.mail.Service.connect (Service.Java:319)
[STDOUT] à javax.mail.Service.connect (Service.Java:169)
[STDOUT] à com.vlee.util.mail.SendMail.sendMailAdvance (SendMail.Java:283)
[STDOUT] à com.vlee.servlet.ecommerce.DoMemberLogin.fnSendPwd (DoMemberLogin.Java:251)
[STDOUT] à com.vlee.servlet.ecommerce.DoMemberLogin.doPost (DoMemberLogin.Java:72)
Vous devriez changer le port en 587
, J'ai testé votre code et il fonctionne bien
Si l'erreur persiste, remplacez la variable de session par le code ci-dessous:
Session session = Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
});
Ce problème peut être dû à la protection du compte Gmail. Il suffit de cliquer sur le lien ci-dessous et de désactiver les paramètres de sécurité. Cela fonctionnera. https://www.google.com/settings/security/lesssecureapps
Par défaut, le compte Gmail est hautement sécurisé. Lorsque nous utilisons gmail smtp à partir d'un outil non gmail, les courriers électroniques sont bloqués. Pour tester dans notre environnement local, sécurisez votre compte gmail en tant que
La plupart des erreurs AuthenticationFieldException se produisent lorsque la tentative de connexion est empêchée, connectez-vous d'abord à votre compte gmail, puis accédez à l'écran https://www.google.com/settings/security/lesssecureapps et cochez-le. J'ai résolu ce genre de problème de cette façon.
Modifiez ceci (définir une application moins sécurisée): https://www.google.com/settings/security/lesssecureapps
Si vous vous connectez à votre compte Gmail à partir d'une nouvelle application ou d'un nouvel appareil, Google bloque peut-être cet appareil. Essayez de suivre ces étapes:
Pour protéger votre compte, Google peut rendre plus difficile la connexion à votre compte si nous soupçonnons que ce n’est pas vous. Par exemple, Google peut vous demander des informations supplémentaires en plus de votre nom d'utilisateur et de votre mot de passe si vous voyagez ou si vous essayez de vous connecter à votre compte depuis un nouvel appareil.
Accédez à https://g.co/allowaccess à partir d'un autre appareil que vous avez précédemment utilisé pour accéder à votre compte Google et suivez les instructions. Essayez de vous connecter à nouveau à partir de l'application bloquée.
Je reçois la même erreur depuis longtemps.
Quand j'ai changé le débogage de session en vrai
Session session = Session.getDefaultInstance(props, new GMailAuthenticator("[email protected]", "xxxxx"));
session.setDebug(true);
J'ai eu l'aide url https://support.google.com/mail/answer/78754 à partir de la console avec javax.mail.AuthenticationFailedException.
A partir des étapes du lien, j'ai suivi chaque étape. Lorsque j'ai modifié mon mot de passe avec un mélange de lettres, de chiffres et de symboles, le courrier électronique a été généré sans exception d'authentification.
Remarque: mon ancien mot de passe était plus moins sécurisé.
2 raisons possibles:
La solution qui fonctionne pour moi comporte deux étapes.
Premier pas
package com.student.mail;
import Java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
*
* @author jorge santos
*/
public class GoogleMail {
public static void main(String[] args) {
Properties props = new Properties();
props.put("mail.smtp.Host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("[email protected]","Silueta95#");
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("[email protected]"));
message.setSubject("Testing Subject");
message.setText("Test Mail");
Transport.send(message);
System.out.println("Done");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
Activer la sécurité gmail
https://myaccount.google.com/u/2/lesssecureapps?pli=1&pageId=none
Juste au cas où quelqu'un chercherait une solution à ce problème.
Les problèmes d’authentification peuvent être atténués en activant la vérification Google en deux étapes pour le compte utilisé et en créant un mot de passe spécifique à l’application. J'ai eu le même problème que l'OP. Activer 2 étapes a fonctionné.
J'ai eu ce problème aussi, mais la solution n'a rien à voir avec le codage. Assurez-vous de pouvoir vous connecter à gmail. Ping smtp.gmail.com. Si vous ne recevez pas de réponse, vérifiez les paramètres de votre pare-feu. Il pourrait également s'agir d'un problème de paramétrage de proxy.
trying to connect to Host "smtp.gmail.com", port 465, isSSL false
Vous avez mal paramétré votre smtp gmail. Gmail nécessite SSL. Veuillez consulter les tutoriels sur la manière d'envoyer un courrier électronique via Java via Gmail SMTP, par exemple: http://www.mkyong.com/Java/javamail-api-sending-email-via-via). -gmail-smtp-example /