The*_*hop 5 ruby-on-rails actionmailer email-attachments sendgrid wicked-pdf
我有一封邮件,如下所示:
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" <no-reply@rentingsmart.com>',
cc: @payment.landlord_email,
subject: "*** Your rent payment of #{@payment.amount_due} is overdue ***"
end
end
Run Code Online (Sandbox Code Playgroud)
我使用SendGrid发送。这是我的问题,如果我通过Gmail打开电子邮件,则一切正常,电子邮件文本在那里,并且附件已附上。但是,如果我使用OSX的Mail.app或在iPhone上打开它,则会得到以下信息:
这是MIME格式的多部分消息...
有人有提示吗?我认为我正确地遵循了Rails指南。
这是我打的电话 Payments::LateNoticesMailer.notice(payment.id).deliver
根据ActionMailer::Base的 api 文档,如果使用多个模板类型,则所有模板类型都会被渲染,并且 mime-type 会自动设置为 multipart/alternative。
如果添加附件,附件将放置在多部分/混合容器内。
第一个问题:您是否渲染其他类型,例如文本和html?我不建议发送仅包含 pdf 部分的电子邮件。即使文本和 html 部分只是指示收件人打开附件,它们也应该在那里。理想情况下,text/html 部分会有更多信息。
其次,您是否尝试以内联方式查看 pdf,而不是作为附件?
您能否查看电子邮件的原始来源并使用您看到的结构更新您的帖子?标头中将设置一个初始 mime 类型。它看起来像这样:
Mime-Version: 1.0
Content-Type: multipart/mixed;
boundary="--==_mimepart_50596418be947_c7223fec9d834d3874256";
charset=UTF-8
Content-Transfer-Encoding: 7bit
Run Code Online (Sandbox Code Playgroud)
这表示接下来的部分不是相同信息的替代版本,而是指示电子邮件客户端清楚地显示它们。
稍后在电子邮件中,您的文本和 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
Run Code Online (Sandbox Code Playgroud)
最后,编码的 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
Run Code Online (Sandbox Code Playgroud)
通过我刚刚发送给自己的简单测试电子邮件,其中包含文本、html 部分和大型 pdf,我可以在 iPhone 上查看该电子邮件。它显示了 html 部分和一个让我下载 pdf 的图标。