Google App Script メモ(メール送信制限 回避術)
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