GASで上限1日100件以上のメールを送信する方法!別アカウントのGASをデプロイして実現

2023年11月26日

Google Apps Script(GAS)でメール通知を頻繁にすると、メール送信上限数に引っかかることがあります。

そこでメール送信上限の1日100通を超えてメールを送れるよう、別アカウントのGASプロジェクトを使ってメールを送る方法を解説します。

GASでメール通知はよく利用

Google Apps Script(GAS)でよく利用するのが、メール通知機能です。

スクレイピングした情報をまとめてメール送付したり、状態をチェックして条件に合致した際にメール通知を行ったりします。

SlackやChatworkなどのチャットツールに通知する機会が増えていますが、まだまだメールをメインで利用している企業や団体は多いです。

またGoogleのサービスにGmailがあるので、GASでのメール送付するスクリプトはとても簡単です。

たった、GASコード1行でメールを送付することができます。

それゆえにGASでメール送付するスクリプトの利用頻度は高いです。

GASのメールは1日100件の制限

Google Apps Script(GAS)でメールを送信する場合には留意すべき点があります。

GASで1日に送信できるメール数には100通という上限が設けられていることです。

下記の記事でGASのメール送信上限について解説しています。

24時間以内にGASスクリプト経由で送信したメール件数が100通を超えると、メールが送信できなくなります。

※有償版のGoogle Workspaceユーザーだと1日1500件に拡張されます。

通常の利用では1日に100通以上送付することは少ないです。

しかし、色々なGASスクリプトでメール送信を行っていると、1日100件の制限に引っかかることがあります。

さらにメールの宛先やCCが複数あると、その宛先の件数だけメール送信数が消費されます。

それゆえにGASを活用するほど、メール送信上限に達することが多いです。

100通以上のメールを送るには?

100件以上のメールをGoogle Apps Script(GAS)で送信したい場合にはどうするか?

その方法として別のGoogleアカウントからメールを送ることです。

1日100件のメール送信上限はGoogleアカウント単位で設定されています。

そのため、2つのGoogleアカウントを用意すれば、1日200通メールを送付可能です。

しかし、フォーム入力時にトリガー実行するような場合、どちらかのアカウントでしかトリガー登録できません。

フォーム入力時にメールを送付する場合に100通以上送信するには、ユーザーAのスクリプトから、ユーザーBのメールを送付するスクリプトを実行する必要があります。

ユーザーAのGASスクリプトからユーザーBのメールを送信

Google Apps Script(GAS)でユーザーAのプロジェクトからユーザーBのメールを送付するようにできれば、メール送信上限を回避できます。

このようにユーザーAのGASプロジェクトからユーザーBのGASプロジェクトのスクリプトを実行するにどうすればよいでしょうか。

別のGoogleアカウントのGASスクリプトを実行するには、doGet関数を利用します。

doGet関数はスクリプトエディタでウェブアプリとしてデプロイすれば、HTTPリクエストでGASスクリプトが実行可能です。

別アカウントからメールを送信するには以下のように実装します。

  1. ユーザーBのGASプロジェクトでメールを送信するdoGet関数を作成
  2. doGet関数をウェブアプリとしてデプロイ
  3. ユーザーAのスクリプトでUrlFetchAppでデプロイしたURLをリクエスト

GASの別ユーザーでメール送信する設定手順

実際にGoogle Apps Script(GAS)のメール送信するスクリプトをデプロイし、別ユーザーのプロジェクトからメール送信を行う手順を解説します。

メール送信するdoGet関数のサンプルコード(ユーザーB)

まず、メール送信する処理を記述したdoGet関数のスクリプトを用意します。

このスクリプトは上記説明でいうところのユーザーBでGASプロジェクトを作成します。

function doGet(e) {
  const address = e.parameter.address;
  const title = e.parameter.title;
  const text = e.parameter.text;
  MailApp.sendEmail(address,title,text);
}

上記のメール送信するdoGet関数には、HTTPリクエストでパラメータを設定する想定にしています。

https://{doGet関数のデプロイURL}?address=宛先&title=タイトル&text=本文

メールの宛先、件名、本文をURLのパラメータでセットすると、その内容に応じたメールが送付可能です。

doGet関数のウェブアプリとしてデプロイ(ユーザーB)

次にGASのメール送信するdoGet関数をデプロイします。

