LoginSignup
13
3

More than 1 year has passed since last update.

【Rails】SendGridでメール送信(2021年3月)

Last updated at Posted at 2021-03-29

SendGridの仕様がもろもろ変わったっぽいので改めて使い方をまとめる。

アカウント作成

うろ覚えだけど、日本の代理店(構造計画研究所)を通して契約すると、「サービス提供者のドメインのメールアドレスから申し込まないといけない」みたいな制約があった記憶。受託開発とかだと面倒。
なので代理店を遠さずに、以下のURLからアカウントを作成した。

確認用メールが届くのでリンクを踏んで有効化。

sender identity(差出人情報)の登録

ログイン後の画面。
 2021-03-26 12.11.54.png

指示の通り、sender identityの登録を登録する。
「Create a single sender」「Authenticate a domain」の2つの方法があるけど、前者が推奨とのこと。

 2021-03-26 12.13.53.png

表示されるフォームに情報を入力する。
 2021-03-26 12.15.37.png

  • From Name
    • 受信者に表示される差出人名
  • From Email Address
    • メール送信者のメールアドレスとして表示される
    • このアドレスの持ち主かチェックするため、登録後このアドレスに確認メールが届く
      • リンク踏めばログインしなくてもverifyできる
  • Reply to
    • 受信者が返信する時の宛先にセットされるアドレス
  • Nickname
    • 差出人情報を一意に識別するための名前
    • この名前がメール受信者に表示されることはない

なお、このページを再度表示したい時はMarketing Campaigns > Sendersからアクセスできる。

Railsアプリからメールを送信

メール送信の2種類の方法

SendGridを使ったメール送信には「Web API」「SMTP」の2種類の方法がある。公式はWeb APIを推奨している。

注意点として、Web APIを使うと、ActionMailerを使ったメール送信が難しくなる。
https://github.com/eddiezane/sendgrid-actionmailer
https://techracho.bpsinc.jp/yamada/2018_12_22/67222
上記のように、WebAPIを使いながらActionMailerで送信するgemや手法がいくつかヒットしたが、私のRails6の環境ではうまくいかなかった。

今回は、Web APIを使い、Action Mailerは使わずにメールを送信することにした。

APIキーを取得

  • Email API > Integration Guide > Web API > Rubyを選択
  • 2.Create an API keyにAPIキーの名前(なんでも良い)を入力しCreate keyをクリック
  • 表示されたAPIキーを環境変数に保存

gemをインストール

Gemfile
gem 'sendgrid-ruby'
$ bundle install

メール送信処理を実装

$ touch app/models/send_email.rb
app/models/send_email.rb
class SendEmail
  require 'sendgrid-ruby'
  include SendGrid

  def self.test_email
    from = Email.new(email: 'dev@example.jp') # SendGridの管理画面でSenderに登録したアドレス
    to = Email.new(email: 'hogehoge@gmail.com') # 送信したいアドレス
    subject = 'テストホゲホゲ'
    content = Content.new(type: 'text/plain', value: 'ハローハロー')
    mail = Mail.new(from, subject, to, content)

    sg = SendGrid::API.new(api_key: ENV['SENDGRID_WEB_API_KEY'])
    response = sg.client.mail._('send').post(request_body: mail.to_json)
  end
end

送信テスト

$ rails c
> SendEmail.test_email
=> #<SendGrid::Response:0x00erererc9650
 @body="",
 @headers=
  {"server"=>["nginx"],
   "date"=>["Mon, 29 Mar 2021 02:47:15 GMT"],
   "content-length"=>["0"],
   "connection"=>["close"]

メールが届くことを確認

その他

メール送信のオプションは以下のAPI仕様書を確認

メール内のリンクがsendgrid用に置換されるのが嫌な場合、Settings > Tracking > Click Tracking設定から無効化できる。

13
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
3