使用ActionMailer发送Gmail邮件时出现身份验证错误

3
我正在尝试使用ActionMailer生成基本电子邮件。我知道事情已经设置了半正确,因为我收到了来自Gmail的电子邮件,说有一个不安全的应用程序试图登录我的帐户。 我像其他人在这篇文章中所说的那样做了。这些步骤是: 1) 在Gmail设置中启用较不安全的应用程序设置。
2) 将域更改为“gmail.com”而不是“mydomainname.com”。
3) 将身份验证从“plain”更改为:login
4) 在Gmail设置中启用POP和IMAP。
以下是我的开发配置邮件的设置:
...config/environments/development.rb
  config.action_mailer.raise_delivery_errors = true

  #change mail delivery to smtp for Gmail addresses.
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address: "smtp.gmail.com",
    port: 587,
    domain: "gmail.com",
    authentication: "plain",
    enable_starttls_auto: true,
    user_name: ENV["GMAIL_USERNAME"],
    password: ENV["GMAIL_PASSWORD"]
  }

我甚至像个好孩子一样设置了环境变量。即使我硬编码值,错误仍然存在。

我得到的异常是:

Net::SMTPAuthenticationError  
534-5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbtj
3个回答

2

而且,在开发过程中你可以使用本地邮件捕获工具。

其中一个是 MailHog, 它类似于gmail。

安装

brew update && brew install mailhog

development.rb

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { :address => "localhost", :port => 1025 }

在终端中输入以下命令以运行 MailHog:MailHog,然后在浏览器中访问 http://localhost:8025

1
并不是解决Gmail配置问题的真正方法,但还有另一种选择。我曾经遇到过同样的问题并解决了它。然而,这个问题最终又出现了。我不确定是否改变了什么或者只是Gmail不喜欢不安全的应用程序,即使你正确地配置了一切,也会阻止邮件发送。
我读到其他人通过使用两步验证来解决问题(https://stackoverflow.com/a/48300220/3372172),但我从未尝试过。
最后,我换了另一个ESP(甚至Rails在他们的指南中也推荐这样做):http://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration-for-gmail 注意:自2014年7月15日起,谷歌增加了其安全措施,并阻止来自被视为不安全的应用程序的尝试。您可以在此更改您的Gmail设置以允许这些尝试。如果您的Gmail帐户启用了两步验证,则需要设置一个应用程序密码并使用该密码代替常规密码。或者,您可以使用另一个ESP通过将上面的“smtp.gmail.com”替换为您提供程序的地址来发送电子邮件。
我正在使用Sengrid,因为他们的免费计划(每天100封电子邮件)现在对我足够,并且我得到了很多有趣的分析。但是,如果您需要更多容量,我认为它们不便宜。

我很高兴不是只有我遇到这个问题。最终第二次成功解决了,但我不知道自己做了什么。如果它再次出现,我将尝试使用双重身份验证。感谢在答案中包含官方文档。 - S. Harper
AmazonSES非常便宜,如果在EC2上部署,可以免费发送6万封电子邮件。大多数电子邮件SAAS服务也使用AmazonSES。 - 7urkm3n

1
玩弄设置最终解决了问题。
  config.action_mailer.raise_delivery_errors = true

  #change mail delivery to smtp for Gmail addresses.
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address: "smtp.gmail.com",
    port: 587,
    domain: "mydomainname.com",
    authentication: "login",
    enable_starttls_auto: true,
    user_name: ENV["GMAIL_USERNAME"],
    password: ENV["GMAIL_PASSWORD"]
  }

但真正的关键是确保每次更改上述文件中的 ...config/environments/development.rb 后都要重新启动服务器。
编辑:好吧,现在我感觉自己快疯了,因为当我再次尝试运行它时,上述设置并没有起作用...

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