Ошибка Google SMTP: 454 4.7.0 Слишком много попыток входа в систему, повторите попытку позже


17

Я обнаружил, что, хотя можно использовать Gmail / Google Apps в качестве SMTP-сервера для использования по сценарию, если отправлено слишком много писем, я начал получать сообщения об ошибках:

SMTP Error: 454 4.7.0 Too many login attempts, please try again later.

Обычно, если бы я подождал час или два, я мог бы отправить еще 100 писем или около того, но вскоре я снова столкнулся бы с тем же сообщением об ошибке.

Ответы:


12

Я обнаружил, что проблема была в том, что, хотя у нас были настроены записи SPF для наших доменов, у нас не было записи DKIM, связанной с нашим доменом. Чтобы добавить запись DKIM в Google Apps, необходимо сделать следующее:

  • Перейти к консоли администратора
  • Нажмите на "Google Apps"
  • Нажмите на "Gmail"
  • Прокрутите вниз, пока не увидите «Аутентификация электронной почты» и нажмите
  • Выберите домен, к которому вы хотите добавить DKIM
  • Когда он спросит, какой префикс вы хотите использовать, просто используйте по умолчанию "Google"

Затем вы увидите запись TXT из двух частей: одна часть имеет домен, а другая - фактическую запись TXT. Вам нужно зайти в настройки DNS на своем сервере для своего домена и добавить эту запись. Если ваша панель управления DNS не позволяет вам добавить домен google._domainkey, просто сделайте домен полностью квалифицированным, как google._domainkey.example.com.

После этого дайте DNS-записи немного времени для распространения, а затем нажмите «Начать аутентификацию» в панели администратора Служб Google. Если вы видите зеленую галочку, вы сделали это, и электронная почта должна снова начать проходить через SMTP-сервер.


Что если вы не контролируете DNS-сервер?
Измаил

1
Спасатель. Похоже, что gmail проверит авторитетные серверы на наличие записи TXT, поэтому вам не придется ждать полного распространения DNS - для большинства изменений, внесенных в эти дни с помощью файлового менеджера зоны DNS, вам не придется ждать больше, чем несколько секунд, чтобы изменения вступили в силу.
JT Taylor

4

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

В начале процесса:

Session session = loadSession();
Transport transport = session.getTransport("smtp");
transport.connect("example@gmail.com", "password");

После этого используйте транспортный объект для отправки каждого письма без запуска сеанса:

transport.sendMessage(message, message.getAllRecipients());

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

transport.close();

0

Решение от @ victorpacheco3107 работало для меня, вот что я сделал в ruby:

settings = {
  address:        "smtp.gmail.com",
  port:           587,
  domain:         "mydomain.com",
  user_name:      "user@mydomain.com",
  password:       "password",
  authentication: "plain"
}

smtp_conn = Net::SMTP.new(settings[:address], settings[:port])
smtp_conn.enable_starttls_auto
smtp_conn = smtp_conn.start(settings[:domain],
                            settings[:user_name],
                            settings[:password],
                            settings[:authentication])
Mail.defaults do
  delivery_method :smtp_connection, { :connection => smtp_conn }
end

# send mails..
mail = Mail.new
mail.to('...')
# more mail stuff..
mail.deliver!

# after all mails are sent, end session
smtp_conn.finish

0

Используя SMTP, когда вы отправляете массовую электронную почту, он входит в систему с каждой отдельной почтой, а затем выходит из системы. Из-за этого googles блокирует вашу связь. То, что сработало для меня, это установить SMTPKeepAlive в true.


1
Уже было предложено не входить в систему для каждого письма.
Ральф Фридл
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.