Action Mailer – 轻松发送和测试邮件¶ ↑
Action Mailer 是一个用于设计邮件服务层的框架。这些层用于整合代码,用于发送密码重置邮件、注册欢迎邮件、账单发票,以及任何需要向个人或系统发送书面通知的用例。
Action Mailer 本质上是 Action Controller 和 Mail gem 的一个包装器。它提供了一种使用模板创建邮件的方式,与 Action Controller 使用模板渲染视图的方式相同。
此外,Action Mailer 类还可以用于处理收到的电子邮件,例如允许博客通过电子邮件(甚至可以是从手机发送的)接受新帖子。
您可以在 Action Mailer 基础指南中阅读更多关于 Action Mailer 的信息。
发送邮件¶ ↑
该框架通过初始化您想要在邮件模板中使用的任何实例变量,然后调用 mail 来发送邮件来工作。
它可以很简单地这样做:
class Notifier < ActionMailer::Base default from: 'system@loudthinking.com' def welcome(recipient) @recipient = recipient mail(to: recipient, subject: "[Signed up] Welcome #{recipient}") end end
邮件正文是通过使用 Action View 模板(常规的 ERB)创建的,该模板包含在 mailer action 中声明的实例变量。
所以,对应上面方法的正文模板可能看起来像这样:
Hello there, Mr. <%= @recipient %> Thank you for signing up!
如果收件人是 “david@loudthinking.com”,生成的邮件将如下所示:
Date: Mon, 25 Jan 2010 22:48:09 +1100
From: system@loudthinking.com
To: david@loudthinking.com
Message-ID: <4b5d84f9dd6a5_7380800b81ac29578@void.loudthinking.com.mail>
Subject: [Signed up] Welcome david@loudthinking.com
Mime-Version: 1.0
Content-Type: text/plain;
charset="US-ASCII";
Content-Transfer-Encoding: 7bit
Hello there,
Mr. david@loudthinking.com
Thank you for signing up!
要发送邮件,只需调用该方法,然后对返回值调用 deliver_now。
调用该方法会返回一个 Mail Message 对象。
message = Notifier.welcome("david@loudthinking.com") # => Returns a Mail::Message object message.deliver_now # => delivers the email
或者您可以链式调用方法,如下所示:
Notifier.welcome("david@loudthinking.com").deliver_now # Creates the email and sends it immediately
设置默认值¶ ↑
可以设置默认值,这些值将在 Action Mailer 类中的每个方法中使用。要实现此功能,只需调用您从 ActionMailer::Base 免费获得的公共类方法 default。此方法接受一个 Hash 作为参数。您可以使用任何邮件拥有的标头,如 :from 作为键。您也可以将字符串作为键传递,例如 “Content-Type”,但 Action Mailer 会为您处理这个问题,所以您不必担心。最后,也可以传递一个 Proc,它将在需要时进行评估。
请注意,使用此方法设置的每个值都将被覆盖,如果您在 mailer 方法中使用相同的键。
示例
class AuthenticationMailer < ActionMailer::Base
default from: "awesome@application.com", subject: Proc.new { "E-mail was generated at #{Time.now}" }
.....
end
配置¶ ↑
Base 类拥有完整的配置选项列表。下面是一个例子:
ActionMailer::Base.smtp_settings = { address: 'smtp.yourserver.com', # default: localhost port: '25', # default: 25 user_name: 'user', password: 'pass', authentication: :plain # :plain, :login or :cram_md5 }
下载与安装¶ ↑
可以使用 RubyGems 安装最新版本的 Action Mailer:
$ gem install actionmailer
源代码可以作为 Rails 项目的一部分在 GitHub 上下载。
许可¶ ↑
Action Mailer 在 MIT 许可下发布。
支持¶ ↑
API 文档位于:
Ruby on Rails 项目的错误报告可在此处提交:
功能请求应在此处的 rubyonrails-core 论坛上讨论:
- 模块 ActionMailer::Callbacks
- 模块 ActionMailer::DeliveryMethods
- 模块 ActionMailer::FormBuilder
- 模块 ActionMailer::MailHelper
- 模块 ActionMailer::Parameterized
- 模块 ActionMailer::Previews
- 模块 ActionMailer::QueuedDelivery
- 模块 ActionMailer::Rescuable
- 模块 ActionMailer::TestHelper
- 模块 ActionMailer::VERSION
- 类 ActionMailer::Base
- 类 ActionMailer::Collector
- 类 ActionMailer::InlinePreviewInterceptor
- 类 ActionMailer::MessageDelivery
- 类 ActionMailer::NonInferrableMailerError
- 类 ActionMailer::Preview
- 类 ActionMailer::TestCase
类公共方法
deliver_all_later(*deliveries, **options) 链接
一次性将多个电子邮件排队,通过 Active Job 发送。当单个作业运行时,它将使用 deliver_now 发送电子邮件。
来源: 显示 | 在 GitHub 上
# File actionmailer/lib/action_mailer/message_delivery.rb, line 9 def deliver_all_later(*deliveries, **options) _deliver_all_later("deliver_now", *deliveries, **options) end
deliver_all_later!(*deliveries, **options) 链接
一次性将多个电子邮件排队,通过 Active Job 发送。当单个作业运行时,它将使用 deliver_now! 发送电子邮件。这意味着消息将绕过 perform_deliveries 和 raise_delivery_errors 的检查而发送,所以请谨慎使用。
来源: 显示 | 在 GitHub 上
# File actionmailer/lib/action_mailer/message_delivery.rb, line 17 def deliver_all_later!(*deliveries, **options) _deliver_all_later("deliver_now!", *deliveries, **options) end
eager_load!() 链接
来源: 显示 | 在 GitHub 上
# File actionmailer/lib/action_mailer.rb, line 61 def self.eager_load! super require "mail" Mail.eager_autoload! Base.descendants.each do |mailer| mailer.eager_load! unless mailer.abstract? end end
gem_version() 链接
返回当前加载的 Action Mailer 版本,格式为 Gem::Version。
来源: 显示 | 在 GitHub 上
# File actionmailer/lib/action_mailer/gem_version.rb, line 5 def self.gem_version Gem::Version.new VERSION::STRING end
version() 链接
返回当前加载的 Action Mailer 版本,格式为 Gem::Version。
来源: 显示 | 在 GitHub 上
# File actionmailer/lib/action_mailer/version.rb, line 8 def self.version gem_version end