Błąd Google SMTP: 454 4.7.0 Zbyt wiele prób logowania, spróbuj ponownie później
17
Odkryłem, że chociaż możliwe było używanie Gmaila / Google Apps jako serwera SMTP do użytku skryptowego, jeśli wysłano zbyt wiele wiadomości e-mail, zacząłem otrzymywać komunikaty o błędach:
SMTP Error: 454 4.7.0 Too many login attempts, please try again later.
Zwykle gdybym czekał godzinę lub dwie, mógłbym wysłać kolejne 100 e-maili, ale wkrótce znów napotkałbym ten sam komunikat o błędzie.
Odkryłem, że problem polegał na tym, że chociaż mieliśmy rekordy SPF dla naszych domen, nie mieliśmy rekordu DKIM powiązanego z naszą domeną. Aby dodać rekord DKIM do Google Apps, musisz wykonać następujące czynności:
Przejdź do konsoli administracyjnej
Kliknij „Google Apps”
Kliknij „Gmail”
Przewiń w dół, aż zobaczysz „Uwierzytelnij e-maila” i kliknij to
Wybierz domenę, do której chcesz dodać DKIM
Gdy zapyta, jakiego prefiksu chcesz użyć, po prostu użyj domyślnego „google”
Następnie zobaczysz rekord TXT w dwóch częściach, jeden kawałek ma domenę, a drugi rzeczywisty rekord TXT. Musisz przejść do ustawień DNS na serwerze dla swojej domeny i dodać ten rekord. Jeśli Twój panel sterowania DNS nie pozwala na dodanie domeny google._domainkey, po prostu spraw , aby domena była w pełni kwalifikowana google._domainkey.example.com.
Po wykonaniu tej czynności poświęć rekordowi DNS trochę czasu na propagację, a następnie kliknij „Rozpocznij uwierzytelnianie” w panelu administracyjnym Google Apps. Jeśli widzisz zielony znacznik wyboru, zrobiłeś to, a poczta e-mail powinna ponownie zacząć przepływać przez serwer SMTP.
Ratownik. Wygląda na to, że Gmail sprawdza autorytatywne serwery pod kątem rekordu TXT, więc nie powinieneś czekać na pełne propagowanie DNS - w przypadku większości zmian wprowadzonych w tych dniach za pomocą menedżera plików strefy DNS nie będziesz musiał czekać więcej niż kilka sekund, aby zmiana zaczęła obowiązywać.
JT Taylor
4
Nie należy uwierzytelniać każdego wysłanego e-maila.
Na początku procesu:
Session session = loadSession();
Transport transport = session.getTransport("smtp");
transport.connect("[email protected]", "password");
Następnie użyj obiektu transportu do wysłania każdej poczty bez rozpoczynania sesji:
Używając SMTP, gdy wysyłasz masową wiadomość e-mail, zaloguj się do każdej poczty, a następnie wyloguj się. Z tego powodu Google blokuje twoje połączenie. Dla mnie zadziałało ustawienie SMTPKeepAlive na wartość true.
Nie należy uwierzytelniać każdego wysłanego e-maila.
Na początku procesu:
Następnie użyj obiektu transportu do wysłania każdej poczty bez rozpoczynania sesji:
Po wysłaniu wszystkich wiadomości e-mail należy zamknąć połączenie:
źródło
rozwiązanie z @ victorpacheco3107 zadziałało dla mnie, oto co zrobiłem w Ruby:
źródło
Używając SMTP, gdy wysyłasz masową wiadomość e-mail, zaloguj się do każdej poczty, a następnie wyloguj się. Z tego powodu Google blokuje twoje połączenie. Dla mnie zadziałało ustawienie SMTPKeepAlive na wartość true.
źródło