SendGridを使って短時間に大量にメールを送るための方法

SendGridを使って短時間に大量にメールを送るための方法

はじめに

SendGridは単なるSMTPサービスではありません。通常のメールサーバにはない、短時間で大量にメールを送信するための機能があります。SendGridからメールを送るためには以下のように3つの方法があるため、本記事ではそれぞれの特徴と実際の使い方をご紹介します。

  • SMTP
  • Web API
  • マーケティングメール機能

SMTP

プロトコルは一般的なSMTPと同じです。Toヘッダに宛先アドレスを指定してメールを送ることもできますが、1回のリクエストで多数の宛先に送信する場合、後述するX-SMTPAPIヘッダを利用することをおすすめします。
また、メールのエンコードを指定して送信可能で、ISO-2022-JPでメールを送りたい場合はこちらの方法を利用する必要があります。

Web API

プロトコルはHTTPSで、メールの送信にはこちらのAPIを使用することをSendGridは推奨しています。各言語ごとに公式ライブラリが提供されています。SMTPで指定できるパラメータのうち、エンコードとCcの指定はできません(エンコードはUTF-8固定)が、SMTPアウトバンドが制限されている環境からでもメールを送信可能です。
Web APIもSMTPと同様、1回のリクエストで複数の宛先にメール送信をするために、X-SMTPAPIパラメータ(後述)を利用することができます。

マーケティングメール機能

SendGrid側にメール本文と宛先リストを登録してブラウザからメール送信が行える機能です。他の送信方法と異なり、X-SMTPAPIは利用できませんが、スケジュール配信指定や、宛先リストを動的に取得して送信することができます。ブラウザからメール編集画面を利用できるので、プログラムの知識がなくても利用することができます(APIを利用して送信することもできます)。
また、指定可能な宛先数に制限はありません。

X-SMTPAPI

X-SMTPAPIは、メール送信機能を拡張するための機能です。SMTPから利用する場合、”x-smtpapi”という拡張ヘッダに値を設定します。Web APIから利用する場合は同じ名前のパラメータに値を設定します。値はJSON形式で構築します。
最もよく使われるのは、”to”、”sub”および”section”を組み合わせて複数の宛先に対して宛先毎に埋め文字(例えば、宛名を宛先毎に切り替える)を指定する場合に使用します。
他にもメールにカテゴリや一意の値を指定して分析やアプリケーション制御などに利用することができます。

以下にX-SMTPAPIの例を示します。詳しくはAPIマニュアル(会員登録が必要)をご参照ください。

{
  "to": [
    "ben@sendgrid.com",
    "joe@sendgrid.com"
  ],
  "sub": {
    "%name%": [
      "Ben",
      "Joe"
    ],
    "%role%": [
      "%sellerSection%",
      "%buyerSection%"
    ]
  },
  "section": {
    "%sellerSection%": "Seller information for: %name%",
    "%buyerSection%": "Buyer information for: %name%"
  },
  "category": [
    "Orders"
  ],
  "unique_args": {
    "orderNumber": "12345",
    "eventID": "6789"
  },
  "filters": {
    "footer": {
      "settings": {
        "enabled": 1,
        "text/plain": "Thank you for your business"
      }
    }
  }
}

X-SMTPAPIに指定することのできる宛先数は最大10,000までです。ただし、多数の宛先を指定すると解析処理に時間がかかるため、1,000程度が推奨されています。1回のリクエストで多数の宛先を指定することができるため、送信リクエストにかかる時間を大幅に短縮することができます。

より大量にメールを送信するには

短時間でより大量の送信リクエストを送る方法として次の3つの方法があります。

  • コネクションを張ったまま連続してリクエストを送信する(SMTPでのみ利用可)
  • X-SMTPAPIを利用する(SMTP、Web APIで利用可)
  • 複数のコネクションを張り、同時にリクエストを送信する(SMTP、Web APIで利用可。同時に張ることができるコネクション数に制限はありません)

ただし、SendGridはどんなに大量のリクエストでも受け付けますが、「受け付け=宛先に到達」ということではないのでご注意ください。メールの受信側で制限がかかる場合があるためです(この現象をスロットリングと呼びます)。この制限を緩和するためにはIPウォームアップと呼ばれる手法を用いて送信元IPアドレスの信頼度を上げる必要があります。

まとめ

今回はSendGridで利用できるメール送信方法をご紹介しました。制約、状況に合わせて送信方法選択の参考にしていただければと思います。