0

我想用 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

如果我尝试单独发送它们中的每一个,它工作正常......

4

1 回答 1

0

ActionMailer 文档规定

如果你想使用不同于 Base64 的编码,你可以传入一个编码,但是你可以传入预编码的内容

所以看起来你想对你的附件进行双重编码。我将首先删除 :encoding 选项。其次,您没有向我们展示发生编码错误的位置。也许您的文档中有无法编码为 ISO 的 UTF-8?

第三,您传入report附件哈希。可能是有什么东西force_encoding在召唤它。但是,由于 Ruby 是通过引用传递的,这也会影响您的第二个附件。

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

最后,我将深入研究 AM 源。此外,我会向要求拥有 ISO 编码文件的人发出强烈的仇恨。

于 2013-03-27T17:35:03.337 回答