跳到內文 跳到搜尋

Action Mailer – 簡便的電子郵件傳遞與測試

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

Action Mailer 本質上是 Action Controller 和 Mail 這個 gem 的包裝器。它提供使用模板製作電子郵件的方法,就像 Action Controller 用模板呈現檢視一樣。

此外,Action Mailer 類別可用於處理收件的電子郵件,例如讓部落格能接受來自電子郵件的新文章(甚至可以從手機傳送)。

可以在 Action Mailer Basics 指南中進一步瞭解 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 類別中的每個方法。要實作這個功能,你只需要呼叫公用類別方法 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 郵件列表上討論