Ich bin mit dieser Funktion zum Versenden von E-Mails in Java nicht vertraut. Beim Senden einer E-Mail zum Zurücksetzen eines Kennworts wird eine Fehlermeldung angezeigt. Hoffe du kannst mir eine Lösung geben.
Unten ist mein 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;
}
}
Löst folgenden Fehler aus:
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: Versuch, eine Verbindung zu Host "smtp.gmail.com", Port 465, isSSL false herzustellen 220 mx.google.com ESMTP m4sm5929870pbg.38 - gsmtp
DEBUG SMTP: Verbunden mit Host "smtp.gmail.com", Port: 465
EHLO fatin
250-mx.google.com zu Ihren Diensten, [175.139.198.14]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN
250-ENHANCEDSTATUSCODES
250 CHUNKING
DEBUG SMTP: Gefundene Erweiterung "SIZE", arg "35882577"
DEBUG SMTP: Gefundene Erweiterung "8BITMIME", arg ""
DEBUG SMTP: Gefundene Erweiterung "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN"
DEBUG SMTP: Erweiterung "ENHANCEDSTATUSCODES", arg "" gefunden
DEBUG SMTP: Gefundene Erweiterung "CHUNKING", arg ""
DEBUG SMTP: Versuch, sich zu authentifizieren
AUTH LOGIN
334 VXNlcm5hbWU6
YWNjb3VudEBibG9vbWluZy5jb20ubXk =
334 UGFzc3dvcmQ6
Ymxvb21pbmc = 535-5.7.8 Benutzername und Passwort werden nicht akzeptiert. Weitere Informationen erhalten Sie unter 535 5.7.8 http://support.google.com/mail/bin/answer.py?answer=14257
m4sm5929870pbg.38 - gsmtp
[STDOUT] javax.mail.AuthenticationFailedException
[STDOUT] unter javax.mail.Service.connect (Service.Java:319)
[STDOUT] unter javax.mail.Service.connect (Service.Java:169)
[STDOUT] unter com.vlee.util.mail.SendMail.sendMailAdvance (SendMail.Java:283)
[STDOUT] unter com.vlee.servlet.ecommerce.DoMemberLogin.fnSendPwd (DoMemberLogin.Java:251)
[STDOUT] unter com.vlee.servlet.ecommerce.DoMemberLogin.doPost (DoMemberLogin.Java:72)
Sie sollten den Port auf 587
Ändern. Ich habe Ihren Code getestet und er funktioniert einwandfrei
Wenn der Fehler weiterhin auftritt, ändern Sie die Sitzungsvariable in den folgenden Code:
Session session = Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
});
Möglicherweise liegt dieses Problem am Schutz des Google Mail-Kontos. Klicken Sie einfach auf den folgenden Link und deaktivieren Sie die Sicherheitseinstellungen. https://www.google.com/settings/security/lesssecureapps
Standardmäßig ist das Google Mail-Konto hochsicher. Wenn wir Google Mail SMTP aus einem anderen Tool als Google Mail verwenden, werden E-Mails blockiert. Machen Sie Ihr Google Mail-Konto zum Testen in unserer lokalen Umgebung weniger sicher als
Die meisten AuthenticationFieldException-Fehler treten auf, wenn Anmeldeversuche verhindert wurden. Melden Sie sich zuerst bei Google Mail an und rufen Sie https://www.google.com/settings/security/lesssecureapps auf und aktivieren Sie das Kontrollkästchen. Ich habe so ein Problem gelöst.
Ändern Sie dies (weniger sichere App festlegen): https://www.google.com/settings/security/lesssecureapps
Wenn Sie sich mit einer neuen Anwendung oder einem neuen Gerät bei Ihrem Google Mail-Konto anmelden, blockiert Google dieses Gerät möglicherweise. Versuchen Sie, die folgenden Schritte auszuführen:
Zum Schutz Ihres Kontos kann die Anmeldung in Ihrem Konto durch Google möglicherweise erschwert werden, wenn wir den Verdacht haben, dass Sie es nicht sind. Beispielsweise fordert Google möglicherweise neben Ihrem Nutzernamen und Passwort weitere Informationen an, wenn Sie auf Reisen sind oder wenn Sie versuchen, sich von einem neuen Gerät aus in Ihrem Konto anzumelden.
Rufen Sie https://g.co/allowaccess von einem anderen Gerät aus auf, mit dem Sie zuvor auf Ihr Google-Konto zugegriffen haben, und befolgen Sie die Anweisungen. Versuchen Sie erneut, sich über die blockierte App anzumelden.
Ich habe den gleichen Fehler für lange Zeit bekommen.
Als ich das Session-Debug auf true geändert habe
Session session = Session.getDefaultInstance(props, new GMailAuthenticator("[email protected]", "xxxxx"));
session.setDebug(true);
Ich habe die Hilfe-URL https://support.google.com/mail/answer/78754 von der Konsole zusammen mit javax.mail.AuthenticationFailedException erhalten.
Von den Schritten in der Verbindung folgte ich jedem Schritt. Als ich zu meiner Überraschung mein Passwort mit einer Mischung aus Buchstaben, Zahlen und Symbolen änderte, wurde die E-Mail ohne Authentifizierungsausnahme generiert.
Hinweis: Mein altes Passwort war weniger sicher.
2 mögliche Gründe:
Die Lösung, die für mich funktioniert, besteht aus zwei Schritten.
Erster Schritt
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);
}
}
}
Aktivieren Sie die Google Mail-Sicherheit
https://myaccount.google.com/u/2/lesssecureapps?pli=1&pageId=none
Nur für den Fall, dass jemand nach einer Lösung für dieses Problem sucht.
Die Authentifizierungsprobleme können durch Aktivieren der zweistufigen Google-Überprüfung für das verwendete Konto und Erstellen eines app-spezifischen Passworts behoben werden. Ich hatte das gleiche Problem wie das OP. Aktivierung in 2 Schritten funktioniert.
Ich hatte auch dieses Problem, aber die Lösung hatte nichts mit Codierung zu tun. Stellen Sie sicher, dass Sie eine Verbindung zu Google Mail herstellen können. Pingen Sie smtp.gmail.com. Wenn Sie keine Antwort erhalten, überprüfen Sie Ihre Firewall-Einstellungen. Dies kann auch ein Problem mit der Proxy-Einstellung sein.
trying to connect to Host "smtp.gmail.com", port 465, isSSL false
Sie haben eine falsche SMTP-Einstellung für Google Mail festgelegt. Google Mail erfordert SSL. In den Tutorials erfahren Sie, wie Sie E-Mails über Java über Gmail SMTP senden, z. B .: http://www.mkyong.com/Java/javamail-api-sending-email-via -gmail-smtp-example /