11 Stimmen

Senden von E-Mails über Java in Google Mail-Konto mit Zwei-Wege-Authentifizierung

Ich möchte eine Funktion erstellen, die eine E-Mail an einen bestimmten Empfänger (gmail) senden kann. Das Problem, dem ich gegenüberstehe, ist, dass meine Authentifizierung fehlschlägt, wenn ich versuche, Anmeldeinformationen bereitzustellen, die die Zwei-Wege-Authentifizierung in Gmail verwenden. Mit einem Konto, das keine Zwei-Wege-Authentifizierung verwendet, funktioniert es gut. Was muss ich also tun, damit die Dinge mit aktivierter Zwei-Wege-Authentifizierung funktionieren?

Im Folgenden finden Sie den Code, den ich zum Senden von E-Mails verwende.

public static boolean sendMail(String fromMail, String fromPassword, String toMail, String message) {
        try {
            final String user = fromMail, password = fromPassword;
            Properties prop = new Properties();
            prop.setProperty("mail.smtp.host", "smtp.gmail.com");
            prop.setProperty("mail.smtp.port", "465");
            prop.setProperty("mail.smtp.auth", "true");
            prop.setProperty("mail.smtp.ssl.enable", "true");
//            prop.put("mail.debug", "true");

//            prop.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

            Session sess = Session.getDefaultInstance(prop, new Authenticator() {

                @Override
                protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
                    return new javax.mail.PasswordAuthentication(user, password);
                }
            });

//            Session sess=Session.getDefaultInstance(prop);

            sess.setDebug(true);

            Message msg = new MimeMessage(sess);

            msg.setFrom(new InternetAddress(fromMail));
            msg.setRecipient(Message.RecipientType.TO, new InternetAddress(toMail));
            msg.setText(message);
            msg.setContent(message, "text/html");

            Transport.send(msg);
            return true;
        } catch (MessagingException msgEx) {
            msgEx.printStackTrace();
            return false;
        }
    }

11voto

Friek Punkte 1533

Durch die Erstellung eines anwendungsspezifischen Passworts unter https://accounts.google.com/IssuedAuthSubTokens . Besuchen Sie auch dieses youtube-Video über anwendungsspezifische Passwörter.

2voto

Abhishek Aggarwal Punkte 305

Hierfür gibt es zwei Lösungen:

  1. Sie können das anwendungsspezifische Passwort über den von "friek" angegebenen Link generieren, d.h. "https://accounts.google.com/IssuedAuthSubTokens" und das generierte anwendungsspezifische Passwort anstelle Ihres ursprünglichen Passworts verwenden . Ich habe dies getan und es funktioniert

o

  1. Der Grund, warum die Exception (javax.mail.AuthenticationFailedException: 535-5.7.1 Application-specific password required) auftritt, ist, dass Sie möglicherweise die 2-Schritt-Verifizierung Ihres Gmail-Kontos aktiviert haben. Wenn Sie ein Konto verwenden, bei dem Sie die 2-Schritt-Verifizierung nicht aktiviert haben, können Sie die E-Mail mit Ihrem ursprünglichen Kennwort senden. Ich habe dies auch versucht und es funktioniert einwandfrei.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X