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)的主要内容,如果未能解决你的问题,请参考以下文章

设置 SMTP 设置以在 rails 中发送邮件

Rails 4动作邮件程序SMTP-AUTH错误缺少秘密短语?

Rails 4 ActionMailer - 如何在使用 Deliver_later 时捕获连接和 SMTP 错误

Gitlab smtp 测试失败

Rails 2.3:Postmarkapp 的 SMTP 设置:连接被拒绝 - 连接(2)

如何正确设置具有三种不同用户类型和每种类型不同授权的 Rails 4 Devise 身份验证?