SendGridの仕様がもろもろ変わったっぽいので改めて使い方をまとめる。
アカウント作成
うろ覚えだけど、日本の代理店(構造計画研究所)を通して契約すると、「サービス提供者のドメインのメールアドレスから申し込まないといけない」みたいな制約があった記憶。受託開発とかだと面倒。
なので代理店を遠さずに、以下のURLからアカウントを作成した。
確認用メールが届くのでリンクを踏んで有効化。
sender identity(差出人情報)の登録
指示の通り、sender identityの登録を登録する。
「Create a single sender」「Authenticate a domain」の2つの方法があるけど、前者が推奨とのこと。
- 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をインストール
gem 'sendgrid-ruby'
$ bundle install
メール送信処理を実装
$ touch 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
設定から無効化できる。