我发现虽然可以使用 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。