#課題
Action Mailbox を実装してみたら意外と苦戦したので、未来の自分の為に纏め。
最低限の実装で取り敢えず動くところが目標です。
#前提
- 既に記録対象となるRailsサーバはAWS(EC2)で動作
- DNSはAWS(Route53)を使用
- メール配信サービスはSendgridを使用
#やること
- ActionMailbox を導入して受け取ったPOSTをRailsでよろしく処理する準備
- メールをSendgridに送る為、Sendgrid宛のmxレコードをRoute53に作成
- Sendgridから受け取ったメールをRailsの特定URLにPOSTする設定を投入
#ActionMailboxの導入
Rails6では初期状態から以下コマンドでActionMailboxをインストールできます。
$ rails action_mailbox:install
ActiveStorageとActionMailboxのMigration Fileが作成されるのでmigrateして置きます。
この二つのテーブルの役割の説明は割愛します。
$ rails db:migrate
以下作成されたばかりの app/mailboxes/application_mailbox.rb です。
ここに受け取ったメールの処理を加えて行きます。
class ApplicationMailbox < ActionMailbox::Base
# routing /something/i => :somewhere
end
細かい事は沢山できますが、まずは単純に受けとった全てのメールに対して処理する内容とします。
class ApplicationMailbox < ActionMailbox::Base
routing all: :replies
end
class RepliesMailbox < ApplicationMailbox
def process
#Do something!!
end
end
この時点で、以下URLにアクセスするとローカルで挙動が確認できます。
http://localhost:3000/rails/conductor/action_mailbox/inbound_emails/new
外部からメールを受け取るようのパスワードを設定します。
$ EDITOR="vi" bin/rails credentials:edit -e production
action_mailbox:
ingress_password: 'greatpassword'
最後に何処のメール配信サービスからリクエストが来るのか(今回はsendgrid)設定して完了です。
class ApplicationMailbox < ActionMailbox::Base
##省略##
config.action_mailbox.ingress = :sendgrid
end
#Sendgridの登録と設定
- こちらからSendgridに登録します。
- settings -> Sender Authentication -> Domain Authenticationと選択します。
- CNAMEを3つ入力しろと言われるのでRoute53に記載して確認します。
----------ここから先はRoute53の設定が完了していることが前提です-----------
- settings -> Inbound Parse -> Add Host & URL と選択します。
- MXレコードとして記載したホスト名とURLを入力します。また、'POST the raw, full MIME message'のチェックも入れてください
[URL Example]
https://actionmailbox:greatpassword@host.example.com/rails/action_mailbox/sendgrid/inbound_emails
#Route53の設定
以上で取り急ぎ動作すると思います。
#参考情報
Action Mailbox Basics
https://guides.rubyonrails.org/action_mailbox_basics.html
Rails 6のAction Mailboxを使ってみよう(翻訳)
https://techracho.bpsinc.jp/hachi8833/2020_03_05/88539
Rails6で導入されるAction Mailboxを試してみた
https://bagelee.com/programming/ruby-on-rails/rails6-action-mailbox/