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

4

我在使用Rails 4的action mailer通过gmail发送电子邮件时遇到了问题。这本应该很简单...但它并没有起作用。具体来说,我收到了以下错误信息:

ArgumentError (SMTP-AUTH requested but missing secret phrase):

我已经阅读了关于这种情况的其他问题,但大多数都有简单的解决方案(例如使用"user_name"而不是"username",或者环境变量设置错误)。我已经仔细检查过了,确定我的凭据是正确的。以下是我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                         
}  

我最初是将凭证以明文形式保存的,但我认为将它们移至环境变量中可能可以解决问题。但这并没有改变任何事情。需要注意的是,我的 Gmail 是公司的 Gmail,因此实际上并不以 "@gmail.com" 结尾。我不确定是否会有所改变,但我想提一下。我也尝试过使用标准的 Gmail 地址,但没有改变任何东西。
另外,“missing secret phrase” 是指密码错误吗?还是根本找不到密码?还有什么其他可能导致这个错误?谢谢大家的时间。
3个回答

5

我刚刚在我正在开发的一个应用程序中遇到了非常类似的情况。 我也得到了完全相同的“SMTP-AUTH请求但缺少密码短语”错误提示。 最终,我解决这个问题是两个步骤:

1)确保你正在使用 Gmail 的应用程序专用密码。 Google 的说明 > 如何生成应用程序密码。 请注意,如果您还没有启用双因素身份验证,您需要先设置双因素身份验证。 您将获得一个长度为16个字符的应用程序密码。 您将使用该密码通过 SMPT 设置来使用 Rails。

2)确保您已经适当地设置了本地环境变量文件,以便它在编译 Rails 应用程序时加载,并且通过将文件名放在您的 gitignore 中排除其跟踪。 我使用一个名为 app_name/config/local_env.yml 的文件,但您也可以使用随 Rails 4.2 一起提供的标准 secrets.yml 文件,或者 figaro gem 也很受欢迎,用于管理 ENV 变量。 此页 提供了如何管理您的 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"]
}

祝你好运!


1
我现在遇到了同样的问题,但每当我访问该页面时,它会显示“您要查找的设置对您的帐户不可用。” 你知道如何解决这个问题吗? - chr0nikler

0

对于我来说,我把密码放在了bashrc文件中,然后忘记重新启动puma服务器。如果你重新启动puma服务器,那么这个错误就会被修复。


0

在本地设置良好,但部署到生产环境后却无法正常工作。我认为 Google 可能会检查设备或至少 IP 地址。我为生产服务器生成了一个新的应用程序密码,几分钟后它开始工作。

因此,如果您使用 Google SMTP 并且更改设备/ IP 而没有进行配置更改,请尝试生成新的应用程序密码。


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