其它
更多关于 Action Mailer
Action Mailer 使用模板来创建邮件与 Action Controller 使用模板渲染视图,原理类似。并且,渲染过程都会运用到 Action View 的 Rendering 模块。
Action Mailer 提供我们 Mailer 类和视图。Mailer 类放在 app/mailers 目录下,关联的视图文件在 app/views 目录下。
ActionMailer::Base 继承于类 AbstractController::Base, 又包含但不限于以下'外部'模块,根据 Ruby 规则,它们也是可调用的。包括:
模块
作用
ActionMailer::DeliveryMethods
邮件发送
ActionMailer::Previews
邮件预览
AbstractController::Rendering
渲染
AbstractController::Helpers 引进、输出辅助方法 AbstractController::Translation | I18n 相关 AbstractController::Callbacks | 支持回调 ActionView::Layouts | 视图布局等
C < B < A
有时候 B 要 extend A,并不是为了 B 自己使用,而是为了方便 C. ActionMailer::Base 部分代码充当的角色和 B 一样,它自己却没有使用,而是为了方便我们自定义的 Mailer 类调用。
如:
Mailer 里:
View 里:
另,邮件是要发送出去给别人看的,所以邮件里的 url 不支持使用相对路径。
快速生成 Mailer 和模板
通过以下命令创建 mailer 类和视图:
Inline Preview Interceptor
Rails 自带的拦截器,可以将邮件里的图片 src 转换 data,以方便显示。 原因有多个,其中之一:有的邮件客户端会过滤图片的,通过转换可以提高图片的显示概率。
默认已经使用此拦截器,不想使用的话,需要手动删除:
Collector
mail 方法可以接收一个代码块,你可以在这里指定渲染模板的格式及内容等:
代码块里的 format
即为 Collector 的实例对象。
也只有在这个时候,这里的 Collector 才有用到。它和 AbstractController::Collector Mime 相关。
Note: 默认会发送和 mail 所在方法名同名的所有模板,不区分 Mime 格式。这也是我们常用的。
Delivery Job
使用 Active Job,配置以便延迟发送邮件。
最后更新于