2013-04-16 58 views
2

我正在使用Rails 3.2.13並一直遵循ActionMailer指南(http://guides.rubyonrails.org/action_mailer_basics.html#sending-emails-with-attachments),但我在發送電子郵件附件時遇到困難。Rails 3 ActionMailer破壞附件

執行後,電子郵件發送正常,但附件始終損壞。特別是,我看到呈現的電子郵件和附件的正確文件名,但是作爲無法打開的1KB文件。我已經看到類似的堆棧溢出問題和其他地方(例如Rails 3: Sending Mail with Attachment - corrupted file after first sendRails 3.0.7 ActionMailer attachment issue),但是沒有一個解決方案能夠提供幫助。我嘗試了兩種不同的傳輸方式(Gmail SMTP和Sendgrid),幾種文件類型(png,pdf等)以及內嵌和常規附件,但始終具有相同的效果。

這裏的郵件程序的代碼:如果我稱它在我的控制器

class UserMailer < ActionMailer::Base 

    # A hash of default values for email messages 
    default from: "[email protected]" 

    def welcome_email(user) 
     @user = user 
     @url = "http://localhost:3000" 

     attachments['logo_email.png'] = File.read("public/img/logo_email.png") 

     mail(:to => user.email, :subject => "Welcome") 
    end 
end 

它看起來像這樣(我用的delayed_job這裏,但附件,即使沒有它已損壞):

UserMailer.delay.welcome_email(@user) 
+0

這發生在我身上太..:■你解決呢? – Lichtamberg

+0

@萊希坦堡遺憾的是,沒有。 :(我最近還沒有使用過Rails,所以我沒有回頭去看看。 –

回答

6

顯然,這是一個只讀文件(未)讀入的Windows行爲。需要在Windows中爲Ruby指定「r」(只讀)和「b」(二進制)正確閱讀。 http://ruby-doc.org/core-1.9.3/IO.html

請參閱以下相關問題

Read contents of a local file into a variable in Rails

嘗試以下操作:

attachments['logo_email.png'] = File.read("public/img/logo_email.png", mode: "rb")

+0

謝謝,給我修好了! – Steve

+0

Windows s * cks,這個很酷,在Ruby 1.9.2上也可以工作。 –