Erro SMTP do Google: 454 4.7.0 Muitas tentativas de login, tente novamente mais tarde

17

Descobri que, embora fosse possível usar o Gmail / Google Apps como um servidor SMTP para uso com script, se muitos e-mails fossem enviados, comecei a receber mensagens de erro:

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

Geralmente, se eu esperasse uma ou duas horas, poderia enviar outros 100 e-mails, mas em breve encontraria a mesma mensagem de erro novamente.

AlexMax
fonte

Respostas:

12

Descobri que o problema era que, embora tivéssemos registros SPF configurados para nossos domínios, não tínhamos um registro DKIM associado ao nosso domínio. Para adicionar um registro DKIM no Google Apps, faça o seguinte:

  • Vá para o Admin Console
  • Clique em "Google Apps"
  • Clique em "Gmail"
  • Role para baixo até ver "Autenticar email" e clique nesse
  • Selecione o domínio ao qual você deseja adicionar o DKIM
  • Quando perguntar qual prefixo você deseja usar, basta usar o padrão de 'google'

Você verá um registro TXT em duas partes, uma parte tem o domínio e a outra o registro TXT real. Você precisa acessar as configurações de DNS no servidor do seu domínio e adicionar esse registro. Se o seu painel de controle DNS não permitir a adição do domínio google._domainkey, simplesmente torne o domínio totalmente qualificado google._domainkey.example.com.

Depois de fazer isso, aguarde um pouco o registro do DNS para propagar e clique em "Iniciar autenticação" no painel de administração do Google Apps. Se você vir uma marca de seleção verde, você o fez e o e-mail deve começar a fluir novamente pelo servidor SMTP.

AlexMax
fonte
E se você não estiver no controle do servidor DNS?
Ishmael
1
Um salva-vidas. Parece que o gmail verificará os servidores autoritativos quanto ao registro TXT; portanto, você não precisa esperar pela propagação completa do DNS - para a maioria das alterações feitas atualmente por meio de um gerenciador de arquivos da zona DNS, você não precisará esperar mais do que algumas vezes. segundos para que a alteração entre em vigor.
JT Taylor #
4

Você não deve se autenticar para cada email que deve enviar.

No início do processo:

Session session = loadSession();
Transport transport = session.getTransport("smtp");
transport.connect("[email protected]", "password");

Depois, use o objeto de transporte para enviar cada email sem iniciar a sessão:

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

Depois de enviar todos os emails, feche a conexão:

transport.close();
victorpacheco3107
fonte
0

solução de @ victorpacheco3107 funcionou para mim, isso que eu fiz em ruby:

settings = {
  address:        "smtp.gmail.com",
  port:           587,
  domain:         "mydomain.com",
  user_name:      "[email protected]",
  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
Lluís
fonte
0

Usando o SMTP quando você envia um email em massa, faça login com todos os emails e faça logout. Por isso, o Google bloqueia sua conexão. O que funcionou para mim é definir o SMTPKeepAlive como true.

kushal parikh
fonte
1
Já foi sugerido não fazer login para cada email.
RalfFriedl