メール配信

マルチパート配信

デフォルトでは、メーラーはマルチパート電子メールを配信します。マルチパート電子メールには、HTMLとテキスト部分があります。これがジェネレータが2つのテンプレートを作成する理由です。

両方のテンプレートをレンダリングし、複数のメッセージとして配信するには、次のようにします。

Mailers::Welcome.deliver

花見メーラは、いくつかのシナリオに適応するのに十分柔軟です。

 

単一部品納品

私たちのアプリケーションのユーザーがHTMLやテキスト形式の電子メールを選ぶことができるとしましょう。この構成によれば、希望のフォーマットのみを選択的に送信したい:

Mailers::Welcome.deliver(format: :html)
# or
Mailers::Welcome.deliver(format: :txt)

1つのフォーマットのみを使用することにより、指定されたテンプレートのみをレンダリングして配信します。

 

テンプレートを削除

私たちのアプリケーションでは、HTMLテンプレートのみを配布したい場合は、テキストテンプレート(拡張子)を安全に削除して.txt、毎回Mailers::Welcome.deliverHTMLメッセージのみを送信します。

テキストの電子メールだけを送信し、HTMLテンプレート(.html拡張子)を削除するだけであれば、同じ原則が適用されます。

納品時には、メーラーは少なくとも1つのテンプレートを利用できる必要があります。

 

構成

電子メールメッセージに使用するゲートウェイを指定するために、設定を使用できますdelivery

 

組み込みメソッド

配信戦略に変換されたシンボルを受け取ります。

  • Exim(:exim
  • Sendmail(:sendmail
  • SMTP(:smtpローカルSMTPインストールの場合)
  • SMTP接続(:smtp_connection経由、Net::SMTP– リモートSMTPインストールの場合)
  • テスト(:testテスト目的で)

:smtp本番環境ではデフォルトでSMTP()に:test設定され、開発とテストのために自動的に設定されます。

2番目のオプションの引数は、設定に渡す任意の設定のセットです:

# lib/bookshelf.rb
# ...
Hanami::Mailer.configure do
  # ...
  delivery do
    development :test
    test        :test
    production  :smtp,
      address:              "smtp.gmail.com",
      port:                 587,
      domain:               "bookshelf.org",
      user_name:            ENV['SMTP_USERNAME'],
      password:             ENV['SMTP_PASSWORD'],
      authentication:       "plain",
      enable_starttls_auto: true
  end
end.load!

高度な設定については、Mikel Lindsaarのmail 宝石をご覧ください。Hanami :: Mailerは低レベルで、この頑丈なライブラリーを使用します。

花見が使用しているためmailである宝石、事実上の Rubyのための標準を、私たちはすべての最も一般的なのゲートウェイ・ベンダーとの相互運用性を持つことができます。
SendgridMandrillPostmarkMailgunのように、SMTPを使用し、詳細な設定ガイドがあります。

 

カスタムメソッド

カスタム配信ワークフローが必要な場合は、クラスをコンフィグレーションに渡すことができます。

Mandrill APIを使用して電子メールを配信する方法の例を次に示します。

# lib/bookshelf.rb
# ...
require 'lib/mailers/mandrill_delivery_method'

Hanami::Mailer.configure do
  # ...
  delivery do
    production MandrillDeliveryMethod, api_key: ENV['MANDRILL_API_KEY']
  end
end.load!

オブジェクトは、に反応しなければなりません#initialize(options = {})し、する#deliver!(mail)場合は、mailのインスタンスですMail::Message

class MandrillDeliveryMethod
  def initialize(options)
    @api_key = options.fetch(:api_key)
  end

  def deliver!(mail)
    send convert(mail)
  end

  private

  def send(message)
    gateway.messages.send message
  end

  def convert(mail)
    # Convert a Mail::Message instance into a Hash structure
    # See https://mandrillapp.com/api/docs/messages.ruby.html
  end

  def gateway
    Mandrill::API.new(@api_key)
  end
end

これは、カスタムポリシーを示す例に過ぎないことに注意してください。マンドリルを使用する場合は、この戦略よりもSMTPを優先してください。