跳至内容 跳至搜索

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: '[email protected]'

  def welcome(recipient)
    @recipient = recipient
    mail(to: recipient,
         subject: "[Signed up] Welcome #{recipient}")
  end
end

电子邮件正文通过使用 Action View 模板(常规 ERB)创建,该模板具有在邮件器操作中声明的实例变量。

因此,上面方法对应的正文模板可能如下所示

Hello there,

Mr. <%= @recipient %>

Thank you for signing up!

如果收件人被指定为“[email protected]”,则生成的电子邮件将如下所示

Date: Mon, 25 Jan 2010 22:48:09 +1100
From: [email protected]
To: [email protected]
Message-ID: <[email protected]>
Subject: [Signed up] Welcome [email protected]
Mime-Version: 1.0
Content-Type: text/plain;
      charset="US-ASCII";
Content-Transfer-Encoding: 7bit

Hello there,

Mr. [email protected]

Thank you for signing up!

为了发送邮件,您只需调用该方法,然后在返回值上调用 deliver_now

调用该方法将返回一个 Mail 消息对象

message = Notifier.welcome("[email protected]")   # => Returns a Mail::Message object
message.deliver_now                                    # => delivers the email

或者,您可以像这样将方法链接在一起

Notifier.welcome("[email protected]").deliver_now # Creates the email and sends it immediately

设置默认值

可以设置默认值,这些默认值将在您的 Action Mailer 类中的每个方法中使用。要实现此功能,您只需调用公共类方法 default,该方法可从 ActionMailer::Base 免费获得。此方法接受 Hash 作为参数。您可以使用电子邮件消息拥有的任何标题,例如 :from 作为键。您也可以传递字符串作为键,例如“Content-Type”,但 Action Mailer 为您开箱即用地执行此操作,因此您无需担心。最后,还可以传递一个 Proc,该 Proc 在需要时将被评估。

请注意,如果您在邮件器方法中使用相同的键,则使用此方法设置的每个值都将被覆盖。

示例

class AuthenticationMailer < ActionMailer::Base
  default from: "[email protected]", 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
}

下载和安装

Action Mailer 的最新版本可以使用 RubyGems 安装

$ gem install actionmailer

源代码可以作为 GitHub 上的 Rails 项目的一部分下载

许可

Action Mailer 在 MIT 许可下发布

支持

API 文档位于

Ruby on Rails 项目的错误报告可以在这里提交

功能请求应在此处的 rails-core 邮件列表中讨论