iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 20
0

大綱:

  • 寄發信件

在 Rails 要寄發信件其實滿容易的,有內建的類別(ActionMailer)可以輕鬆的完成這件事。

寄發信件
在 Rails 內建的產生器中,除了我們常用的 scaffold、controller、model 以及 migration 之外,也可使用 mailer 這個產生器來幫你建立寄信功能所需要的基本架構。根據此次的專案,我們使用 Rails 內建的 mailer 產生器來產生需要的檔案,分別是:
rails g mailer ItHelp
rails g mailer BatchTask
分別是產生給負責 Apple 的同仁以及上傳檔案時錯誤的寄發。

透過 mailer 產生器,建立了一個 ITHelpMailer、BatchTaskMailer 類別以及 app/views/batch_task_mailerapp/views/it_help_mailer 目錄。

application_mailer.rb 檔案的內容:

class ApplicationMailer < ActionMailer::Base
  layout 'mailer'

  private

  def subject_prefix
    return '' if Rails.env.production?

    "[#{Rails.env}] "
  end
end

這裡定義了一個私有方法 subject_prefix 是指在不同的環境下,主題也會回傳不同。
layout 是指會去找 app/views/layouts/mailer 這個樣版。

it_help_mailer.rb 檔案的內容:

class ITHelpMailer < ActionMailer::Base
end

batch_task_mailer.rb 檔案的內容:

class BatchTaskMailer < ActionMailer::Base
end

其實 Mailer 的檔案結構,跟 Controller 有點像:
https://ithelp.ithome.com.tw/upload/images/20190921/20112656u6ehVWfw4D.png

如何寄發信件呢?,這裡以 ITHelpMailer 當作範例,格式參考如下:

class ITHelpMailer < ApplicationMailer
  default from: 'trck_notification@morrisonexpress.com',
          to: 'trck_help@morrisonexpress.com'

  def mawb214_failed(hawb_record, dn_shipment)
    @hawb_record = hawb_record
    @dn_shipment = dn_shipment

    mail subject: "#{subject_prefix}MAWB Update (HAWB::Record ##{hawb_record.id}, DN::Shipment ##{dn_shipment.id})" \
                  ' is failed to send EDI214'
  end

  def hawb214_failed(hawb_record, dn_shipment, user)
    @hawb_record = hawb_record
    @dn_shipment = dn_shipment
    @user = user

    mail subject: "#{subject_prefix}HAWB Update (HAWB::Record ##{hawb_record.id}, DN::Shipment ##{dn_shipment.id})" \
                  ", User = #{user.email}  is failed to send EDI214"
  end
end

這裡分別定義了 mawb214_failed(hawb_record, dn_shipment) 以及 hawb214_failed(hawb_record, dn_shipment, user) 這兩個方法,並且各別傳了 hawb_record, dn_shipment, user 這三個值當參數,分別是貨物訂單、貨物種類、所屬 User,一但有任何狀況,就會寄信給 IT 通知有貨物訂單有狀況了。


上一篇
[Day19] Ruby on Rails - Model 資料驗證
下一篇
[Day21] Ruby on Rails - Rails enum and alias enum 的使用說明
系列文
Junior Ruby on Rails 工程師的心得與自我挑戰 30 天 (單身狗轉移注意力之歷練)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言