发送带有附件的电子邮件

2024-02-22

我有一个邮件程序如下:

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" <[email protected] /cdn-cgi/l/email-protection>',
         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


根据 api 文档ActionMailer::基础 http://api.rubyonrails.org/classes/ActionMailer/Base.html,如果使用多个模板类型,则所有模板类型都会被渲染,并且 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

这表示接下来的部分不是相同信息的替代版本,而是指示电子邮件客户端清楚地显示它们。

稍后在电子邮件中,您的文本和 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 的图标。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

发送带有附件的电子邮件 的相关文章

  • 如何运行使用 Rails 模型的 Ruby 任务?

    我有一个带有一些基本模型的 Rails 应用程序 该网站显示从其他来源检索到的数据 因此 我需要编写一个 Ruby 脚本来在数据库中创建新实例 我知道我可以使用测试挂钩来做到这一点 但我不确定这在这里是否有意义 我不确定这个任务应该是什么样
  • Rails 3.1 使用 app/assets/images/subdirectory 下的图像

    在我的 Rails 3 1 应用程序中 我将图像存储在app assets images jquery ui 我不知道如何在 CSS 中访问这些 assets image name png and assets jquery ui imag
  • Rails 验证日期范围的唯一性

    我有一个涉及员工缺勤记录的应用程序 我需要确保每条记录的开始日期和结束日期不重叠 例如 如果我输入了从今天开始到明天结束的缺勤记录 则不可能以任何方式在该日期范围内输入另一个缺勤记录 所以我不能制作一个从前天开始 然后在后天或任何更晚的日期
  • Rails 资产管道:CSS 无效

    我正在尝试使用http designshack net articles css build an animated photo wall with css http designshack net articles css build a
  • 如何检查rails上传的文件类型?

    我如何查看即将到来的文件类型 例如 csv 或 xls 请给个代码 我得到文件是这样的 aut name uploaded io original filename File open Rails root join public uplo
  • Partial、Layout、Template 渲染问题

    情况 因此 当我访问页面时 我希望能够将布局应用到部分 我想要三个具有相同布局的部分 现在 我正在尝试使用以下命令来执行此操作 where shared services essay是这样的 p blah p div blah div
  • 如何验证数值的小数位数?

    我在中间进行了验证 如下所示 validates numericality of shoe size message gt Please input a number 但这还不够 因为用户可以输入一些值 例如 42 222222221212
  • 回形针如何更改基本名称(文件名)?

    我正在尝试更改照片的基本名称 文件名 在我的模型中我有 attr accessor image url basename has attached file image styles gt original gt 300x250 gt pn
  • Rails 中的并行方法

    我的 Rails Web 应用程序有数十种方法 从调用 API 到处理查询结果 这些方法具有以下结构 def method one batch query API process data end def method nth batch
  • Ruby on Rails content_for 会自动进行 HTML 转义吗?

    使用 Rails 3 0 6 我发现在视图中 如果我执行 content for food name Macaroni Cheese 然后当我使用它回来时content for food name 那么 将被制作成 amp 已经 如果我做一
  • 如何使用 Ruby 2.7.0 修复 Rails 的警告消息

    有没有人解决这个问题Ruby 2 7 0 I used rbenv并安装了 Ruby v2 7 0 然后使用创建了一个 Rails 项目Rails v6 0 2 1 目前 通过运行之一 rails s rails s u puma rail
  • 用于 RESTful 轨道应用程序的简单面包屑

    是否有任何辅助方法 除了默认 Rails 面包屑导航 http wiki rubyonrails org rails pages Breadcrumbs 为特定页面动态生成面包屑导航 而无需在 RESTful 应用程序中传递琐碎的参数 也就
  • 使用 SendMessage 通过电子邮件发送文件附件而不保存文件

    我可以发送电子邮件和所有内容 但无法创建有效的 Attachment 放入我的电子邮件中 我在网上找到的所有示例都假设它以某种方式保存在我的计算机本地并通过路径链接它 但事实并非如此 在我的方法中 我使用 Winnovative 创建文件
  • 如何创建与 ActiveResource 对象的 ActiveRecord 关系?

    假设我正在为一家已经拥有 People 应用程序的出版公司编写一个图书馆应用程序 所以在我的图书馆应用程序中我有 class Person lt ActiveResource Base self site http api people m
  • 在 Rails 中禁用连接池以使用 PgBouncer

    我们有一个 Ruby on Rails 4 2 8 项目 可以访问大型 PostgreSQL 数据库 我们将使用 PgBouncer 添加一个新的连接池服务器 由于 PgBouncer 将处理数据库连接池 我们是否需要关闭 Rails 自动
  • 在控制台应用程序中使用 SendGrid

    是否可以在 C 的控制台应用程序中使用发送网格 我的代码不起作用 我真的不知道为什么 你可以帮帮我吗 using System using System Net using System Net Mail using SendGrid na
  • 在 Web 应用程序中显示最新的提交值?

    我有一些 Rails 应用程序 我使用 Git 作为版本控制系统 我使用 GitHub 或 Beanstalk 作为存储库主机 从理论上讲 我想要做的事情非常简单 以某种方式在 Web 应用程序的页脚中显示最新的提交 ID 号 哈希值 这样
  • 如何在服务调用后检查 rspec 中的数组更改?

    目标很简单 例如我们有一个数组 name ghost state rejected name donkey state rejected 运行服务调用后UpdateAllUsers 这会将所有用户更改为 accepted name ghos
  • 有时您可能需要重新启动 Webrick 才能看到所做的更改,这是否正确?

    我听 Kevin Skoglund lynda com 说 养成在开发过程中频繁重新启动 Webrick 的习惯是一个很好的习惯 虽然通常您不需要重新启动 Webrick 来查看更改 但他暗示在某些特殊情况下可能需要这样做 有谁知道这些情况
  • Rails 4 的 mobile_fu

    我正在尝试将我的应用程序从 Rails 3 2 13 切换到 Rails 4 在此过程中 我遇到了一个主要障碍 我使用 gem mobile fu 来确定用户是否来自移动设备 该 gem 需要 Railties 3 2 13 但 Rails

