Google Apps Script によるメール送信の落とし穴

前回の 『Google Apps Script で超絶簡単にメール送信する 』では Google Apps Script を利用した Gmail 送信の方法をご紹介しました。

Google Apps Script による Gmail メール送信は、自動でメールを効率的に送信するのに非常に便利です。しかし、通常時にメールを送信する際にはない制限が存在します。

今回は、Google Apps Script でのメールの自動送信を行う上での注意点や機能制限、対策についてご紹介します。

1日あたりのメール受信者制限

個人用無料 Gmail アカウントの場合: 100 / 日
無料版 Google Workspace の場合: 100 / 日
有料版 Google Workspace の場合: 1,500 / 日

この制限は、1通のメールに複数の受信者(To/Cc/Bcc)を設定した場合も適用されます。

「1日あたりのメール受信者」と聞くと、常に特定の一人にしか送らないのであれば何通でもメールを送信できると思われる方もいるかもしれません。しかし、実際は単純に送信したメールの数をカウントします。
例えば、同じ 5 人の受信者にメールを 30 通送信した場合、5 * 30 で 150 をカウントし制限を超えます。

メール受信者数の制限を超えてメールを送信しようとすると処理でエラーが発生してしまいます。そのため、エラーを回避するためにメール受信者数の制限が来た場合は、メールを送信しないようにする必要が出てきます。

残り送信回数の確認

メール受信者数の制限に達したのかを知るために、残りの送信回数を取得する手段についてご紹介します。MailApp.getRemainingDailyQuota() 関数を使用することで、その日の残りのメール送信可能数を取得することができます。これにより、メール受信者数へのエラー対策の処理を行うことができます。

次のコードは、メール送信の前後に MailApp.getRemainingDailyQuota() 関数を入れてあります。 MailApp.sendEmail() 関数 によってメールが送信されたことで送信可能数が消費されたことが確認できます。

console.log(MailApp.getRemainingDailyQuota());

const address = 'ry.kondo@kotovuki.co.jp'
const title = 'メール件名';
const text = 'メール本文'

MailApp.sendEmail(address, title, text);

console.log(MailApp.getRemainingDailyQuota());

次の画像は上のコードを実行した結果です。
メールを送信する前の MailApp.getRemainingDailyQuota() 関数の結果は「1482」でしたが、メール送信後は「1481」と残り数が減っていることがわかるかと思います。

MailApp.getRemainingDailyQuota() 関数を使用して、残りの送信回数を確認し、送信予定のメールの数と比較することでエラーを回避できます。

制限の回避

残り送信回数の制限を回避する裏技が実はあります。メールを下書きで作成し、次にその下書きを送信します。これで、送信回数のカウントは回避されます。
そのコードは以下の通りになります。

const address = 'example@kotovuki.co.jp';
const title = 'メールタイトル';
const text = 'メールテキスト';

console.log(MailApp.getRemainingDailyQuota());

const draft = GmailApp.createDraft(address, title, text);
const draftID = draft.getId();
GmailApp.getDraft(draftID).send();console.log(MailApp.getRemainingDailyQuota());

console.log(MailApp.getRemainingDailyQuota());

GmailApp.createDraft(address, title, text); では認証したアカウントでメールの下書きを作成し、そのデータを変数 draft に格納します。draftID = draft.getId(); は 格納したデータから作成した下書きメールの ID を取得します。そして、GmailApp.getDraft(draftID).send(); によって下書きメールを送信できます。
実際にこのコードを実行すると実行ログは次の画像のようになります。

この結果から、残り送信回数が減少しなかったことがわかるかと思います。
この方法を使用することで、メールの送信回数の制限を回避することができます。

まとめ

Google Apps Script によるメール送信は非常に便利ですが、1日あたりのメール受信者数に制限があり注意が必要です。
また、制限を超えたメール送信はエラーが発生するため、送信を実行する前に MailApp.getRemainingDailyQuota() 関数を使用して、残りの送信回数を確認し、送信予定のメールの数と比較し、エラーを回避したり、下書きメールを作成してのメール送信により送信回数の制限を回避するなど、安全に効率よくメールの自動送信が可能になります。