2013-04-22 49 views
1

我想有一個名爲時間戳+ normal_mail_name +「的.eml」的文件..Rails的梅勒:改變文件時DELIVERY_METHOD:文件

我看着鐵軌源代碼,郵件寶石源代碼和信opener-gem ..你能給我一個提示如何(猴子補丁)的郵件列支持,我可以指定類似於:

config.action_mailer.file_settings = {:location => Rails.root.join ('tmp','mail'),:file_name => Time.now.to_i.to_s +「mail.eml」}

謝謝!

UPDATE: 這也將是不錯的這個郵件與本地相關的電子郵件PROGRAMM與launchy自動打開,就像開信刀寶石..我會做我自己,但我不明白的源代碼..

回答

1

我認爲你有很多郵件的東西,你會想調試郵件正文,文本等?我對嗎? 如果我是對的,我不會發送郵件delivery_method:文件,我只會創建一個真正的電子郵件(例如gmail)帳戶,並通過測試帳戶發送郵件。

例如,在你的config /環境/ development.rb:

email_settings = YAML::load(File.open("#{Rails.root.to_s}/config/mail.yml"))[Rails.env] rescue nil 

if email_settings.nil? 
    config.action_mailer.raise_delivery_errors = false 
    config.action_mailer.perform_deliveries = false 
    config.action_mailer.delivery_method = :file 
else 
    config.action_mailer.raise_delivery_errors = true 
    config.action_mailer.perform_deliveries = true 
    config.action_mailer.delivery_method = :smtp 
    config.action_mailer.smtp_settings = { 
    :address    => "#{email_settings["address"]}", 
    :port     => email_settings["port"], 
    :authentication  => "#{email_settings["authentication"]}", 
    :user_name   => "#{email_settings["user_name"]}", 
    :password    => "#{email_settings["password"]}", 
    :enable_starttls_auto => email_settings["enable_starttls_auto"] 
    } 
end 

而且你mail.yml文件:

development: 
    address: smtp.gmail.com 
    port: 587 
    authentication: login 
    user_name: [email protected] 
    password: yourpassword 
    enable_starttls_auto: true 

這是不是真的對你的問題的直接答案,但也許這種解決方法對你來說是一個不錯的選擇。您也可以根據您的需要以相同的方式配置其他環境。

0

如果你只是想跳過通過一個真實的郵件服務器電子郵件的傳輸在本地查看你的郵件,我用兩個很好的解決方案是:

一個非免費的,OSX特定的解決方案是使用http://mocksmtpapp.com/

如果你想有一個副本原始電子郵件(標題和全部),我會這樣做的一種方式是編寫一個電子郵件攔截器,並將郵件對象的內容寫入磁盤。

http://railscasts.com/episodes/206-action-mailer-in-rails-3

事情是這樣的lib/development_mail_interceptor

class DevelopmentMailInterceptor 
    def self.delivering_email(message) 
    message.perform_deliveries = false 
    File.open("#{Time.now.to_i}-email.eml", "w") { |f| f.write(message.to_s) } 
    end 
end 

和配置/初始化/爲setup_mail.rb

Mail.register_interceptor(DevelopmentMailInterceptor) if Rails.env.development?