当我尝试将一个文本文件(带有.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部分成为电子邮件的正文?
答案 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)
将邮件添加到附件即可解决问题。