加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 发送带附件的电子邮件

发布时间:2020-12-17 02:18:51 所属栏目:百科 来源:网络整理
导读:我有一个邮件如下: 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" attach
我有一个邮件如下:

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

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

This is a multi-part message in MIME format…

有人有任何提示吗?我想我正确地遵循Rails指南.

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

解决方法

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

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

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

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

您能看一下电子邮件的原始来源并使用您所看到的结构更新您的帖子吗?标题中将设置初始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的图标.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读