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

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)

祝你好运!