添加附件会破坏邮件内容轨道

Posted

技术标签:

【中文标题】添加附件会破坏邮件内容轨道【英文标题】:Adding an attachment breaks mail content rails 【发布时间】:2021-11-05 09:32:43 【问题描述】:

我使用 Rails 4.2 应用程序,我需要将邮件的 PDF 版本附加到邮件本身。我找到了一种将渲染视图渲染和转换为 PDF 的方法,但是在邮件中添加附件会导致不发送其内容。 带附件发送代码:

def failed_charge(账单) @monthly_bill = 账单 @organization = bill.organization @edit_account_url = edit_account_url(组织) I18n.with_locale(organization.locale) 做 @date = I18n.l Time.now.utc.to_date,格式::medium @display_period = [bill.period_start, bill.period_end] .map |t| I18n.l(t.to_date, 格式: :medium).strip 。加入(' - ') invoice_content = WickedPdf.new.pdf_from_string( render_to_string(模板:'billing_mailer/failed_charge'), 边距:上:0,下:0,左:0,右:0 ) File.open('invoice.pdf', 'wb') 做 |file| file.write invoice_content 结尾 附件['invoice.pdf'] = invoice_content 邮件( 至:bill.billing_email, 密件抄送:[INVOICES_EMAIL_FULL,SUPPORT_EMAIL_FULL], 主题:I18n.t('billing_mailer.subject_failed_charge'), ) 结尾 结尾

结果邮件:

日期:2021 年 9 月 8 日,星期三 19:13:16 +0400 来自: GlassFrog 计费 至:sally@fictional.com 消息 ID: 主题:向您的 GlassFrog 信用卡收取费用时出现问题 哑剧版:1.0 内容类型:多部分/混合; 边界="--==_mimepart_6138d30c9a0db_7215116ac5527d"; 字符集=UTF-8 内容传输编码:7bit

不带附件的代码:

def failed_charge(账单) @monthly_bill = 账单 @organization = bill.organization @edit_account_url = edit_account_url(组织) I18n.with_locale(organization.locale) 做 @date = I18n.l Time.now.utc.to_date,格式::medium @display_period = [bill.period_start, bill.period_end] .map |t| I18n.l(t.to_date, 格式: :medium).strip 。加入(' - ') invoice_content = WickedPdf.new.pdf_from_string( render_to_string(模板:'billing_mailer/failed_charge'), 边距:上:0,下:0,左:0,右:0 ) File.open('invoice.pdf', 'wb') 做 |file| file.write invoice_content 结尾 邮件( 至:bill.billing_email, 密件抄送:[INVOICES_EMAIL_FULL,SUPPORT_EMAIL_FULL], 主题:I18n.t('billing_mailer.subject_failed_charge'), ) 结尾 结尾

结果邮件:

日期:2021 年 9 月 8 日,星期三 19:22:18 +0400 来自: GlassFrog 计费 至:sally@fictional.com 消息 ID: 主题:向您的 GlassFrog 信用卡收取费用时出现问题 哑剧版:1.0 内容类型:多部分/替代; 边界="--==_mimepart_6138d52a674b5_75fc116ac69560"; 字符集=UTF-8 内容传输编码:7bit ----==_mimepart_6138d52a674b5_75fc116ac69560 内容类型:文本/纯文本; 字符集=UTF-8 内容传输编码:quoted-printable GlassFrog 徽标 2021 年 9 月 8 日 ****************************************************** ********* 向您的 GlassFrog 信用卡收取费用时出现问题 ****************************************************** ********* 亲爱的莎莉付款人, 上个月(2015 年 2 月 1 日 =E2=80=93 2015 年 2 月 28 日)从您的 GlassFrog 帐户的信用卡扣款时出现问题。请 在 GlassFrog 中更新您的信用卡信息,方法是访问您的 组织的计费和计划管理页面 (http://app.glassfrog.local:16124/accounts/15570897/edit)。我们 将在 10 日再次尝试从您的卡中扣款 月。 请注意,逾期 10 天的帐户将被降级 从高级版到免费版,功能有限,直到付款 当前的。 如果您有任何问题或需要任何帮助,请不要犹豫 回复此电子邮件或联系我们 (http://glassfrog.com/contact)。 问候, GlassFrog 计费 到: 计费外壳 从: HolacracyOne, LLC 索登路 12333 号 Ste B #33583 德克萨斯州休斯顿 77080-2059 美国 -------- 细节 -------- 发票 # 104275561 日期 描述 数量 2015 年 2 月 1 日 - 2015 年 2 月 28 日 高级计划 8 个用户 @9/月 每个 72.00 美元 全部的 72.00 美元 参考。 org/15570897 HolacracyOne, LLC 索登路 12333 号Ste B #33583, 休斯顿, 德克萨斯 77080-2059= ----==_mimepart_6138d52a674b5_75fc116ac69560 内容类型:文本/html; 字符集=UTF-8 内容传输编码:quoted-printable = = 玻璃蛙 2021 年 9 月 8 日 向您的 GlassFrog 信用卡收取费用时出现问题 亲爱的莎莉付款人, 向您的 GlassFrog 帐户的信用卡收费时出现问题 = 上个月(2015 年 2 月 1 日 =E2=80=93 2015 年 2 月 28 日)。请更新您的 c= 通过访问您组织的 B= 在 GlassFrog 中重新编辑卡信息 生病和计划管理页面。我们将进行第二次尝试= 在每月 10 日从您的卡中扣款。 请注意,逾期 10 天的帐户将从 Prem= 降级 ium 到免费,功能有限,直到当前付款为止。 如果您有任何问题或需要任何帮助,请不要犹豫,repl= y 到此电子邮件或继续= 行动我们。 问候, GlassFrog 计费 = 到: 计费外壳 从: HolacracyOne, LLC 索登路 12333 号 Ste B #33583 德克萨斯州休斯顿 77080-2059 美国

详情

发票 # 104275561 日期 描述 数量 2015 年 2 月 1 日 -= 2015 年 2 月 28 日= 高级计划 8 个用户 @9/月每个 72.00 美元 全部的 72.00 美元 参考。 org/15570897 HolacracyOne, LLC 索登路 12333 号Ste B #33583,休斯顿,德克萨斯州 77080-2059 ----==_mimepart_6138d52a674b5_75fc116ac69560--

附:写入文件用于调试目的

【问题讨论】:

第一个实现生成的电子邮件表示包含Content-Type: multipart/mixed 的事实意味着 ActionMailer 知道有一个附件,并且可能会尝试呈现它。表示只是切断它的位置似乎很奇怪。您确定没有正确生成电子邮件的其余部分吗? 是的,即使是单元测试也表明邮件正文是空的 【参考方案1】:

问题出在基类中,那里有一行:

  after_action :convert_ul_to_table

  def convert_ul_to_table
    body = message.body.to_s
    message.body = to_table(Rinku.auto_link(body))
  end

添加附件检查解决了问题:

  def convert_ul_to_table
    return nil unless message.attachments.empty?

    body = message.body.to_s
    message.body = to_table(Rinku.auto_link(body))
  end

【讨论】:

以上是关于添加附件会破坏邮件内容轨道的主要内容,如果未能解决你的问题,请参考以下文章

为啥我将邮件内容发送到 Hotmail 帐户时会作为附件发送?

无法添加附件

PHP - 发送带附件的电子邮件不显示邮件内容

要把excel表格中的内容截图到邮件中怎么弄?

向 .NET 电子邮件添加附件

如何在outlook中查找邮件附件内容?