发送包含两个附件的电子邮件,每个附件具有不同的编码

时间:2013-03-27 16:39:33

标签: ruby ruby-on-rails-3 actionmailer

我想发送一封包含ActionMailer的电子邮件。我想在ISO-8859-1和UTF-8

中发送相同的csv编码

我的梅勒:

class MyMailer < ActionMailer::Base
  default :from => "Me <contact@me.com>"

  # ===========
  # = Reports =
  # ===========

  # report is in UTF-8
  def send_report(email, report, subject, filename, campaign_id)
    attachments[filename + '.utf_8.csv']= { :data => report, :encoding => 'base64',  :mime_type => "text/csv" }
    attachments[filename + '.latin1.csv']= { :data => report.encode('ISO-8859-1'), :encoding => 'base64', :mime_type => "text/csv; charset=ISO-8859-1" }

    @campaign_id = campaign_id
    mail(to: email, subject: subject)
  end
end

我收到了错误:

incompatible character encodings: ISO-8859-1 and UTF-8

如果我尝试单独发送它们,它就可以正常工作......

1 个答案:

答案 0 :(得分:0)

ActionMailer文档规定

  

如果您想使用与Base64不同的编码,您可以传入编码,但是由您决定传入预编码的内容

因此,您希望对附件进行双重编码。我会首先删除:编码选项。其次,您没有告诉我们编码错误发生的位置。也许您的文档中有UTF-8无法编码为ISO?

第三,将report传递给附件哈希。它可能会在其上调用force_encoding。但是,由于Ruby是通过引用传递的,这也会影响您的第二个附件。

失败了,我会尝试将mime类型切换为application/octetstream

最后我会深入研究AM资源。另外,我会向有ISO编码文件的人发送一丝灼热的仇恨作为要求。