1.doGet関数を他のユーザーが実行できるようにするため、「デプロイ>新しいデプロイ」を選択します。

2.説明文を入力し、実行ユーザーを「自分」、アクセスできるユーザーを「全員」としてデプロイをクリックします。

3.アクセス許可が求められた場合は、「アクセスを承認」をクリックします。

※下記の手順に従って、GASプロジェクトの許可を実行します。

4.新しいデプロイが完了したら、ウェブアプリのURLをコピーします。

以上でユーザーBのGASプロジェクトの設定は完了です。

UrlFetchAppしてメール送信(ユーザーA)

次にデプロイしたURLをHTTPリクエストして、ユーザーBとしてメール送信を実行するサンプルコードを作成します。

function myFunction() {
  let apiUrl = 'デプロイしたウェブアプリのURL';
  const address = '宛先メールアドレス';
  const title = '別アカウントからメール送信';
  const text = 'doGet関数を外部実行して別アドレスメールを送信しています';
  apiUrl = apiUrl + '?address=' + address + '&title=' + title + '&text=' + text;
  //別のアカウントからメールを送信するため、デプロイURLにパラメータをつけてフェッチ
  UrlFetchApp.fetch(apiUrl);
}

※別ユーザーのGASスクリプトのため、アイコンが変化しています。

上記のサンプルコードを実行すると、ユーザーAではなく、ユーザーBとしてメールが送付されています。

このようにユーザーBのメール送信するdoGet関数をデプロイし、デプロイしたウェブアプリのURLをユーザーAがUrlFetchApp.fetchで実行することで、メール送信数上限をクリアできます。

MailApp.getRemainingDailyQuotaで条件分岐

前述したGoogle Apps Script(GAS)のサンプルコードに一工夫すると、200件のメール送信が可能です。

GASにはメール送信できる残り通数を確認できるMailApp.getRemainingDailyQuota()メソッドがあります。

そのMailApp.getRemainingDailyQuota()の戻り値で条件判定し、メール送信可能数が0になったら、別アカウントでメール送信を行う処理します。

先程のユーザーAのサンプルコードを改良したものは以下の通りです。

function myFunction2() {
  const address = '宛先メールアドレス';
  const title = '別アカウントからメール送信';
  const text = 'doGet関数を外部実行して別アドレスメールを送信しています';
  //メール送信数が上限に達していない場合、そのままメール送信
  if(MailApp.getRemainingDailyQuota() > 0){
    MailApp.sendEmail(address,title,text);
  }
  //メール送信数が上限に達した場合、別アカウントでメール送信を実行
  else{
    let apiUrl = 'デプロイしたウェブアプリのURL';
    apiUrl = apiUrl + '?address=' + address + '&title=' + title + '&text=' + text;
    //別のアカウントからメールを送信するため、デプロイURLにパラメータをつけてフェッチ
    UrlFetchApp.fetch(apiUrl);
  }
}

これによってユーザーAでのメール送信数が24時間で100件を超えても、ユーザーBでメールを送信することができます。

GASウェブアプリのデプロイの注意点

Google Apps Script(GAS)の別アカウントのプロジェクトをウェブアプリとしてデプロイして、メール送信する際には注意があります。

GASのスクリプトエディタでウェブアプリのデプロイ時にアクセスできるユーザーを「全員」にしなければならない点です。

GASスクリプトからウェブアプリのURLをHTTPリクエストするため、「Googleアカウントをもつ全員」にできると思うかもしれません。

しかし、アクセスできるユーザーを「Googleアカウントをもつ全員」にしてしまうと、GASスクリプト実行前に認証が発生するため、doGet関数が実行されません。

そのため、GASウェブアプリをデプロイする際はアクセスできるユーザーを「全員」にしましょう。

さらに、全員にすることでウェブアプリのURLを知っている人は誰でも実行できるので、他の人に漏洩しないよう取り扱いに注意しましょう。

まとめ・終わりに

今回、Google Apps Script(GAS)で別ユーザーのメール送信するスクリプトをdoGet関数をデプロイして実行し、メール送信数を1日100件以上送信する方法を紹介しました。

MailApp.getRemainingDailyQuota()で条件分岐することで、合計200件までメールを送ることができます。

GASでメール送信を行っていて、1日100件の上限に引っかかってエラーする事象が起きている場合は、この方法で回避してみてください。