2010-12-19 17 views
9

Ich habe Probleme beim Senden von E-Mail-Nachrichten mit Anhang mit ActionMailer.Ungültiger Dateiname in E-Mail (ActionMailer)

Das Ding ist mein Anhang hat 'noname' Dateiname, wenn ich meine Nachricht in Google Mail lesen.

Notifier Funktion

class Notifier < ActionMailer::Base 
    def send_message 
    attachments["text.txt"] = {:content => "hello"} 
    mail(:to => "[email protected]", :subject => 'test') 
    end 
end 

Nachrichten-Header:

 
Date: Sun, 19 Dec 2010 23:18:00 +0100 
Mime-Version: 1.0 
Content-Type: text/plain; 
charset=UTF-8; 
filename=text.txt 
Content-Transfer-Encoding: 7bit 
Content-Disposition: attachment; 
filename=text.txt 
Content-ID: ... 

Wie kann ich eine Nachricht mit der rechten Dateinamen senden?

Dank

Antwort

11

Stellen Sie sicher, dass Sie Ihre Ansichten haben.

Nehmen Sie die richtigen Dateien in app/views/[class_name]/[method_name]
erstellen app/views/notifier/send_message.erb Datei und app/views/notifier/send_message.html.erb Datei.

+0

Eigentlich können Sie die Ansicht als 'send_message.text.erb' benennen, um es klarer zu machen. –

+0

Warum haben zwei separate Dateien das gleiche? – Trip

0

Ich denke, wenn Sie nicht über einen Körper für die E-Mail definieren, die Teile bekommen falsch eingerichtet, und Sie am Ende gewinnen eine massive "Noname" -Datei, die die Teile-Header für alle Anhänge enthält.

Mit diesem Mailer Code:

class Mailer < ActionMailer::Base 
    def generic(args) 
    args.reverse_merge! to: '[email protected]', from: '[email protected]' 
    add_attachments! args.delete(:attachments) 
    mail(args) 
    end 

    protected 
    def add_attachments!(*files) 
    files.flatten.compact.each do |file| 
     attachments[File.basename(file)] = File.read(file) 
    end 
    end 
end 

ich eine noname einzelne Datei, wenn ich dies tun:

Mailer.generic(attachments: [File.open('/path/to/file1.txt'), File.open('/path/to/file2.csv')]).deliver 

ich 2 einzelne Dateien, mit richtigen Namen, wenn ich dies tun:

Mailer.generic(body: '', attachments: [File.open('/path/to/file1.txt'), File.open('/path/to/file2.csv')]).deliver 
Verwandte Themen