在Rails中将邮件附加到邮件

时间:2017-10-05 19:53:20

标签: ruby-on-rails email email-attachments

在Rails 5.1 ActionMailer中,我想将Mail对象附加到电子邮件中:

def attach_mail(original_email)
  attachments['original-email.eml'] = { mime_type: 'message/rfc822', encoding: '7bit', content: original_email.to_s }
  mail to: 'postmaster', subject: 'mail should be attached'
end

但是,这不会产生有效的电子邮件。 Thunderbird列出大小为“0”的附件。部落列出了正确尺寸的附件,但没有将其识别为电子邮件。

我尝试了attachments行的变体:

attachments['original-email.eml'] = original_email
attachments['original-email.eml'] = { content: original_email.to_s }
attachments['original-email.eml'] = { mime_type: 'message/rfc822', content: original_email.to_s }

但这些都不会导致带有电子邮件附件的电子邮件。

解决方案是什么?

1 个答案:

答案 0 :(得分:1)

终于明白了。

要附加电子邮件(来自' mail' gem的邮件对象)到ActionMailer邮件,您需要指定MIME类型和编码,如下所示:

def attach_mail(original_email)
  attachments['original-email.eml'] = { mime_type: 'message/rfc822', 
    encoding: '7bit',
    content: original_email.to_s }
  mail to: 'postmaster', subject: 'mail should be attached'
end

这会创建一条multipart/mixed消息,该消息在MUA中正确显示。

但是,如果您碰巧添加任何内联附件(例如,在ActionMailer电子邮件正文中显示徽标图像),则整个邮件将具有multipart/related mime类型。我尝试过的MUA无法解释带有电子邮件附件的multipart/related邮件。

因此,在将电子邮件附加到电子邮件时,请不要添加任何内联附件。