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

时间:2013-08-08 11:29:17

标签: ruby-on-rails ruby-on-rails-3 gmail

我正在从我的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)

12 个答案:

答案 0 :(得分:235)

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

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

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

答案 1 :(得分:24)

此解决方案对我有用:

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更改设置,以便您的帐户不再受现代安全标准的保护。

答案 2 :(得分:23)

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

答案 3 :(得分:14)

答案 4 :(得分:13)

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

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

答案 5 :(得分:2)

很晚以后,以防它帮助任何人..只是打电话给Google Apps帮助中心,他们指示更改lesssecureapps设置(与其他人一样),但也将端口更改为465.

就我而言,这就是诀窍!

答案 6 :(得分:0)

你好,这对我也有用,所以如果有人还有问题,试试这个。

确保你的宝石文件中有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" }

在您的config目录中创建一个名为application.yml的文件 并添加以下代码。

gmail_username: 'example@gmail.com' 
gmail_password: "your_example_email_password_here"

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

答案 7 :(得分:0)

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

  1. 在Gmail中,转到设置。

  2. 选择&#34;转发和POP / IMAP&#34;标签

  3. 在IMAP访问部分,选择&#34;启用IMAP&#34;。

答案 8 :(得分:0)

我遇到了同样的问题。

解决方案:

答案 9 :(得分:0)

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

现在,发送电子邮件非常有效!

答案 10 :(得分:0)

要解决此问题:

  • 如果您看到: 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/帐户/ DisplayUnlockCaptcha。之后,请单击页面上的继续,您将被重定向。它将验证您的 Captcha ,并且您的应用程序将通过使用您的Google帐户发送电子邮件的验证。

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

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

答案 11 :(得分:-1)

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

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

启用&#39;访问不太安全的应用&#39;在这里使用您在smtp配置中提供的电子邮件地址登录。