随机推荐

  • 一对多关系删除

    我有一对多的关系 class GameSystem Object dynamic var gameSystemName class games Object dynamic var gameSystemName gameSystemName
  • 有没有办法将“if case”语句编写为表达式?

    考虑这段代码 enum Type case Foo Int case Bar Int var isBar Bool if case Bar self return true else return false 真恶心 我想写这样的东西 en
  • 两个 beta 分布的乘积

    假设我有两个随机变量 X 1 1 Y 2 2 我想计算 Z XY 的分布 随机变量的乘积 With scipy 我可以通过以下方式获取单个 Beta 版的 pdf from scipy stats import beta rv beta a
  • “完成”按钮未触发 Xamarin Entry 上的“完成”事件

    我添加后iOS 上的 完成 按钮 https developer xamarin com recipes cross platform xamarin forms ios add done to keyboard 在 Xamarin For
  • 跨版本序列化和反序列化 .net 对象的最佳实践

    使用 NET XML 序列化程序将对象序列化到数据库 该对象可能会随着时间的推移而发生变化 因此数据库中同时存在多个版本 有关构建代码的最佳方法的任何建议 以便您仍然可以将此对象反序列化为最新版本 界面 地图 手动序列化等 序列化对象中有一
  • 如何在Linux中设置CLASSPATH让java找到jar文件?

    在Linux下我尝试运行一个jar文件 如下所示 java jar plantuml jar testdot 当有CLASSPATH设置为以下任意一项 文件位于 home user plantuml jar export CLASSPATH
  • LabelPropagation - 如何避免被零除?

    使用时标签传播 http scikit learn org stable modules generated sklearn semi supervised LabelPropagation html 我经常遇到这个警告 恕我直言 这应该是
  • 在 flutter 中使用 new 关键字[重复]

    这个问题在这里已经有答案了 最近开始关注flutter优达学城课程 https classroom udacity com courses ud905在尝试创建基本应用程序时 我遇到了一些我不清楚的事情 添加小部件时 我注意到同时执行这两项
  • Jquery:将ajax调用的值返回给调用者函数?

    我试图从函数返回 ajax 调用返回的值 但它只返回 未定义 如果 ajax 调用发出警报 响应 它将返回正确的值 这是代码 我做错了什么 insertCandidate live click function e var ids this
  • 复杂的SQL查询建议请

    我有三个表 其架构如下 Table Apps ID bigint USERID Bigint START TIME datetime 1 13 2013 05 03 04 42 55 2 13 2013 05 12 06 22 45 3 1
  • 在python中检测并删除锁定的文件

    我想在 Unix 上使用 python 检测文件是否被锁定 删除该文件是可以的 假设它有助于检测该文件是否被锁定 该文件最初可能是由另一个进程独占打开的 文档似乎表明 如果文件被锁定 os unlink 不一定会返回错误 Ideas 检查文
  • 调用栈和反汇编疑问

    三大疑点 1 假设我得到如下调用堆栈 user32 dll InternalCallWinProc 20 0x28 bytes user32 dll UserCallWinProcCheckWow 32 0xb7 bytes user32
  • C++11 异步仅使用一个核心

    我正在尝试在 C 中并行化一个长时间运行的函数 并使用 std async 它只使用一个核心 并不是函数的运行时间太短 因为我目前使用的测试数据大约需要 10 分钟才能运行 根据我的逻辑 我创建了 NThreads 的 Futures 每个
  • 在个人网站上使用 Google Chrome 的 OmniBox [TAB] 功能?

    我认为标题解释了一切 但无论如何我都会更深入地探讨我的问题 如何在我的网站上使用 Chrome 的多功能框 TAB 功能 由于许多用户要求我在网站上实现该功能 我对 OpenSearchDescription 进行了研究 并且在 FireF
  • Scope_Identity()、Identity()、@@Identity 和 Ident_Current() 之间有什么区别?

    I know Scope Identity Identity Identity and Ident Current 所有人都获得身份列的值 但我很想知道其中的区别 我遇到的部分争议是 应用于上述这些函数的范围是什么意思 我还想要一个使用它们
  • 使用 AngularJs 处理 Play scala 发送的分块数据

    I send chunked data with Play Scala 2 2像这样的客户端 Ok chunked data 我想在客户端可用后立即使用它们 如果我只是获取数据并将其打印出来 success 它们同时打印 即收到最后一个数据
  • python:tkinter树视图颜色没有更新

    这是我的第一篇文章 如果格式有误 请原谅 如果需要 我很乐意更改 我正在使用 Tkinter 创建一个用于科学数据分析的界面 对于分子列表 可以在单独的图中表示四个分子 另一方面 我使用树视图显示有关所有分子的一些数字 不仅仅是显示的 当树
  • 在 Cartopy、Robinson 投影中绘制直线

    我正在玩 cartopy 试图了解它是如何工作的 我尝试的第一件事与中的示例非常相似the docs https scitools org uk cartopy docs v0 16 matplotlib intro html在 将数据添加
  • 如何防止点击子表单导致主表单更新

    我的预订系统中有一个表单 其中包含一个子表单 该子表单是 Access 2010 不再具有的旧 ActiveX 日历控件的复制品 一个特殊用途是创建新预订 这意味着该表单 位于 新记录上 但是 在我确定所有数据都经过正确验证之前 我不希望写
  • 发送带有附件的电子邮件

    我有一个邮件程序如下 class Payments LateNoticesMailer lt AsyncMailer def notice payment id payment PaymentDecorator find payment i