Rails ActionMailer - 附加文本文件会导致电子邮件正文作为附件发送

时间:2016-10-06 16:38:52

标签: ruby-on-rails email actionmailer

当我尝试将一个文本文件(带有.txt扩展名)附加到电子邮件中时,系统会发送一封没有正文并附加附件的电子邮件:noname.html。此文件包含我希望在电子邮件正文中获得的内容。当我将文件的扩展名更改为.txt以外的其他内容并附加它时,问题就不会发生。

调查电子邮件的mimeparts显示文本附件mimepart出现在html mimepart之前,我想成为电子邮件的正文。但是,我不确定mimeparts的顺序是否会导致问题。

我创建电子邮件的代码如下所示:

render_to_string # Using a template
attachments[name] = File.read...
mail(options)

将这个添加到options参数中没有帮助:

content_type: 'multipart/alternative',
parts_order: [ 'text/html', 'text/enriched', 'text/plain' ] 

这个问题的原因是什么?如何强制html部分成为电子邮件的正文?

2 个答案:

答案 0 :(得分:0)

我通过附加mime类型为text/x-diff的文本文件来修复此问题:

mime_type = ... # Get mime type, e.g.: Paperclip::ContentTypeDetector.new(attachment_file_name).detect
mime_type = mime_type == 'text/plain' ? 'text/x-diff' : mime_type
attachments[attachment_file_name] = { content: File.read..., mime_type: mime_type }

通过使用text/plain交换mime类型text/x-diff,文本文件附件不会因为身体而混淆。它已正确附加到电子邮件中,并且电子邮件正文已正确发送为正文。

答案 1 :(得分:0)

对于Rails 4/5,只需使用

render_to_string mail.attachments[name] = File.read... mail(options)

邮件添加到附件即可解决问题。