发送带附件的电子邮件

我有一个邮件如下:

class Payments::LateNoticesMailer < AsyncMailer def notice(payment_id) @payment = PaymentDecorator.find(payment_id) @invoice = @payment.invoice template = "payments/invoices/#{@payment.made_with_type.downcase}/show" attachments["#{@payment.invoice_filename}.pdf"] = WickedPdf.new.pdf_from_string( render_to_string( pdf: @payment.invoice_filename, formats: [:pdf], template: template, layout: "layouts/pdf.html")) mail to: @payment.payer_email, from: '"RentingSmart" ', cc: @payment.landlord_email, subject: "*** Your rent payment of #{@payment.amount_due} is overdue ***" end end 

我用SendGrid发送的。 这是我的问题,如果我通过Gmail打开电子邮件,一切都很好,电子邮件的文本就在那里,并附上附件。 但是,如果我使用OSX的Mail.app或我的iPhone打开它,我只需得到以下内容:

这是MIME格式的多部分消息…

有人有任何提示吗? 我想我正在遵循Rails指南。

这是我拨打Payments::LateNoticesMailer.notice(payment.id).deliver

根据ActionMailer :: Base的api文档,如果使用多个模板类型,则会渲染所有模板类型,并且mime类型会自动设置为multipart / alternative。

如果添加附件,附件将放置在多部件/混合容器内。

第一个问题:你是否正在渲染其他类型的文本和HTML? 我不建议发送只有pdf部分的电子邮件。 即使text和html部分只是指示收件人打开附件,它们也应该在那里。 理想情况下,text / html部分中会有更多信息。

其次,您是在尝试查看内联的pdf,而不是附件?

您能看一下电子邮件的原始来源并使用您所看到的结构更新您的post吗? 标题中将设置初始mime类型。 它看起来像这样:

 Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="--==_mimepart_50596418be947_c7223fec9d834d3874256"; charset=UTF-8 Content-Transfer-Encoding: 7bit 

这表示要遵循的部分不是相同信息的替代版本,而是指示电子邮件客户端明确地显示它们。

稍后在电子邮件中,您的文本和HTML部分应继续进行以下操作:

 ----==_mimepart_50596418be947_c7223fec9d834d3874256 Date: Wed, 19 Sep 2012 06:20:12 +0000 Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="--==_mimepart_50596418be468_c7223fec9d834d38741a5"; charset=UTF-8 Content-Transfer-Encoding: 7bit 

最后,编码的pdf部分应该有一个mime头像:

 ----==_mimepart_50596418be947_c7223fec9d834d3874256 Date: Wed, 19 Sep 2012 06:20:12 +0000 Mime-Version: 1.0 Content-Type: application/pdf; charset=UTF-8; filename=terms.pdf Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=terms.pdf 

通过一个简单的测试电子邮件,我只是发送给自己的文本,HTML部分和大型pdf,我可以在我的iPhone上查看电子邮件。 它显示了html部分和一个允许我下载pdf的图标。

某些电子邮件客户端可能需要电子邮件才能显示纯文本部分才能正确显示。

我刚刚将Rails应用程序从2.3转换为3.2时遇到此消息。 我以为我正确地转换了邮件,但旧版本在选项中指定了content_type: "multipart/mixed" 。 但是,当我删除它时,我收到了附件,HTML和纯文本正确呈现。 我认为在那里设置那个设置会覆盖Rails在不同类型的内容中所做的任何事情,这不是我想要的。 感谢我在这方面引导我的原始答案。