Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

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

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

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

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

transport.close();

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

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

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