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 郵件列表上討論