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)
4

12 回答 12

260

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

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

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

于 2013-11-28T09:41:18.017 回答
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
}
于 2013-08-08T14:54:43.267 回答
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更改您的设置,以便您的帐户不再受到现代安全标准的保护。

于 2014-10-13T19:41:41.653 回答
15

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

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

于 2013-09-09T03:17:01.623 回答
15

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

于 2015-02-27T08:53:24.993 回答
6

我有同样的问题。


解决方案:

于 2018-04-09T09:10:27.797 回答
3

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

就我而言,这成功了!

于 2016-06-02T16:04:15.783 回答
3

要解决此问题:

  • 如果您看到:Net::SMTPAuthenticationError (535-5.7.8 Username and Password not accepted.),那么您需要允许不太安全的应用程序登录您的 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。之后,从您被重定向的页面单击继续。它将验证您的验证,并且您的应用程序将获得验证以使用您的谷歌帐户发送电子邮件。

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

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

于 2020-07-28T20:06:20.030 回答
1

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

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

于 2018-07-11T15:08:22.837 回答
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"

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

于 2016-08-08T17:25:47.820 回答
0

我也遇到了这个问题,经过对Gmail设置的一些研究,我找到了解决方案:

  1. 在gmail中,转到设置。

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

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

于 2017-07-05T10:59:40.200 回答
-1

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

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

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

于 2016-07-22T07:12:22.853 回答