SendGrid経由で送信するメールの保存方法
この記事は How to Store the Contents of Email Sent via SendGrid の抄訳です。
お客様が受信したメールの内容確認や、特定のキャンペーンに紐付いたイベントの確認など、送信したメールの内容を保存しておくことは多くの送信者にとって役に立ちます。今回は、SendGrid経由で送信したメールを後で参照することを目的として保存する方法をいくつかご紹介します。
SendGridのログにメタデータを保存する方法
例えば、Fromアドレスや件名など、追加のメタデータをActivityやEvent Webhookで確認したい場合であれば、SendGridの機能だけで実現できます。
すべての宛先に同じ件名のメールを送信するケースなど、複数のメールが同じメタデータを持つ場合は、カテゴリを利用(この場合、件名をカテゴリに含める)できます。ただし、カテゴリはASCII文字に限ります。宛先ごとにメールの件名が異なるケースなどでは、ユニーク引数を利用してメタデータを追加できます。システムが割り当てるユーザIDやテンプレートのバージョン番号などを確認したい場合も、同じ方法で対応可能です。
Inbound Parse Webhookを利用する方法
Inbound Parse Webhookは送信メールのキャプチャに利用できます。この機能を利用することで、ご自身が管理するドメインに送信されたメールをプログラム的に処理できます。具体的には、SendGrid経由で送信するメールの宛先にInbound Parse Webhookで設定したドメインのメールアドレスを追加することで実現します。例えば、「Bccで指定する」、「personalizationブロックを追加する」、といった方法が考えられます。Inbound Parse WebhookはWebポータルまたはAPIを利用して設定できます。
送信したメールのうち、どのようなデータをキャプチャしたいかによって、2つの利用方法があります。
multipart/form-data
初期設定では、Inbound Parse Webhookはメールの内容を表すパラメータを伴ったmultipart/form-data形式のデータをPOSTします。Fromアドレスや件名、添付ファイルなどのデータをキャプチャしたい場合、もしくは構造化されたデータストアにメールデータを保存する場合などは、この設定を使用してください。
Raw MIME
Inbound Parse Webhookは、構造化されたデータではなく、生のMIMEをPOSTするよう設定することもできます。これはSendGridがメールデータを切り出す代わりに生のメールデータをそのままパススルーする設定に相当します。これを利用することで、自由度が大幅に高まります。断片化されていないメールの内容をそのまま保存したい場合は、Rawモードを使用してください。
Gmailにコピーを送信する方法
GmailはJSONベースの素晴らしいAPIを提供しています。これを利用することで、Gmailで受信したメールの検索、メールデータ取得、削除、ラベル付けなどが行えます。保存したいメッセージのコピーをGmailアドレスに送信することで、非常に簡単な設定だけでメールデータを保存できる強力なシステムを利用できます。また、複数メンバーでメールのアーカイブを検索したい場合でも、任意のメールクライアントを利用できます。
ローカル環境またはプロキシ経由でキャプチャする方法
送信前のメールをローカル環境でキャプチャすると、転送やBCCによる余分なクレジット(送信通数)を消費しないというメリットがあります。この方法を利用する場合、プラットフォームや要件に応じて、様々なライブラリやサービスが利用できます。
- インストール型:mailcatcher、fakeSMTP、papercutなど
- ホスト型:mailtrap
ただし、以下の点にはお気をつけください。
- メールをキャプチャするためにローカルサービスを実行しておく必要がある
- テンプレート適用やSendGridのサーバ側で実行される様々な機能が適用されたメールを取得できない