Rails应用程序在staging环境下发送电子邮件时出现Net::SMTPAuthenticationError错误

103

我从我的Rails应用程序发送电子邮件。在开发环境下,它可以正常工作,但是在暂存环境下失败了。我收到以下错误:

Net::SMTPAuthenticationError (534-5.7.14 <https://accounts.google.com/ContinueSignIn?plt=AKgnsbtdF0yjrQccTO2D_6)

请注意,我的预备环境没有域名。

这是我的staging.rb设置:

config.action_mailer.delivery_method = :smtp
config.action_mailer.default_url_options = { :host => "my.ip.addr.here:80" }
config.action_mailer.smtp_settings = {
      :address => "smtp.gmail.com",
      :port => 587,
      :domain => 'my.ip.addr.here:80'
      :user_name => "my_email_name@gmail.com",
      :password => "my_email_password",
      :authentication => 'login'
}

请帮忙。

编辑。

在添加 :tls => true 选项后,我得到了:

OpenSSL::SSL::SSLError (Unrecognized SSL message, plaintext connection?)

然后我将端口更改为 25 ,现在我得到了这个(带有 30 秒的延迟):

Timeout::Error (execution expired)

1
我错误地复制了URL(Google可能已经为我们提前考虑了)到浏览器中。输入了我的密码,然后在面板中,我看到可以切换请求不仅来自受信任的站点的可能性。 - zmii
12个回答

260

我遇到了同样的问题:在开发环境下可以发送电子邮件,但在生产环境下(我收到了Net::SMTPAuthenticationError)无法发送。

原因:Google 阻止来自未知位置(生产环境中的应用程序)的访问。

解决方案:转到http://www.google.com/accounts/DisplayUnlockCaptcha并单击“继续”(这将授予注册新应用程序的10分钟访问权限)。 执行此操作后,我的生产环境应用程序开始发送电子邮件;)


3
这实际上是解决它的正确方法(尽管可能会让您的账户面临风险)。但它有效。 - zakelfassi
41
请勿忘记允许在此处访问账户:https://www.google.com/settings/security/lesssecureapps - Chauskin Rodion
我通过使用多因素身份验证并为我的Rails服务器启用应用程序特定密码,成功避免了“lesssecureapps”设置。 - Chris Beck
1
在生产环境中发送电子邮件最好使用像Mandrill这样的服务。 - Codebling
我已经打开了 lesssecureapps 帐户设置并进入了 DisplayUnlockCaptcha 页面,然后按下了“OK”按钮,通过 Rails 发送电子邮件,但收到了相同的错误 Net::SMTPAuthenticationError ...ContinueSignIn...。 然后我在10分钟后尝试做同样的事情,它开始正常工作了。 - Lev Lukomsky
显示剩余2条评论

27

问题解决了!我只是为我的Gmail账户更改了密码,不知怎么的,错误就消失了。

经过十几次更改,我最终使用的设置如下:

config.action_mailer.delivery_method = :smtp
config.action_mailer.default_url_options = { :host => "my.ip.addr.here" }
config.action_mailer.smtp_settings = {
      :address => "smtp.gmail.com",
      :port => 587,
      :domain => 'my.ip.addr.here:80',
      :user_name => "my_email_name@gmail.com",
      :password => "my_email_password",
      :authentication => :plain,
      :enable_starttls_auto => true
}

2
谢谢!这个问题让我头疼了很久,最后我需要做的是在使用这些设置并在谷歌账户设置中设置允许不安全应用程序选项后更改我的谷歌账户密码。 - Corey
1
在设置“允许不安全的应用程序”并告诉谷歌信任我的设备(服务器IP)并等待超过24小时后...简单更改密码解决了我的Gmail身份验证问题。谷歌的某个人可能应该修复这个问题。 ;) - Jason R
1
我曾经遇到过同样的问题。我已经启用了lessecureapps,但它并没有解决问题。我只是简单地更改了我的密码,然后它就像魔法般地解决了问题。 :) - Nikhil Sahu

25

这个解决方案对我起作用:

config.action_mailer.delivery_method = :smtp
  config.action_mailer.default_url_options = { host:'localhost', port: '3000' }
  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.default :charset => "utf-8"
  config.action_mailer.smtp_settings = {
      :address => "smtp.gmail.com",
      :port => 587,
      :domain => 'localhost:3000',
      :user_name => "xyz@gmail.com",
      :password => "password",
      :authentication => :plain,
      :enable_starttls_auto => true
  }

确实,谷歌将阻止您的登录尝试,但您可以在https://www.google.com/settings/security/lesssecureapps更改设置,以使您的帐户不再受现代安全标准的保护。


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - user2536065

15

15

以上解决方案提供了正确的设置(我已经拥有),但并未解决问题。在继续尝试后,我仍然遇到了相同的错误。原来,我需要从网页上“清除验证码”。请参见Gmail文档获取详细信息。

您也可以直接跳转到“清除验证码”页面此处


1
“清除验证码”页面的直接链接:https://accounts.google.com/DisplayUnlockCaptcha - tmr08c

7

3

很晚了,但如果有人需要帮助..刚刚打电话给Google应用程序帮助中心,他们指示更改lesssecureapps设置(像其他人一样),但还要将端口更改为465。

在我的情况下,这解决了问题!


3
为解决此问题:
  • 如果您看到:Net::SMTPAuthenticationError (535-5.7.8 用户名和密码不被接受。),那么您需要允许较不安全的应用程序登录您的Google帐户。要启用较不安全的应用程序登录,请执行以下操作:https://myaccount.google.com/lesssecureapps?。但这将允许所有应用程序登录。如果您想自定义它,请参考:https://support.google.com/a/answer/6260879?hl=en

  • 然后可能出现Net::SMTPAuthenticationError (534-5.7.14),所以要解决此问题,请参考:pli=1http://www.google.com/accounts/DisplayUnlockCaptcha。之后,从重定向的页面继续。它将验证您的Captcha,并验证您的应用程序可以使用您的Google帐户发送电子邮件。

注意:请确保您正在使用正确的Gmail帐户凭据。

如果您不愿意允许所有应用程序,请参考:https://support.google.com/a/answer/6260879?hl=en。从链接转到使用较不安全应用程序的替代方案,这将指导您以替代方式允许较不安全的应用程序访问您的Google帐户。


这对我有帮助,谢谢信息。 - devjme

1

接受的答案似乎很老,我不知道那个时候是否存在以下(更好的)解决方案:

现在,发送电子邮件完美地工作!


0

你好,这对我也起作用了,所以如果有人仍然遇到问题,请尝试这个方法。

确保在你的gemfile中有figaro。 将敏感信息(如用户名和密码)保存为环境变量。

gem 'figaro'

在你的 config/environments/development.rb 文件中,粘贴以下代码,使用 SMTP 作为邮件发送方式

 config.action_mailer.delivery_method = :smtp

Gmail的SMTP设置

  config.action_mailer.smtp_settings =
  {
    :address=> "smtp.gmail.com",
    :port => 587,
    :user_name => ENV['gmail_username'],
    :password=> ENV['gmail_password'],
    :authentication=> "plain",
    :enable_starttls_auto=>true
  }


config.action_mailer.default_url_options = { host: "locahost:3000" }

在您的配置目录中创建一个名为application.yml的文件,并添加以下代码。
gmail_username: 'example@gmail.com' 
gmail_password: "your_example_email_password_here"

你必须在文件中使用你的电子邮件和密码进行身份验证。


config.action_mailer.default_url_options = { host: "localhost:3000" } 配置.动作邮件发送器.默认URL选项 = { 主机: "localhost:3000" } - cooxy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接