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 郵寄清單上討論
- 模組 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