SMTP Google Apps Oauth2 - проблема с ретрансляцией

Я пытаюсь отправить почту, подключившись к SMTP-серверу Google с использованием механизма oAuth2.

public static Transport connectToSmtp(String smtpServer, int port, String email, String authToken, boolean isDebug, MimeMessage mimeMsg)
     throws Exception
{
    Properties props = new Properties();
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.starttls.required", "true");
    props.put("mail.smtp.sasl.enable", "true");
    props.put("mail.smtp.sasl.mechanisms", "XOAUTH2");
    props.put("mail.imaps.sasl.mechanisms.oauth2.oauthToken", authToken);
    Session session = Session.getInstance(props);
    session.setDebug(isDebug);
    final String emptyPassword = "";
    Transport transport = session.getTransport("smtp");
    transport.connect(smtpServer, port, email, emptyPassword);
    try
    {
        transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());
    }
    catch (Exception e)
    {
        logger.log(Level.WARNING, "Exception Occured : ", e);
    }
    return transport;
}

Идентификатор клиента и секрет моего приложения:

ID - 345101 * -i6ki * 4tk1sms.apps.googleusercontent.com

Секрет - e6NHB * - eZ-r k

Приведенный выше код вызвал следующую ошибку:

javax.mail.AuthenticationFailedException: 535-5.7.8 Имя пользователя и пароль не приняты. Подробнее см. На странице 535 5.7.8 https://support.google.com/mail/answer/14257 o135sm276925ith.4 - gsmtp

Сервер Smtp: aspmx.l.google.com, порт: 25

Отредактировано:

Я изменил приведенную ниже информацию для учетной записи Google App, к которой я пытаюсь подключиться, и указанное выше исключение было удалено:

  1. Нет двухэтапной аутентификации

  2. Разрешить менее безопасные приложения «Безопасность» -> «Основные настройки» -> «Перейти к настройкам для менее безопасных приложений» -> «Разрешить пользователям управлять своим доступом к менее безопасным приложениям»

Но после очистки вышеуказанного исключения. У меня есть еще одно исключение.

com.sun.mail.smtp.SMTPSendFailedException: 550-5.7.1 Недействительные учетные данные для ретранслятора [121. . .2]. IP-адрес, который вы зарегистрировали в службе SMTP Relay Google Apps, не соответствует домену учетной записи, с которой отправляется это электронное письмо. Если вы пытаетесь ретранслировать почту из домена, который не зарегистрирован в вашей учетной записи Googles Apps или имеет пустой конверт, вы должны настроить свой почтовый сервер на использование SMTP AUTH для идентификации отправляющего домена или для представления одного из ваших доменов. имена в команде HELO или EHLO. Для получения дополнительной информации посетите https://support.google.com/a/answer/6140680#invalidcred f65sm341248ith.1 - gsmtp;

Поэтому я изменил следующие настройки:

Приложения> Google Apps> Gmail> Настройки Gmail> Расширенные настройки

Служба ретрансляции SMTP

  • Разрешенные отправители: любые адреса (не рекомендуется)
  • Принимать почту только с указанных IP-адресов: Нет
  • Требовать аутентификацию SMTP: Да
  • Требовать шифрование TLS: Нет

Даже после попытки вышеуказанного изменения выдается то же исключение. Пожалуйста помоги.


person fury.slay    schedule 24.01.2017    source источник
comment
Я не зарегистрировал IP-адрес для аутентификации. Вместо этого предоставил аутентификацию как конфигурацию SMTP. Позже, когда я добавил еще одну настройку ретрансляции SMTP с аутентификацией в качестве IP-адреса и дал 121. *. *. 2. Это сработало. У меня вопрос, почему он не работал с аутентификацией SMTP?   -  person fury.slay    schedule 24.01.2017


Ответы (1)


Простую аутентификацию и OAuth2 необходимо различать в объекте Транспорт, который отправляет фактические почтовые данные на SMTP-сервер. Это делается в JavaMail с параметром пароля в Transport.connect ().

Если в приведенном выше коде пароль задан как null, то Java MailClient обрабатывает аутентификацию как OAuth, а не как обычную аутентификацию.

Итак, код должен быть

final String emptyPassword = null;

В ответ на комментарий:
Если аутентификация задана как IP-адрес, то указанные имя пользователя и пароль не проверяются. Вместо этого IP-адрес, с которого происходит соединение, служит в качестве аутентификации.
Это причина, по которой сработал тот же код, когда вы добавили IP-адрес отправителя в настройки почты ретрансляции GApps и выбрали тип аутентификации в качестве IP-адреса.

person fury.slay    schedule 24.01.2017