✉️

Google App Script メモ(メール送信制限 回避術)

2021/01/27に公開

GASによるメール送信について

Google App Script を使うと、Gmailをスクリプト内で送信することができます。
Google Forms を使ってフォーム入力があると、それに対してオリジナルの自動返信メールを作って送信するなんてこともできてしまうのです。
素晴らしいですね!!

そんな世の中上手い話はない

Google App Script によってGmailを送信できることはわかったけど、Quotas for Google Servicesをみてわかる通りAPI制限で、一般のアカウントでも 100通/日 であり、G-suiteでも 1500通/日 である。
これを解決する方法を紹介する。

API制限がかかる方法

メールを送信するメゾットはこんな感じです。

MailApp.sendEmail(mailAddress, mailTitle,mailText);

mailAddress : 送付したいメールアドレス
mailTitle : メール件名
mailText : メール本文

このAPIを用いてメールを送信するとメールの送信件数の制限に触れてしまいます。試しに確認してみましょう。
GASのエディタを開いて次のコードを入力します。

Logger.log(MailApp.getRemainingDailyQuota());
MailApp.sendEmail(mailAddress, mailTitle,mailText);
Logger.log(MailApp.getRemainingDailyQuota());

ここでLogger.log(MailApp.getRemainingDailyQuota());はメール送信制限数を取得するものです。
このコードを実行して実行ログを見ると次のようになると思います。

09:41:00	お知らせ	実行開始
09:41:00	情報	100.0
09:41:01	情報	99.0
09:41:01	お知らせ	実行完了

つまり、MailApp.sendEmail(mailAddress, mailTitle,mailText);の実行前と実行後でAPIの残り呼び出し回数が少なくなっていることがわかります。

API制限がかからない方法

ある裏技(?)をするとこの制限を回避しながらGmailを送信することができます。
その方法が、「下書きメール作成」→「そのメールのIDを取得」→「そのIDを元にメールを送信」です。
ものは試しです。コードはこちら!!

Logger.log(MailApp.getRemainingDailyQuota());
let draft = GmailApp.createDraft(mailAddress, mailTitle, mailText);
let draftID = draft.getId();
GmailApp.getDraft(draftID).send();
Logger.log(MailApp.getRemainingDailyQuota());

draft = GmailApp.createDraft(mailAddress, mailTitle, mailText)で作成した下書きメールのオブジェクトを作成し、draftという変数に格納します。
続いてdraftID = draft.getId()で作成した下書きメールのメールIDを取得してきます。
最後にGmailApp.getDraft(draftID).send()によってメールを送信することができます。
このコードを実行して実行ログを見ると次のようになると思います。

09:41:02	お知らせ	実行開始
09:41:02	情報	99.0
09:41:03	情報	99.0
09:41:03	お知らせ	実行完了

これによってメールのAPI制限は回避することできました。

でも注意が必要

メールのAPI制限は回避できても1日あたりのAPI呼び出し制限はクリアできていません。(そんな大量に呼び出しはしないと思いますが...)
所望する処理によって必要な回避策を行う必要があります。

最後に

間違いなどがあれば、ご指摘いただけるとありがたいです!!
お疲れ様でした!

Discussion