使用ActionMailer发送带附件的电子邮件时遇到问题。
当我在gmail中阅读我的消息时,我的附件有'noname'文件名。
通知程序功能
class Notifier < ActionMailer::Base
def send_message
attachments["text.txt"] = {:content => "hello"}
mail(:to => "me@gmail.com", :subject => 'test')
end
end
邮件标题:
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: ...
如何发送具有正确文件名的邮件?
由于
答案 0 :(得分:11)
确保您有自己的观点。
在app/views/[class_name]/[method_name]
中制作正确的文件
创建app/views/notifier/send_message.erb
文件和app/views/notifier/send_message.html.erb
文件。
答案 1 :(得分:1)
Drew是对的,如果缺少特定的邮件程序视图,则会出现此问题。
恕我直言,gmail无法获取邮件编码并重命名附件。
Gmail帮助中提供了更多信息:
答案 2 :(得分:0)
我认为当你没有为电子邮件定义一个机构时,这些部分会被错误地设置,你最终会赢得一个巨大的&#34; noname&#34;包含所有附件的部件标题的文件。
使用此邮件代码:
class Mailer < ActionMailer::Base
def generic(args)
args.reverse_merge! to: 'e@mail.com', from: 'e@mail.com'
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
当我这样做时,我得到一个noname单个文件:
Mailer.generic(attachments: [File.open('/path/to/file1.txt'), File.open('/path/to/file2.csv')]).deliver
当我这样做时,我得到2个具有正确名称的单个文件:
Mailer.generic(body: '', attachments: [File.open('/path/to/file1.txt'), File.open('/path/to/file2.csv')]).deliver