2016-01-13 110 views
0

我无法通过gmail使用Rails 4操作邮件发送电子邮件。这一切应该如此简单......但它不起作用。具体来说,我得到Rails 4动作邮件程序SMTP-AUTH错误缺少秘密短语?

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

我读过关于此情况的其他问题,但大多有简单的修正(“USER_NAME”,而不是“用户名”,或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       
} 

我最初有明文的凭据,但我虽然也许我应该搬到他们针对Env变量来解决这一问题。它没有改变任何东西。请注意,我的Gmail是一家公司的Gmail,所以它实际上并不以“@ gmail.com”结尾。我不确定这是否会改变什么,但我想我会提到它。我也尝试了一个标准的Gmail地址,它不会改变。

此外,“缺少秘密短语”是指密码错误吗?或者它是否找不到密码?还有什么可能导致错误?谢谢你的时间。

回答

2

我刚刚在一个正在处理的应用程序中处理了一个非常类似的场景。我得到了完全相同的“SMTP-AUTH请求但缺少秘密短语”错误。最终解决这个问题的方法有两方面:

1)确保您使用的是gmail的应用程序专用密码。 Instructions from Google here>如何生成应用程序密码。请注意,如果您尚未拥有双因素身份验证,则还需要先将其设置为首选。您最终将得到一个长度为16个字符的应用程序密码。您将使用它作为Rails通过SMPT设置使用的密码。

2)确保已经正确设置了本地环境变量文件,以便在编译Rails应用程序时加载它,并通过将文件名放在gitignore中从git跟踪中排除。我使用名为app_name/config/local_env.yml的文件,但您也可以使用Rails 4.2附带的标准secrets.yml文件,或者figaro gem在管理ENV变量时非常流行。 This RailsApps page对如何管理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"] 
} 

祝您好运!

+0

我现在遇到了同样的问题,但是每当我访问该页面时,都会显示“我要找的设置不适用于您的帐户。”你知道如何解决这个问题吗? – abcde13

0

对我来说我已经把密码放在bashrc文件中,我忘了重新启动puma服务器。如果你重新启动美洲狮服务器,那么这个错误是固定的。