Error de Google SMTP: 454 4.7.0 Demasiados intentos de inicio de sesión, intente nuevamente más tarde


17

Descubrí que si bien era posible usar Gmail / Google Apps como un servidor SMTP para uso con script, si se enviaban demasiados correos electrónicos, comencé a recibir mensajes de error:

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

Por lo general, si esperaba una o dos horas, podría enviar otros 100 correos electrónicos más o menos, pero pronto volvería a encontrarme con el mismo mensaje de error.

Respuestas:


12

Descubrí que el problema era que, aunque teníamos registros SPF configurados para nuestros dominios, no teníamos un registro DKIM asociado a nuestro dominio. Para agregar un registro DKIM en Google Apps, debe hacer lo siguiente:

  • Ir a la Consola de administración
  • Haga clic en "Google Apps"
  • Haga clic en "Gmail"
  • Desplácese hacia abajo hasta que vea "Autenticar correo electrónico" y haga clic en eso
  • Seleccione el dominio al que desea agregar DKIM
  • Cuando le pregunte qué prefijo desea usar, simplemente use el valor predeterminado de 'google'

Luego verá un registro TXT en dos partes, una pieza tiene el dominio y la otra tiene el registro TXT real. Debe ingresar a la configuración de DNS en su servidor para su dominio y agregar este registro. Si su panel de control de DNS no le permite agregar el dominio google._domainkey, simplemente haga que el dominio sea totalmente calificado google._domainkey.example.com.

Después de hacer esto, dele al registro DNS un poco de tiempo para propagarse y luego haga clic en "Iniciar autenticación" en el panel de administración de Google Apps. Si ve una marca de verificación verde, lo ha hecho, y el correo electrónico debería comenzar a fluir nuevamente a través del servidor SMTP.


¿Qué pasa si no tienes el control del servidor DNS?
Ismael

1
Un salvavidas. Parece que gmail verificará los servidores autorizados para el registro TXT, por lo que no debería tener que esperar la propagación completa de DNS; para la mayoría de los cambios realizados en estos días a través de un administrador de archivos de zona DNS, no tendrá que esperar más que unos pocos segundos para que el cambio surta efecto.
JT Taylor

4

No debe autenticarse para cada correo electrónico que debe enviar.

Al comienzo del proceso:

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

Después, use el objeto de transporte para enviar cada correo sin iniciar sesión:

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

Después de enviar todos los correos electrónicos, debe cerrar la conexión:

transport.close();

0

La solución de @ victorpacheco3107 funcionó para mí, esto es lo que hice en 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

Al usar SMTP cuando envía un correo electrónico masivo, inicie sesión con cada correo y luego cierre sesión. Debido a que Google bloquea tu conexión. Lo que funcionó para mí es establecer SMTPKeepAlive en verdadero.


1
Ya se ha sugerido no iniciar sesión para cada correo.
RalfFriedl
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.