min*_*125 4 ruby gmail ruby-on-rails actionmailer
我在使用 Rails 4 Action Mailer 通过 gmail 发送电子邮件时遇到问题。一切本应如此简单……然而却行不通。具体来说,我得到
ArgumentError (SMTP-AUTH requested but missing secret phrase):
Run Code Online (Sandbox Code Playgroud)
我已经阅读了有关这种情况的其他问题,但大多数问题都有简单的修复(“user_name”而不是“username”,或者 ENV 变量是错误的)。我已经仔细检查过,并且确信我的凭据是正确的。这是我的development.rb的相关部分:
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'mydomain.com',
user_name: ENV["GMAIL_USERNAME"],
password: ENV["GMAIL_PXXWRD"],
authentication: 'plain',
enable_starttls_auto: true
}
Run Code Online (Sandbox Code Playgroud)
我最初拥有纯文本形式的凭据,但我认为也许应该将它们移至环境变量来解决问题。它没有改变任何东西。请注意,我的 Gmail 是公司 Gmail,因此它实际上并不以“@gmail.com”结尾。我不确定这是否会改变什么,但我想我应该提一下。我也尝试过使用标准 Gmail 地址,但没有任何改变。
另外,“缺少秘密短语”是否是指密码错误?或者一开始就没有找到密码?还有什么可能导致错误?谢谢你们的宝贵时间。
小智 5
我刚刚在我正在开发的应用程序中处理了一个非常相似的场景。我收到完全相同的“已请求 SMTP-AUTH 但缺少秘密短语”错误。最终为我解决这个问题的有两个方面:
1) 确保您使用 Gmail 的应用程序专用密码。此处来自 Google 的说明> 如何生成应用程序密码。请注意,如果您还没有两步身份验证,则还需要先进行设置。您最终会得到一个 16 个字符长的应用程序密码。您将使用它作为 Rails 通过 SMPT 设置使用的密码。
2) 确保您已正确设置本地环境变量文件,以便在编译 Rails 应用程序时加载该文件,并通过将文件名放入 gitignore 中将其排除在 git 跟踪之外。我使用一个名为 app_name/config/local_env.yml 的文件,但您也可以使用 Rails 4.2 附带的标准 Secrets.yml 文件,或者 Figaro gem 在管理 ENV 变量方面非常流行。此 RailsApps 页面很好地概述了如何管理 ENV 变量。
最终,我的 SMTP 设置看起来与您的几乎相同:
#GMAIL CONFIG
config.action_mailer.default_url_options = { :host =>'localhost:3000' }
config.action_mailer.delivery_method = :smtp
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: "gmail.com",
authentication: "plain",
enable_starttls_auto: true,
user_name: ENV["GMAIL_USERNAME"],
password: ENV["GMAIL_PASSWORD"]
}
Run Code Online (Sandbox Code Playgroud)
祝你好运!
| 归档时间: |
|
| 查看次数: |
10029 次 |
| 最近记录: |