Помилка 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 Apps. Якщо ви бачите зелену галочку, ви це зробили, і електронна пошта повинна знову почати надходити через 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 працювало для мене, ось що я робив у рубіні:

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 на істину.


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