📨
SendGridに関する調査メモ
開発エンジニア視点のサマリー
Laravel + Docker開発の前提。
メリット
- Postfix不要
- WebAPIでJSONレスポンス取得テストコードを書きやすい
- Webhookでバウンススパムイベントを受信し自動リトライ実装が容易
- DockerComposeにサービス追加するだけでチーム全員が即メール検証
- GUIテンプレート編集で非エンジニアに文面変更を委譲可能
デメリット
- 無料枠100通/日を超えると従量課金運用コスト監視が必要
- 大量配信用途では専用IP月額25USDや上位プランでコスト増
- APIレートリミット600req/分に合わせてキューやバックオフ実装要
- 日本リージョンIPが共有なので到達率向上にはDNS認証設定必須
SendGrid概要
- Twilio傘下クラウドメール配信SaaS
- SMTPリレーとWeb API両対応
- 開封クリック計測テンプレートABテストをGUI操作
- 無料枠100通/日で試験開始可能
他との比較
通常のSMTP
- 単一IP配信で到達率変動
- 統計取得はログ解析が必要
- TLS設定失敗やブラックリスト管理が自己責任
AWS SES
- SMTPとWebAPI(v1/v2)両対応 SigV4署名必須で実装手順が長い
- 低価格0.10USD/1000通
- テンプレート編集はAPIかS3アップロード GUIは限定的
- CloudWatch QuickSight連携で統計可視化設定が追加工数
SendGrid優位点
- ダッシュボード即時可視化
- 専用IP自動ウォームアップ
- GUIテンプレートマーケ機能内蔵
- APIキー1つで導入完了
送信方式選定
- SMTP方式: 既存Postfix置換やレガシー連携向け
- Web API方式: 新規サービス大量バッチ向け
- Laravel: sendgridドライバでAPI方式を標準実装
WebAPI方式が嬉しい理由
- ポート443のみ許可ファイアウォール設定が簡単
- HTTPクライアント(fetch axios curl等)で実装完結追加ライブラリ不要
- サーバレス環境LambdaCloudFunctionsでコールドスタート高速
- ステータスコードとJSONで詳細エラー取得自動リトライ実装容易
- template_idやpersonalizationsを1リクエスト指定GUI側だけで文面更新
- Promise.allやgoroutine並列化で水平スケール簡単(コネクションプール不要)
- E2Eテストがしやすい
Docker導入手順
# docker-compose.yml
version: "3.9"
services:
app:
build: .
env_file:
- .env
environment:
- SENDGRID_API_KEY=${SENDGRID_API_KEY}
# .env
MAIL_MAILER=sendgrid
SENDGRID_API_KEY=SG.xxxxxx
SENDGRID_SENDER=info@example.com
SENDGRID_TEMPLATE_WELCOME=d-xxxxxxxxxxxxxxxxxxxx
Laravel実装
- composer require sendgrid/sendgrid
- config/mail.phpにsendgrid mailer追加
- Mailableで->template(env('SENDGRID_TEMPLATE_WELCOME'))使用
- artisan tinkerでテスト送信
// config/mail.php
' mailers' => [
'sendgrid' => [
'transport' => 'sendgrid',
],
],
// app/Mail/WelcomeMail.php
class WelcomeMail extends Mailable
{
public function build()
{
return $this
->template(env('SENDGRID_TEMPLATE_WELCOME'))
->subject('ようこそ')
->with(['name' => $this->user->name]);
}
}
テンプレート運用
- GUIで文面編集バージョン管理
- Handlebarsで差し込み{{name}}
- マーケ機能でABテストセグメント配信
- SMTPリレーではDynamicTransactionalTemplate使用不可(APIのみ対応)
- LegacyTemplate+
X-SMTPAPI
ヘッダーで暫定送信は可能だが非推奨
よくあるQA
- 無料枠超過時は自動課金停止可
- 専用IPは月額25USD
- DKIMSPF設定は画面誘導に従いDNS追加
まとめ
- SendGridは高到達率と可視化を低工数で実現
- Docker統合でチーム全員が即テスト可能
- SMTPからの段階移行もdriver一行変更で完了
Discussion