跳到內容 跳到搜尋

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: '[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,它會在需要時進行評估。

請注意,如果你在郵件寄送方法中使用相同的金鑰,你使用此方法設定的每個值都會被覆寫。

範例

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 郵件清單中討論