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
电子邮件的正文是通过使用操作视图模板(常规 ERB
)创建的,该模板具有在邮件操作中声明的实例变量。
因此,上述方法的相应正文模板可能如下所示
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 = 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
设置默认值
可以在操作邮件程序类中的每个方法中设置将在其中使用的默认值。要实现此功能,只需调用公共类方法 default
,该方法可以从 ActionMailer::Base
免费获取。此方法接受 Hash
作为参数。您可以使用电子邮件消息中包含的任何标头,例如 :from
作为键。您还可以将字符串作为键传递,例如“Content-Type”,但 Action Mailer 会自动为您执行此操作,因此您不必担心这一点。最后,还可以传递一个 Proc,它将在需要时进行评估。
请注意,如果您在邮件程序方法中使用相同的键,则使用此方法设置的每个值都将被覆盖。
示例
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
源代码可以作为 GitHub 上 Rails 项目的一部分下载
许可证
Action Mailer 在 MIT 许可证下发布
支持
API 文档位于
Ruby on Rails 项目的错误报告可以提交到这里
功能请求应在此处的 rails-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::LogSubscriber
- 类 ActionMailer::MessageDelivery
- 类 ActionMailer::NonInferrableMailerError
- 类 ActionMailer::Preview
- 类 ActionMailer::TestCase
- E
- G
- V
类公共方法
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