Rails: SendGrid(Web API)とAction Mailerでメールを送信する

こんにちは、yamadaです。入社から1年半ほど経ちますが、初めての記事になります。 今回はRailsとSendGridでメール送信を行った時の手順をまとめようと思います。 Rails 5.2 SendGrid(V3 Mail Send API) sendgrid.comより APIキーの作成 まずはSendGridのAPIキーを作成します。作成方法は公式ドキュメントをご確認ください。 権限は使用目的に合わせて設定しましょう。単純なメール送信だけであれば「Mail Send」を「Full Access」にすればOKです。 APIキーを管理する - ドキュメント | SendGridより 実装 配信方法の切り替えを簡単にするため、delivery_methodを追加する形で対応しました。 参考: Action Mailerのdelivery_methodに独自の配信方法を追加する SendGridのAPIについては公式ドキュメント(jp, en)をご確認ください。 API呼び出しは公式のgemを利用しています。 リポジトリ: sendgrid/sendgrid-ruby 実際に作成したのは以下のようなコードになります。 プロジェクトの中に追加する形で対応しましたが、gemとして作成するとより良いかもしれませんね。 # config/initializers/sendgrid.rb ActionMailer::Base.add_delivery_method :sendgrid, Mail::SendGrid, api_key: xxxxxxxxxxxxxxxxxxxxxxxxxxx # config/environments/development.rb config.action_mailer.delivery_method = :sendgrid # lib/mail/send_grid.rb class Mail::SendGrid def initialize(settings) @settings = settings end def deliver!(mail) from = SendGrid::Email.new(email: mail.from.first) to = SendGrid::Email.new(email: mail.to.first) subject = mail.subject content = SendGrid::Content.new(type: ‘text/plain’, value: mail.body.raw_source) sg_mail = SendGrid::Mail.new(from, subject, to, content) sg = SendGrid::API.new(api_key: @settings[:api_key]) response = sg.client.mail._(‘send’).post(request_body: sg_mail.to_json) puts response.status_code end end メール送信 Mailerを用意してメールを送信してみます。 # app/mailers/test_mailer.rb class TestMailer < ApplicationMailer def test_mail mail(from: ‘from@example.com’, to: ‘to@example.com’, subject: ‘テストメール’) end end # app/views/test_mailer/test_mail.text.erb SendGrid送信テスト TestMailer.test_mail.deliver_now 最後に この記事ではWeb APIを使用したメール送信について書きましたが、SMTPを使用することもできます。 両者の違いついてはSendGridとの連携をご確認ください。 Web APIを使用する場合、送信したメールとEvent Webhookの連携が簡単になるのかなと思います。 RailsでEvent Webhookを利用した時の話も機会があればまとめようと思います。 関連記事 SendGridで独自ドメインからdocomo宛に送信するときの注意点