Errore SMTP di Google: 454 4.7.0 Troppi tentativi di accesso, riprovare più tardi


17

Ho scoperto che mentre era possibile utilizzare Gmail / Google Apps come server SMTP per l'uso con script, se sono state inviate troppe e-mail ho iniziato a ricevere messaggi di errore:

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

Di solito se avessi aspettato un'ora o due avrei potuto inviare altre 100 e-mail o giù di lì, ma avrei presto incontrato di nuovo lo stesso messaggio di errore.

Risposte:


12

Ho scoperto che il problema era che sebbene avessimo impostato i record SPF per i nostri domini, non avevamo un record DKIM associato al nostro dominio. Per aggiungere un record DKIM in Google Apps, devi effettuare le seguenti operazioni:

  • Vai all'Admin Console
  • Fai clic su "Google Apps"
  • Fai clic su "Gmail"
  • Scorri verso il basso fino a visualizzare "Autentica email" e fai clic su di esso
  • Seleziona il dominio a cui desideri aggiungere DKIM
  • Quando ti viene chiesto quale prefisso desideri utilizzare, utilizza semplicemente l'impostazione predefinita di "google"

Vedrai quindi un record TXT in due parti, una parte ha il dominio e l'altra ha il record TXT effettivo. Devi accedere alle impostazioni DNS sul tuo server per il tuo dominio e aggiungere questo record. Se il tuo pannello di controllo DNS non ti consente di aggiungere il dominio di google._domainkey, semplicemente rendere il dominio pienamente qualificato come google._domainkey.example.com.

Dopo aver effettuato l'operazione, concedi un po 'di tempo alla propagazione del record DNS, quindi fai clic su "Avvia autenticazione" nel pannello di amministrazione di Google Apps. Se vedi un segno di spunta verde, l'hai fatto e l'e-mail dovrebbe ricominciare a fluire attraverso il server SMTP.


Cosa succede se non si ha il controllo del server DNS?
Ismaele

1
Un salvavita. Sembra che Gmail controllerà i server autorevoli per il record TXT, quindi non dovresti aspettare la propagazione DNS completa - per la maggior parte delle modifiche apportate in questi giorni attraverso un file manager della zona DNS, non dovrai aspettare più di un paio secondi per rendere effettiva la modifica.
JT Taylor,

4

Non devi autenticarti per ogni email che dovresti inviare.

All'inizio del processo:

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

Successivamente, utilizzare l'oggetto di trasporto per inviare ogni messaggio senza avviare la sessione:

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

Dopo aver inviato tutte le email, dovresti chiudere la connessione:

transport.close();

0

la soluzione di @ victorpacheco3107 ha funzionato per me, questo è quello che ho fatto in 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

Utilizzando SMTP quando si inviano e-mail in blocco, si accede con ogni singola e quindi si disconnette. Per questo motivo Google blocca la tua connessione. Quello che ha funzionato per me è impostare SMTPKeepAlive su true.


1
È già stato suggerito di non accedere per ogni mail.
RalfFriedl,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.