Google SMTP 错误:454 4.7.0 登录尝试次数过多,请稍后重试

Google SMTP 错误:454 4.7.0 登录尝试次数过多,请稍后重试

我发现虽然可以使用 Gmail/Google Apps 作为脚本使用的 SMTP 服务器,但如果发送的电子邮件太多,我就会开始收到错误消息:

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

通常如果我等待一两个小时,我可以再发送 100 封左右的电子邮件,但很快我就会再次遇到相同的错误消息。

答案1

我发现问题在于,虽然我们为域名设置了 SPF 记录,但我们没有与域名关联的 DKIM 记录。要在 Google Apps 中添加 DKIM 记录,您需要执行以下操作:

  • 转到管理控制台
  • 点击“Google 应用”
  • 点击“Gmail”
  • 向下滚动,直到看到“验证电子邮件”,然后单击
  • 选择您要添加 DKIM 的域名
  • 当它询问你要使用什么前缀时,只需使用默认的“google”

然后,您将看到一个分为两部分的 TXT 记录,一部分包含域名,另一部分包含实际的 TXT 记录。您需要进入您服务器上的域名 DNS 设置并添加此记录。如果您的 DNS 控制面板不允许您添加 域名google._domainkey,只需使该域名完全合格,例如google._domainkey.example.com

完成此操作后,请等待 DNS 记录传播一段时间,然后单击 Google Apps 管理面板中的“开始身份验证”。如果您看到绿色复选标记,则表示您已完成此操作,并且电子邮件应再次开始通过 SMTP 服务器。

答案2

您不必对发送的每封电子邮件进行身份验证。

在流程开始时:

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

之后,使用传输对象发送每封邮件而无需启动会话:

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

发送所有电子邮件后,您应该关闭连接:

transport.close();

答案3

@victorpacheco3107 的解决方案对我有用,这是我在 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

答案4

使用 SMTP 发送批量电子邮件时,它会登录每封邮件然后注销。因此,Google 会阻止您的连接。对我有用的方法是将 SMTPKeepAlive 设置为 true。

相关内容