略過內容 略過搜尋

Action Mailer – 輕鬆寄信和測試

Action Mailer 是用於設計電子郵件服務層的架構。這些層用於整合發送忘記的密碼、註冊時的歡迎電子郵件、帳單發票,以及任何其他需要以書面通知個人或其他系統的使用案例。

Action Mailer 基本上是 Action Controller 和 Mail 程式集的包裝。它提供一種以類似 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)建立的,其中包含在郵件動作中宣告的實例變數。

因此,上面方法的對應主體範本可能是這樣

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

設定預設值

可以設定預設值,這些預設值將會用於您的 Action Mailer 類別中的每個方法。要實作這個功能,您只需要呼叫 public 類別方法 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
}

下載和安裝

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

$ gem install actionmailer

原始碼可作為 GitHub 上的 Rails 專案的一部分一起下載

授權

Action Mailer 在 MIT 授權下發布

支援

API 說明文件在

Ruby on Rails 專案的 bug 報告可以提交到這裡

功能要求應在這裡的 rails-core 郵寄清單上討論

命名空間
方法
E
G
V

類別公開方法

eager_load!()

# 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 型別表示。

# 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 型別表示。

# File actionmailer/lib/action_mailer/version.rb, line 8
def self.version
  gem_version
end