从Rails应用发送电子邮件时,Net :: SMTPAuthenticationError(在暂存环境中)


95

我正在从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
我已将错误的网址(Google可能对我们提前考虑了)复制到了浏览器。输入密码,然后在面板中看到切换了不仅从受信任的站点发出请求的可能性。
zmii

Answers:


249

我遇到了同样的问题:电子邮件是从开发发送的,而不是从生产发送的(我从那里得到的Net::SMTPAuthenticationError)。这使我得出结论,问题不在于我的应用程序的配置,而在于Google。

原因:Google阻止了来自未知位置的访问(正在生产的应用)

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


3
这实际上是解决问题的正确方法(尽管这可能会使您的帐户面临风险)。但这有效。
zakelfassi 2013年

40
同样不要忘记在这里允许帐户访问:: google.com/settings/security/lesssecureapps
Chauskin Rodion 2014年

我可以lesssecureapps通过使用多因素身份验证并为Rails服务器启用应用程序专用密码来避免设置。
克里斯·贝克

1
在生产环境中使用像Mandrill这样的服务来发送电子邮件可能更好
代码转换

我已经打开了lesssecureapps帐户设置,并转到DisplayUnlockCaptcha页面并按OK,通过rails发送电子邮件,但收到相同的错误Net::SMTPAuthenticationError ...ContinueSignIn...。然后,我尝试在10分钟后执行相同操作,然后它开始工作。
Lev Lukomsky '16

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
  }

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


有办法解决吗?例如,可以在Google注册您的应用吗?
jphager2 2014年

24

解决了!我只是更改了我的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
}

1
谢谢!这个问题让我很头疼,最后,我需要做的就是使用这些设置并在google帐户设置中设置“允许不太安全的应用”选项后,更改我的google帐户密码。
科里

设置“允许安全性较低的应用程序”并告诉Google信任我的设备(服务器的IP)并等待超过24小时后...简单更改密码即可解决我的gmail身份验证问题。Google的某人可能应该解决该问题。;)
Jason R

我面临着同样的问题。我已经启用了lessecureapps,但无法修复。我只是简单地更改了密码,它就像一个密码一样起作用。:)
Nikhil Sahu





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”}
cooxy

0

我也遇到了这个问题,在对Gmail设置进行了一些研究之后,我找到了解决方案:

  1. 在gmail中,转到设置。

  2. 选择“转发和POP / IMAP”标签。

  3. 在“ IMAP访问”部分中,选择“启用IMAP”。



0

解决此问题的方法:

  • 如果看到:Net :: SMTPAuthenticationError(535-5.7.8不接受用户名和密码。),那么您需要允许安全性较低的应用程序登录您的Google帐户。要启用安全性较低的应用程序登录,请遵循以下步骤:https : //myaccount.google.com/lesssecureapps?。但是将允许所有应用登录。如果要自定义它,请参阅:https : //support.google.com/a/answer/6260879?hl=zh_CN

  • 然后可能会收到Net :: SMTPAuthenticationError(534-5.7.14),因此要解决此问题,请参考:pli = 1http://www.google.com/accounts/DisplayUnlockCaptcha。在那之后,单击页面的继续,您将被重定向。这将验证您的验证码和您的应用程序将得到验证,使用您的谷歌帐户发送电子邮件。

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

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.