ActionMailer Preview 추천

6209 단어 mail루비Rails
Rails에서 메일을 보내려면 ActionMailer라는 기능이 있습니다. 내용의 확인에는 letter_opener 등의 훌륭한 Gem이 있는 것 외에 테스트도 작성할 수 있다. 여기에서는 메일의 내용을 확인하기 위한 또 다른 방법, ActionMailer::Preview(이하 단순히 「미리 보기」)를 소개한다.

만들기



특별한 명령은 없고, rails generate mailer 의 때에 동시에 작성된다.
$ rails g mailer sample
      create  app/mailers/sample_mailer.rb
      invoke  slim
      create    app/views/sample_mailer
      invoke  rspec
      create    spec/mailers/sample_spec.rb
      create    spec/mailers/previews/sample_preview.rb

이 중 spec/mailers/previews/sample_preview.rb가 미리보기입니다. 내용을 보자.

spec/mailers/previews/sample_preview.rb
# Preview all emails at http://localhost:3000/rails/mailers/sample
class SamplePreview < ActionMailer::Preview

end

ActionMailer::Preview 를 상속한 클래스인 것을 알 수 있다. 코멘트에 URL이 쓰여 있으므로, 서버를 시작해 액세스 해 본다.



메일 클래스 이름 "Sample"만 표시됩니다. 여기에서 내용을 구현한다.

사용법



준비



미리보기 전에 먼저 메일을 구현합니다. 심플하게 이런 느낌.

app/mailers/sample_mailer.rb
class SampleMailer < ApplicationMailer
  def welcome(member)
    @member = member
    mail to: @member.email, subject: 'Sample mailer'
  end
end

app/views/sample_mailer/welcome.text.erb
<%= @member.name_sei + ' ' + @member.name_mei %> 様

ご登録ありがとうございます。

미리보기 구현



프리뷰에는, 메일 오브젝트를 return 하는 메소드를 구현한다. 간단한 예라면 이렇게 된다.

spec/mailers/previews/sample_preview.rb
# Preview all emails at http://localhost:3000/rails/mailers/sample
class SamplePreview < ActionMailer::Preview
  def welcome
    member = Member.new(name_sei: '菅田', name_mei: '将暉', email: '[email protected]')
    SampleMailer.welcome(member)
  end
end

방금전의 URL에 액세스하면, 항목이 하나 증가하고 있다.



링크를 클릭하면 메일 내용을 확인할 수 있습니다.



응용편



미리보기에는 동일한 (※) 메일러를 호출하는 다른 메서드가 정의 될 수 있습니다. 조건에 따라 내용이 바뀌는 메일이라고 편리하다.
※다른 메일러를 호출해도 좋지만, 혼란의 원이므로 추천하지 않는다.
또한, seed 데이터가 있으면 그것도 이용할 수 있다.

spec/mailers/previews/sample_preview.rb
# Preview all emails at http://localhost:3000/rails/mailers/sample
class SamplePreview < ActionMailer::Preview
  def welcome
    member = Member.new(name_sei: '菅田', name_mei: '将暉', email: '[email protected]')
    SampleMailer.welcome(member)
  end

  def welcome_db
    member = Member.first
    SampleMailer.welcome(member)
  end
end



사용소



메일을 보내는 조건이 복잡한 경우, 화면 조작을 튕겨 메일의 내용을 확인할 수 있다. 이것은 letter_opener에없는 이점입니다.
  • 항목이 많은 입력 양식을 채우고 submit 하지 않으면 제출되지 않는 메일
  • rake task에서 보낸 메일
  • 특정 조건을 충족하는 수신자에게만 전송되는 메일 등 ...

  • 특히 업무 시스템의 경우 메일의 활약 기회는 아직 많을 것. 잘 사용하면 확인 작업이 크게 편해진다 ActionMailer::Preview를 꼭 활용하자.

    좋은 웹페이지 즐겨찾기