GASでSendGridを使ってメールを1日100件以上送信する方法


GAS(Google Apps Script)でSendGridのWEB APIを利用してメールを送信する方法をまとめました。これでメール送信可能数 100通/日 の限界を突破しましょう

背景

SendGridとは

SendGridはメールを配信できるクラウドサービスです。

なぜGASでSendGridを使うのか

GASではGmailを操作してメールを送ることができるので、わざわざSendGridのような外部サービスを利用する必要がないと思われるかもしれません。

しかし、GASは一日に送れるメールの数(正確にはメールの受取人の数)に制限があり、普通のGoogleアカウントの場合は100件/日、Gsuiteの場合は1500件/日までしか送ることができません。

そこでメールの送信にSendGridを利用することで、Freeプランでも月間12000通まで送ることができるようになります。

手順

アカウントの登録

よしなにアカウントを登録します。

登録の際に審査がありますが、私がやった際は数時間ほどでログイン情報が送られてきました。

APIキーの取得

APIキーを作成します。一度しか表示されないのでどこかに保存しておきましょう。

DNSにレコードを追加(独自ドメインで送る際)

この時点で送れるようになったのですが、今のままだとメールを送信した際に「sendgrid.net 経由」という文字が送り主の隣に入るようになります。

これを消すためにはDNSにレコードを追加する必要があります。

Domain Authenticationから指示にしたがってレコードを追加すれば設定することができます。

「Use automated security」をチェックするか否かで追加するレコードがCNAMEかMXとTXTになります。私はなぜかCNAMEが追加できなかったのでチェックを外しました。

具体的な違いについては公式サイトを参考にしてください。

スクリプトを追加

ここまで設定ができればあとはWEB APIを叩くだけです。

SEND_GRID_ENDPOINT = "https://api.sendgrid.com/v3/mail/send";
SEND_GRID_API_KEY = "取得したAPI KEY";

function sendEmailBySendGrid(to,subject,from,from_name,body_text){ 
  var body = {
    "personalizations": [
      {
        "to": [
          {
            "email": to
          }
        ],
        "bcc":[
          {
            "email": from
          }
        ],
        "subject": subject
      }
    ],
    "from": {
      "email": from,
      "name" : from_name
    },
    "content": [
      {
        "type": "text/html",
        "value": body_text
      }
    ]
  }
  var payload = JSON.stringify(body);
  UrlFetchApp.fetch(SEND_GRID_ENDPOINT, {
    method: 'POST',
    headers: { "Content-Type": 'application/json',
             "Authorization": "Bearer "+SEND_GRID_API_KEY},
    payload: payload
  });
}

送信できたかを確認するためにBCCに送信者のアドレスを入れていますが、特に必要はありません。また、オプションがあるので、ドキュメントを参考にしてください。