仕事術

Google Apps Script (GAS)を使ったWebアプリ: スプレッドシートから大量のメール下書きを作成する際の課題と解決策

はじめに

Google Apps Script (GAS)は、Google Workspaceアプリケーションのカスタマイズと拡張を容易にするための強力なツールです。特に、GoogleスプレッドシートとGmailを統合して、業務効率を向上させるためのさまざまな自動化タスクを実行することができます。本記事では、スプレッドシートを利用して大量のメール下書きを作成するGAS関数の作成方法と、その際に直面する可能性のある制限について説明します。さらに、その制限を回避するための解決策も提案します。

スプレッドシートを利用したメール下書き作成のコード

以下は、スプレッドシートのデータをもとにGmailのメール下書きを作成するGAS関数の一例です。
function createDraft() {

  const values = SpreadsheetApp.getActiveSheet();
  const to = values.getRange(2, 2).getValue();         //宛先
  const subject = values.getRange(5, 2).getValue();    //件名
  let body = '';                                      //本文
  body += values.getRange(6, 2).getValue() + '\n';
  body += values.getRange(7, 2).getValue() + '\n';
  const options = {"cc":values.getRange(3, 2).getValue(),"bcc":values.getRange(4, 2).getValue()};  //Cc,Bcc
  GmailApp.createDraft(to, subject, body, options);

}
このコードはスプレッドシートの特定のセルからデータを取得し、それを基にGmailの下書きを作成します。しかし、ここで問題となるのが、宛先が51件以上になると、Google側の制限により下書きを作成できず、エラーが発生することです。

制限の背景

Gmailにはスパム防止やリソースの最適化の観点から、送信や下書きの作成に対していくつかの制限があります。その一つが、1つのメールに対して宛先(To、Cc、Bccの合計)が50件を超えると、以下のようなエラーが発生するというものです。この制限により、大量のメールを一度に処理することが難しくなります。

 

TypeError: MailApp.createDraft is not a function

 

解決策

この制限を回避するためには、以下のようなアプローチが考えられます。
  1. バッチ処理: 宛先を複数のバッチに分けて、それぞれに対して個別に下書きを作成します。例えば、宛先が100件の場合、50件ずつ2回に分けて下書きを作成します。
    function createDraftsInBatches() {
    
      const values = SpreadsheetApp.getActiveSheet();
      const subject = values.getRange(5, 2).getValue();
      let body = '';
      body += values.getRange(6, 2).getValue() + '\n';
      body += values.getRange(7, 2).getValue() + '\n';
      const cc = values.getRange(3, 2).getValue();
      const bcc = values.getRange(4, 2).getValue();
      const recipients = values.getRange(2, 2).getValue().split(','); //宛先をカンマで分割
      const batchSize = 50;
    
      for (let i = 0; i < recipients.length; i += batchSize) {
        const batchRecipients = recipients.slice(i, i + batchSize).join(',');
        const options = {"cc": cc, "bcc": bcc};
        GmailApp.createDraft(batchRecipients, subject, body, options);
      }
    
    }
    

  2. Googleグループの活用: 宛先が多い場合、Googleグループを作成して一つのメールアドレスでまとめることも有効です。これにより、Gmailの制限を回避しつつ、一斉にメールを送信することができます。

  3. 複数の下書き作成: バッチ処理と似ていますが、宛先ごとに個別の下書きを作成する方法です。これにより、エラーを回避しつつ、個々の受信者に対してメールを準備することができます。
    function createIndividualDrafts() {
    
      const values = SpreadsheetApp.getActiveSheet();
      const subject = values.getRange(5, 2).getValue();
      let body = '';
      body += values.getRange(6, 2).getValue() + '\n';
      body += values.getRange(7, 2).getValue() + '\n';
      const cc = values.getRange(3, 2).getValue();
      const bcc = values.getRange(4, 2).getValue();
      const recipients = values.getRange(2, 2).getValue().split(','); //宛先をカンマで分割
    
      recipients.forEach(recipient => {
        const options = {"cc": cc, "bcc": bcc};
        GmailApp.createDraft(recipient, subject, body, options);
      });
    
    }
    

まとめ

GASを使ってスプレッドシートから大量のメール下書きを作成する際には、Gmailの制限に注意する必要があります。特に、宛先が50件を超える場合には、エラーが発生する可能性があります。これを回避するためには、バッチ処理やGoogleグループの活用、または個別の下書き作成といった方法があります。これらのアプローチを活用することで、効率的に大量のメール下書きを作成し、業務の効率化を図ることができるでしょう。 Google Apps Scriptの持つ可能性を最大限に引き出し、業務の自動化と効率化を実現するために、引き続き新しい方法や改善策を模索していくことが重要です。本記事が、GASを活用したメール自動化の一助となれば幸いです。
ABOUT ME
ガッスー
システムエンジニアとして働く3児の母です。フリーランスでお金の問題に向き合いながら、将来の備えや資産づくりに取り組んでいます。このブログでは、システムエンジニアのリアルな日常、資産管理やリスクを抑えた資産運用についてシェアしていきます。