2016-01-13 25 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服務器。如果你重新啓動美洲獅服務器,那麼這個錯誤是固定的。