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 オプションを削除します。第 2 に、エンコード エラーが発生している場所が表示されません。ドキュメントに ISO としてエンコードできない UTF-8 が含まれている可能性がありますか?

report3 番目に、添付ハッシュに渡します。何かが呼んでいるのかもしれませんforce_encoding。ただし、Ruby は参照渡しであるため、これは 2 番目のアタッチメントにも影響します。

それに失敗したら、MIME タイプをapplication/octetstream

そして最後に、AM ソースに飛び込みます。また、ISO でエンコードされたファイルを要件として持っている人には、一筋の憎しみを込めて送ります。

于 2013-03-27T17:35:03.337 に答える