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

Posted

技术标签:

【中文标题】从 Rails 应用程序发送电子邮件时的 Net::SMTPAuthenticationError(在暂存环境中)【英文标题】:Net::SMTPAuthenticationError when sending email from Rails app (on staging environment) 【发布时间】:2013-08-10 02:21:26 【问题描述】:

我正在从我的 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 =&gt; true 选项后我得到

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

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

Timeout::Error (execution expired)

【问题讨论】:

我错误地将 url 复制到了浏览器中(谷歌可能事先为我们想到了)。输入我的密码,在面板中我看到切换了不仅可以从受信任的站点发出请求的可能性。 【参考方案1】:

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

【讨论】:

谢谢!这个问题让我很头疼,最后我需要做的是在使用这些设置后更改我的谷歌账户密码并在谷歌账户设置中设置允许不太安全的应用程序选项。 在设置“允许安全性较低的应用程序”并告诉谷歌信任我的设备(服务器的 IP)并等待超过 24 小时后...简单的密码更改解决了我的 gmail 身份验证问题。谷歌的某个人可能应该解决这个问题。 ;) 我遇到了同样的问题。我已经启用了 lessecureapps 但它不会修复。我只是更改了我的密码,它就像一个魅力。 :)【参考方案2】:

上述解决方案提供了正确的设置(我已经有了),但没有解决问题。经过不断的尝试,我不断收到同样的错误。事实证明,我不得不从网上“清除 CAPTCHA”。详情请见gmail documentation。

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

【讨论】:

直接链接到“清除验证码”页面:accounts.google.com/DisplayUnlockCaptcha【参考方案3】:

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

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

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

【讨论】:

这实际上是解决问题的正确方法(尽管它可能会使您的帐户面临风险)。但它有效。 也不要忘记在这里允许帐户访问:: google.com/settings/security/lesssecureapps 我能够通过使用多重身份验证并为我的 Rails 服务器启用应用程序专用密码来避免 lesssecureapps 设置。 在生产环境中使用Mandrill 之类的服务发送电子邮件可能会更好 我打开了 lesssecureapps 帐户设置并进入 DisplayUnlockCaptcha 页面并按下 OK,通过 rails 发送电子邮件但收到相同的错误 Net::SMTPAuthenticationError ...ContinueSignIn... .然后我尝试在 10 分钟后做同样的事情,它开始工作了。【参考方案4】:

这个解决方案对我有用:

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 上注册您的应用?【参考方案5】:

转到以下链接并打开 https://www.google.com/settings/security/lesssecureapps

【讨论】:

【参考方案6】:

很久以后,但以防万一它对任何人有帮助.. 刚打电话给 Google Apps 帮助中心,他们指示更改 lesssecureapps 设置(与其他所有人一样),但还将端口更改为 465。

就我而言,这成功了!

【讨论】:

【参考方案7】:

我遇到了同样的问题,经过一些试验和错误后,我得出了这个解决方案,这是一个可以在 google 中启用的选项:

点击https://www.google.com/settings/u/0/security/lesssecureapps

使用您在 smtp 配置中提供的电子邮件地址登录,在此处启用“访问安全性较低的应用程序”。

【讨论】:

【参考方案8】:

您好,这对我也有用,所以如果有人仍然遇到问题,请尝试一下。

确保您的 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" 【参考方案9】:

我也遇到了这个问题,在研究了Gmail设置之后,我找到了解决办法:

    在 gmail 中,转到设置。

    选择“转发和 POP/IMAP”选项卡。

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

【讨论】:

【参考方案10】:

我遇到了同样的问题。


解决方案:

您可以打开 less secure apps选项(at here)。https://myaccount.google.com/lesssecureapps

以及解锁验证码 (link):https://accounts.google.com/DisplayUnlockCaptcha

【讨论】:

【参考方案11】:

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

转到https://myaccount.google.com/u/0/apppasswords 为您的应用生成新密码 用config.action_mailer.smtp_settings中生成的密码替换个人密码

现在,发送电子邮件完美无缺!

【讨论】:

【参考方案12】:

要解决此问题:

如果您看到: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 帐户。

【讨论】:

这为我解决了问题,感谢您提供的信息。

以上是关于从 Rails 应用程序发送电子邮件时的 Net::SMTPAuthenticationError(在暂存环境中)的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails:提交按下时的警报按钮

从 Rails 2 到 Rails 3 路由

Heroku 环境中的 Ruby on Rails 应用程序:“使用 Mailgun 发送电子邮件”错误

通过电子邮件发送ActionMailer中的当前用户 - Rails 5

Rails Mailer - 无法从 Mailer 视图访问实例变量

Rails 3 - 从视图中渲染 PDF 并附加到电子邮件