Отправка электронной почты через Java в учетной записи Gmail с двухсторонней аутентификацией - PullRequest
7 голосов
/ 24 декабря 2011

Я хочу создать функцию, которая может отправлять электронную почту любому указанному получателю (gmail).Проблема, с которой я сталкиваюсь, заключается в том, что моя аутентификация не проходит, когда я пытаюсь предоставить учетные данные, которые используют двухстороннюю аутентификацию в gmail.С учетной записью, не имеющей двухсторонней аутентификации, она работает нормально.Итак, что мне нужно сделать, чтобы все происходило при двухсторонней аутентификации?

Ниже приведен код, который я использую для отправки электронной почты.

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;
        }
    }

Ответы [ 2 ]

7 голосов
/ 24 декабря 2011

Создавая пароль для конкретного приложения в https://accounts.google.com/IssuedAuthSubTokens. Также ознакомьтесь с этим видео на YouTube о паролях для конкретных приложений.

2 голосов
/ 11 июля 2012

Для этого есть два решения:

  1. Вы можете сгенерировать специфичный для приложения пароль по ссылке, указанной "friek", т. Е. "https://accounts.google.com/IssuedAuthSubTokens" и используют сгенерированный специфичный для приложения пароль вместо вашего оригинального пароля . Я сделал это и он работает

или

  1. Причиной возникновения исключения (javax.mail.AuthenticationFailedException: 535-5.7.1 требуется пароль для конкретного приложения) является то, что вы, возможно, активировали двухэтапную проверку своей учетной записи Gmail. Если вы используете учетную запись, в которой вы не активируете двухэтапную проверку, вы можете отправить электронное письмо со своим оригинальным паролем. Я также попробовал это, и он работает нормально.
...