JavaMail с Gmail: 535-5.7.1 Имя пользователя и пароль не принимаются

Я получаю эту ошибку, когда пытаюсь отправить почту с помощью API JavaMail. Я уверен, что имя пользователя и пароль на 100% правильны. Учетная запись Gmail, с которой я подключаюсь, - это более старая учетная запись, потому что, по их словам, для работы с новыми учетными записями требуется время.

DEBUG SMTP RCVD: 535-5.7.1 Username and Password not accepted. Learn more at

535 5.7.1 http://mail.google.com/support/bin/answer.py?answer=14257 x35sm3011668
wfh.6

javax.mail.SendFailedException: Sending failed;
  nested exception is:
        javax.mail.AuthenticationFailedException
        at javax.mail.Transport.send0(Transport.java:218)
        at javax.mail.Transport.send(Transport.java:80)
        at Main.(Main.java:41)
        at Main.main(Main.java:51)

и это мой код:

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

public class Main
{
    String  d_email = "[email protected]",
            d_password = "pass",
            d_host = "smtp.gmail.com",
            d_port  = "465",
            m_to = "[email protected]",
            m_subject = "Testing",
            m_text = "testing email.";

    public Main()
    {
        Properties props = new Properties();
        props.put("mail.smtp.user", d_email);
        props.put("mail.smtp.host", d_host);
        props.put("mail.smtp.port", d_port);
        props.put("mail.smtp.starttls.enable","true");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.debug", "true");
        props.put("mail.smtp.socketFactory.port", d_port);
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");

        SecurityManager security = System.getSecurityManager();

        try
        {
            Authenticator auth = new SMTPAuthenticator();
            Session session = Session.getInstance(props, auth);
            session.setDebug(true);
            MimeMessage msg = new MimeMessage(session);
            msg.setText(m_text);
            msg.setSubject(m_subject);
            msg.setFrom(new InternetAddress(d_email));
            msg.addRecipient(Message.RecipientType.TO, new InternetAddress(m_to));
            Transport.send(msg);
        }
        catch (Exception mex)
        {
            mex.printStackTrace();
        } 
    }

    public static void main(String[] args)
    {
        Main blah = new Main();
    }

    private class SMTPAuthenticator extends javax.mail.Authenticator
    {
        public PasswordAuthentication getPasswordAuthentication()
        {
            return new PasswordAuthentication(d_email, d_password);
        }
    }
}

Ответ 1

Данный фрагмент кода отлично работает на моей учетной записи Gmail, поэтому эта проблема лежит в другом месте. Вы переходили по ссылке, указанной в сообщении об ошибке? Содержит следующие подсказки:

  • Убедитесь, что вы ввели свой полный адрес электронной почты (например, [email protected])
  • Повторно введите пароль, чтобы убедиться, что он правильный. Имейте в виду, что пароли чувствительны к регистру.
  • Убедитесь, что ваш почтовый клиент не настроен на проверку новой почты слишком часто. Если ваш почтовый клиент проверяет наличие новых сообщений чаще, чем раз в 10 минут, ваш клиент может неоднократно запрашивать ваше имя пользователя и пароль.

Особенно важен последний пункт. Гугл очень строг в этом. Если вы пытаетесь подключить Gmail, например, более 10 раз в минуту программным путем, возможно, вы уже заблокированы. Имейте немного терпения, через некоторое время он разблокируется.

Если вы хотите больше свободы при отправке почты, я рекомендую поискать выделенный почтовый хост или настроить свой собственный почтовый сервер, такой как Apache James или Microsoft Exchange. Я уже подробно ответил на это в одном из ваших предыдущих вопросов.

Ответ 2

У меня была та же проблема: я ссылаюсь на эту ссылку, я следовал ниже шагов, это работало для меня.

По умолчанию учетная запись Gmail надежно защищена. Когда мы используем Gmail SMTP из не Gmail инструмент, электронная почта блокируется. Чтобы протестировать в нашей локальной среде, сделайте свою учетную запись Gmail менее безопасной, так как

  1. Войдите в Gmail.
  2. Откройте URL-адрес как https://www.google.com/settings/security/lesssecureapps.
  3. Выберите "Включить"

Ответ 3

Я столкнулся с точно такой же проблемой, для меня причина в том, что я включил двухэтапную проверку в моей учетной записи Gmail.

После генерации нового пароля для конкретного приложения и использования его в моем java-приложении эта проблема "535 5.7.1" исчезла.

Вы можете создать новый пароль для конкретного приложения, следуя этому официальному руководству Google.

Ответ 4

Я столкнулся с той же проблемой, хотя мои имя пользователя и пароль были правильными, но после некоторого исследования я смог отправить электронную почту через приложения, включив опцию Менее безопасный доступ к приложениям в моей учетной записи Gmail. Вы можете найти эту функцию под опцией безопасности в левом меню.

Ссылки по теме:

Ответ 5

У меня такое же сообщение об ошибке, и именно так я решил проблему,

Создайте пароль для приложения: вот как мы можем сгенерировать пароль приложения,

1. Visit your App passwords page. You may be asked to sign in to your Google Account.

2. At the bottom, click Select app and choose the app you’re using.
Click Select device and choose the device you’re using.

3. Select Generate.

4. Follow the instructions to enter the App password (the 16 character code in the yellow bar) on your device.

5. Select Done.

Я работал для загрузочного приложения Spring, и я получил пароль для приложения, sadsadaffferere для адреса электронной почты, [email protected]. Поэтому мне нужно настроить свойства приложения следующим образом:

# the email settings
# ------------------
spring.mail.host=smtp.gmail.com
[email protected]
spring.mail.password=sadsadaffferere
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.socketFactory.port=465
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.socketFactory.fallback=false
[email protected]

После этого все отлично работает

Ответ 6

Если те же учетные данные работали ранее и перестали работать, то основной причиной этой проблемы является несоответствие пароля/изменение на клиенте gmail, а не обновление на Jenkins или другом сервере CI. Если это не так, проверьте по причинам, указанным @BalusC