Rails AWS EBアプリケーション(ワーカー層)からCSV添付ファイルを含むメールを送信しようとしています。アクションメーラーとAWS Sqsキューを使用したCSV添付の送信
この例では、データが添付された状態で電子メールが正しく送信されます。ここにはCSV文字列がハードコードされています。
def send_mail
content = "Example,CSV,Content\n,..."
attachments['test.csv'] = { mine_type: 'text/csv', content: content}
mail( :from => '[email protected]>',
:to => '[email protected]',
:subject => 'Email with attachment',
:body => "testing sending email attachment"
)
end
ただし、APIからCSV文字列を送信すると、エンコードに問題があるようです。私が送るものはこれです。
email = {
from: "[email protected]",
to: "[email protected]",
subject: "Email with attachment",
content_type: 'text/html',
attachments: {
filename: 'test.csv',
content: File.read("#{Rails.root}/test.csv")
}
}
そして、
def send_mail(params)
filename = params[:attachments][:filename]
attachments[filename] = { mine_type: 'text/csv',
content_type: 'text/comma-separated-values',
transfer_encoding: '7bit',
content: [:attachments][:content]
}
mail(params)
end
私はコンテンツがbase64で暗号化されている「7ビット」にそれを設定しない場合は、transfer_encodingに問題があるかもしれないと思います。私はアクションメールメソッドattachments.instance_valuesを使用して、動作する電子メールとそのバイナリのcontent_encodingを確認しましたが、失敗した例でバイナリとして設定しましたが、base64に戻しています。私がparams [:attachments] [:content]を変数に設定した場合、attachments.instance_valuesを記録すると値は 'binary'ですが、メールが受信されるとメッセージが表示されます。
----==_mimepart_57ac6ae25a220_68972ad836f669fc984a7
Content-Type: text/comma-separated-values; charset=UTF-8
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename=test.csv
mine-type: text/csv
Content-ID: <57ac6ae259b90_68972ad836f669fc983b0>
ありがとうございました。