2013-08-24 57 views
22

我得到了一個軌道4應用程序與以下郵件配置:ArgumentError:發送郵件需要SMTP To地址。設置消息smtp_envelope_to,要,CC或BCC地址

config.action_mailer.delivery_method = :smtp 
    config.action_mailer.default_url_options = { host: 'myhost.com' } 
    config.action_mailer.perform_deliveries = true 

    config.action_mailer.smtp_settings = { 
    :enable_starttls_auto => true, 
    :address   => 'smtp.myhost.com', 
    :port    => 587, 
    :domain    => 'myhost.com', 
    :authentication  => :login, 
    :enable_starttls_auto => false, 
    :tls     => false, 
    :openssl_verify_mode => 'none', 
    :ssl => false, 
    :user_name   => "myusername", 
    :password   => "mypassword" 
    } 

每次我嘗試發送郵件帶有一個測試郵件設置:

class TestMailer < ActionMailer::Base 

    default :from => "[email protected]" 

    def welcome_email 
    mail(:to => "[email protected]", :subject => "Test mail", :body => "Test mail body") 
    end 
end 

TestMailer.welcome_email.deliver 

我得到這個異常:

ArgumentError: An SMTP To address is required to send a message. Set the message smtp_envelope_to, to , cc, or bcc address.

難道我忘了什麼東西來設置? ,我無法找到「smtp_envelope_to」的配置選項

回答

26

的錯誤信息是不是SMTP信封,但有關發件人:

An SMTP To address is required to send a message

剩下的只是一個通用的消息。 [email protected]中的某些內容不起作用。 你使用真實的工作地址嗎?如果沒有,請嘗試一個。

+3

Thx我的失敗是一個smtp地址的重寫,它將它設置爲零Oo – bulleric

2

:to => '[email protected]'它是如何在你的失敗環境中?如果它不是硬編碼的電子郵件地址,請確保包含地址的變量不爲空。

您不必明確設定Mail::Message#smtp_envelope_to。它可以從其收件人中猜出它,即。 Mail::Message#destinations(to + cc + bcc),但它似乎沒有任何。

+0

簡單的建議和確切的問題解決了我的問題。我的SMTP默認的':'傳入的APP_CONFIG值正在返回'nil'。 – skplunkerin

4

如果您使用sidekiq + actionmailer。使用散列發送電子郵件時要小心。我正在做這樣的事情 MyWorker.perform_async(「var1」,{email:'[email protected]',var2:'test1234'})

我碰了幾個鐘頭,爲什麼它會丟上面的錯誤。因爲在perform_menthod哈希[:電子郵件]是零。您需要使用hash [「email」]來接收電子郵件。我不知道,原因。但它幫助我擺脫了這個錯誤。

+4

也許對於offtopic很抱歉,但是你必須使用hash ['email']的原因是由於序列化過程進入了redis。 Sidekiq創建JSON文檔,它會自動將所有的鍵轉換爲字符串。 –

相關問題