Rails 4,如何正确配置 smtp 设置(gmail)
Posted
技术标签:
【中文标题】Rails 4,如何正确配置 smtp 设置(gmail)【英文标题】:Rails 4, how to correctly configure smtp settings (gmail) 【发布时间】:2014-11-10 09:59:52 【问题描述】:我正在尝试在 Rails 4 中创建一个联系表单。我在这里进行了一些挖掘,并且能够让大部分内容正常工作。 (在这里关注@sethfri 的工作Contact Form Mailer in Rails 4)
现在我可以填写我的表单框并点击发送。在我的 Rails 服务器中,它说邮件出站到我的电子邮件地址,但我的 gmail 邮箱中没有收到任何内容,所以我认为我的 smtp 设置不正确。我的 smtp 设置是:
...config/environments/development.rb
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.default_url_options = :host => 'localhost:3000'
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings =
:address => "smtp.gmail.com",
:port => "587",
:domain => "mydomain.net",
:user_name => "mygmailusername@gmail.com",
:password => "myGmailPassword",
:authentication => "plain",
:enable_starttls_auto => true
我还添加了 .../config/initializers/smtp_settings.rb
ActionMailer::Base.smtp_settings =
:address => "smtp.gmail.com",
:port => "587",
:domain => "mydomain.net",
:user_name => "gmailuser@gmail.com",
:password => "gmailPassword",
:authentication => "plain",
:enable_starttls_auto => true
我错过了什么/做错了什么?我玩了几件事(将 default_url 更改为端口 1025,将 :port => "587" 更改为 :port => 587)但没有成功。
感谢您的帮助!
【问题讨论】:
您是否检查过您在 gmail 帐户中的垃圾邮件文件夹? 先检查你的gmail账号的发送文件夹 嘿,是的,我在发送电子邮件和接收电子邮件(也是一个 gmail 帐户)上检查了我的已发送文件夹和垃圾邮件文件夹 运行时是否会引发交付错误?如果是这样,您可能需要配置 Gmail 帐户以允许安全性较低的应用程序访问support.google.com/accounts/answer/6010255 你有没有得到这个工作?我遇到了同样的问题,并尝试了这里提供的解决方案。 【参考方案1】:您必须正确设置域。目前在代码中发布了它的“mydomain.net”。如果您想通过 gmail 发送,请将其更改为 gmail.com。
config.action_mailer.smtp_settings =
address: 'smtp.gmail.com',
port: 587,
domain: 'gmail.com',
user_name: 'xyz@gmail.com',
password: 'yourpassword',
authentication: :plain,
enable_starttls_auto: true
【讨论】:
嘿,我试了一下,尝试了端口 587 加引号和不加引号,但都不起作用。 将:authentication
键的值从:plain
更改为:login
。使用 rails 4,它对我有用。
domain 显然定义了您可以在内部使用的域名或您的邮件链接回发送客户端!此答案应更正或删除!
P.S.您应该将它放在 /environments 文件夹中的 development.rb、production.rb 或 test.rb 文件中。
转到myaccount.google.com/lesssecureapps 并激活允许不太安全的应用程序:开【参考方案2】:
Google 建议在登录过程中使用 OAuth 2.0。这种配置对谷歌来说“不太安全”,但他们容忍它。您必须在您的 Google 帐户设置中允许“不太安全的连接”或使用 OAuth 方式。 https://developers.google.com/identity/protocols/OAuth2
他们的 ruby 库仍然是 alpha。 似乎有一些为 OAuth 扩展 ActionMailer 的 gem,但我从未使用过它们。
【讨论】:
作者说的是通过 Gmail 的 SMTP 服务器发送电子邮件,你知道吗?这与 OAuth 无关。 答案仍然是相关的。为了能够使用 SMTP,您需要配置启用“不太安全的客户端”。另一种选择(从谷歌的角度来看)是根本不使用 SMTP。作者的主要意图似乎是让电子邮件传递工作。 SMTP 只是希望 似乎 是必要的。【参考方案3】:如果您在使用 gmail 发送电子邮件时遇到 Net::SMTPAuthenticationError 之类的错误(Google Apps 帐户常见),请访问您的 gmail settings 并启用安全性较低的应用以使应用正常运行。
【讨论】:
感谢您的建议。谷歌在我的帐户上启用了此功能,电子邮件立即停止流动。这解决了问题。 我启用了安全性较低的密码,并且还设置了accounts.google.com/b/0/DisplayUnlockCaptcha 选项。我的生产应用程序仍在拒绝凭据。我从 Linode 切换到 Heroku,切换时出现了这个问题。关于为什么在启用不太安全的应用程序并同时执行 DisplayUnlockCaptcha 后它仍然会发生的任何想法?【参考方案4】:经过几个小时搜索如何使它对我有用,我找到了一种使它起作用的方法。对于我自己,我需要进行两步验证并使用 Gmail 应用程序密码
当您启用两步验证(也称为双重身份验证)时,您会为您的帐户添加额外的安全层。您使用您知道的东西(您的密码)和您拥有的东西(发送到您手机的代码)登录。
设置两步验证
-
转到2-Step Verification 页面。您可能需要登录自己的 Google 帐户。
在右侧的“两步验证”框中,选择开始设置。
按照分步设置过程进行操作。
应用密码是一个 16 位数的密码,它允许应用或设备访问您的 Google 帐户。如果您使用两步验证并在尝试访问您的 Google 帐户时看到“密码不正确”错误,则应用密码可能会解决问题。大多数情况下,您只需为每个应用或设备输入一次应用密码,因此不必担心记住它
如何生成应用密码
-
访问您的App passwords 页面。系统可能会要求您登录自己的 Google 帐户。
在底部,点击选择应用并选择您正在使用的应用。
点击选择设备并选择您正在使用的设备。
选择生成。
按照说明在您的设备上输入应用密码(黄色栏中的 16 个字符的代码)。
选择完成
【讨论】:
奇怪,我的 google 账号密码失效了,我必须设置应用密码,tnx【参考方案5】:2020 年,Rails 6 更新了答案:
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_caching = false
config.action_mailer.default_url_options = host: 'localhost', port: 3000
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings =
address: "smtp.gmail.com",
port: 587,
authentication: "plain",
enable_starttls_auto: true,
user_name: "blabla@gmail.com",
password: "blabla",
domain: "smtp.gmail.com",
openssl_verify_mode: "none",
【讨论】:
对我来说,它只适用于激活 2FA 和特定的应用程序密码。否则我总是遇到Net::SMTPAuthenticationError (535-5.7.8 Username and Password not accepted...)
异常。我还必须启用不安全的应用程序。
文档现在声明了一些稍微不同的内容,https://support.google.com/a/answer/2956491?hl=en?hl=en
表示指向端口 587 上的 smtp-relay.gmail.com以上是关于Rails 4,如何正确配置 smtp 设置(gmail)的主要内容,如果未能解决你的问题,请参考以下文章
Rails 4动作邮件程序SMTP-AUTH错误缺少秘密短语?
Rails 4 ActionMailer - 如何在使用 Deliver_later 时捕获连接和 SMTP 错误