电子邮件中的文件名无效(ActionMailer)

时间:2010-12-19 22:26:27

标签: ruby-on-rails-3 actionmailer

使用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: ...

如何发送具有正确文件名的邮件?

由于

3 个答案:

答案 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