PR

Gmail送信を効率化!Google スプレッドシートとGASで複数宛先にGmailを一括送信する方法

Gmail送信を効率化!Google スプレッドシートとGASで複数宛先にGmailを一括送信する方法 GAS
記事内に広告が含まれています。

本記事では、Google スプレッドシートとGoogle Apps Script(GAS)を使用して、複数の宛先にGmailの下書きを一括送信する方法をご紹介します。

この方法を活用することで、メール送信作業を大幅に効率化できます。

Googleサービスの連携

Gmailの一括下書きと一括送信を実現するためには、Googleスプレッドシート、Google Apps Script (GAS)、Gmailの3つのサービスを連携させる必要があります。

ここでは、今回の処理における、それぞれのサービスの役割を説明します。

Googleスプレッドシート

Googleスプレッドシートは、主にデータ管理の役割を担います。

今回のサンプルでは、メールの宛先件名本文などの情報を一覧形式で管理します。

また、スプレッドシートに処理を実行するためのボタンを配置し、直感的な操作を可能にします。

Google Apps Script (GAS)

GASは、GoogleスプレッドシートとGmailを橋渡しする重要な役割を果たします。

スクリプトを通じて以下の処理を実行します:

  • 条件に基づいた下書きの送信処理の自動化
  • 処理の進行状況のログ出力

Gmail

Gmailでは、実際にGASとスプレッドシートを用いてメールの一括送信を実施します。

Google スプレッドシートとGoogle Apps Script(GAS)を使用して、複数の宛先にGmailの下書きを一括作成する方法は以下の記事で紹介しています。

本記事はこちらの下書き作成の手順に続くものです。下書きの作成から順を追って実施したい方は、以下の記事をご覧ください。

スプレッドシートとGASエディタの準備

本手順を実行する前に、Googleスプレッドシートに必要なデータが正しく入力されていることを確認してください。

これ以降の手順では、既にメールの下書き作成用のデータがスプレッドシートに用意されており、一括下書き作成が完了していることを前提としています。

本記事のサンプルのスプレッドシートでは、以下のデータを使用しています。

スプレッドシートの入力データ例:
名前メールアドレス件名本文
田中user1@example.com会議のリマインド=A2 & “様

11/1(金)に予定されている会議のリマインドです。

よろしくお願いいたします。”
佐藤user2@example.com会議のリマインド=A3 & “様

11/1(金)に予定されている会議のリマインドです。

よろしくお願いいたします。”
鈴木user3@example.com会議のリマインド=A4 & “様

11/1(金)に予定されている会議のリマインドです。

よろしくお願いいたします。”
高橋user4@example.com会議のリマインド=A5 & “様

11/1(金)に予定されている会議のリマインドです。

よろしくお願いいたします。”

このデータを基に、自動的に複数の下書きメールが作成されている状態から始めます。

次のステップに進む前に、スプレッドシートのデータと作成された下書きの内容が一致していることを確認することをおすすめします。

スプレッドシートのデータからGmailの下書きを作成するところから始めたい方はこちらの記事をご覧ください。

1. Gmailの下書きメール確認

まず、Googleアプリ一覧などからGmailを開き、下書きメールが作成されていることを確認します。

Gmailで下書きが作成されたことを確認する

2. Google スプレッドシートを開く

次に、GoogleドライブやGoogleアプリ一覧から、編集したいGoogleスプレッドシートを開きます。

そして、メールの下書きと同じデータが入力されていることを確認します。

gmailの下書き作成のサンプルデータの表

3.GASのスクリプトエディタを開く

Googleスプレッドシートのメニューバーの「拡張機能」を左クリックし、「Apps Script」を選択します。

「Apps Script」を選択すると、スクリプトエディタが新しいタブで開きます。

「Apps Script」を左クリックする

Gmailの下書きを一括送信するスクリプト

続いて、GASのスクリプトエディタでGmailの下書きを一括送信するスクリプトを作成します。

このスクリプトを使えば、作成済みの下書きを一括で自動送信することができます。

スクリプトを作成する

スクリプトエディタに以下のスクリプトをコピーして貼り付け、プロジェクトを保存します。

下書き一括作成用のスクリプトfunction createDrafts(){}を記述している場合は、function createDrafts(){}の下に下記のスクリプトを貼り付けてください。

function sendDrafts() {
  // UIオブジェクトを取得
  var ui = SpreadsheetApp.getUi();

  // 確認ダイアログを表示
  var response = ui.alert(
    '下書きの送信',
    'スプレッドシートのデータに一致する下書きを送信しますか?',
    ui.ButtonSet.YES_NO
  );

  // Noを選択された場合、処理を中止
  if (response !== ui.Button.YES) {
    ui.alert('下書きの送信をキャンセルしました。');
    return;
  }

  // アクティブなシートを取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // シートのデータ範囲を取得
  var dataRange = sheet.getDataRange();
  // データ範囲の値を2次元配列として取得
  var data = dataRange.getValues();
  // 送信した下書きのリスト
  var draftsSent = [];
  // 見つからなかった下書きのリスト
  var draftsNotFound = [];

  // データの各行に対して処理を実行
  for (var i = 1; i < data.length; i++) {
    var row = data[i];
    var recipient = row[1];  // メールアドレス
    var subject = row[2];    // 件名
    var body = row[3];       // 本文

    // すべての下書きを取得
    var drafts = GmailApp.getDrafts();
    var draftFound = false;
    
    // 各下書きに対して処理を実行
    for (var j = 0; j < drafts.length; j++) {
      var draft = drafts[j];
      var draftMessage = draft.getMessage();
      var draftTo = draftMessage.getTo();
      
      // 宛先、件名、本文が一致するかチェック
      if (draftTo.indexOf(recipient) !== -1 && 
          draftMessage.getSubject() == subject && 
          draftMessage.getPlainBody().trim() == body.trim()) {
        // 一致する下書きを送信
        draft.send();
        // 送信した下書きの情報をリストに追加
        draftsSent.push([recipient, subject]);
        draftFound = true;
        // 一致したら次の行へ
        break;
      }
    }

    // 一致する下書きが見つからなかった場合、リストに追加
    if (!draftFound) {
      draftsNotFound.push([recipient, subject]);
    }
  }

  // 結果メッセージの作成
  var message = '';
  if (draftsSent.length > 0) {
    message += '以下の下書きが送信されました:\n' + 
      draftsSent.map(function(draft) { 
        return draft[0] + ': ' + draft[1]; 
      }).join('\n') + '\n\n';
  }
  if (draftsNotFound.length > 0) {
    message += '以下の下書きは見つかりませんでした:\n' + 
      draftsNotFound.map(function(draft) { 
        return draft[0] + ': ' + draft[1]; 
      }).join('\n');
  }
  
  // 結果をアラートで表示
  ui.alert(message || '一致する下書きはありませんでした。');
}

スクリプトでは、下記の流れでGmailの下書きを送信しています。
スクリプトの解説が不要な方は、こちらから「実行ボタン作成」に進んでください。

1. UIオブジェクト取得

3行目SpreadsheetApp.getUi()でスプレッドシートのユーザーインターフェースにアクセスするためのオブジェクトを取得します。

ここでは、スプレッドシートにダイアログを表示するために、UIオブジェクトを取得しています。

2. 確認ダイアログ表示

6行目ui.alert()でユーザに下書き送信の確認を求めるダイアログを表示します。

ユーザが「いいえ」を選択した場合は、キャンセルのダイアログが表示され、処理が中止されます。

3. シートデータの取得

19行目SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()でアクティブなシートを取得し、

21行目getDataRange()でアクティブなシートからデータ範囲を取得します。

そして、23行目getValues()で値を2次元配列として格納します。

4. 変数初期化

25行目var draftsSent = [];で送信した下書きのリストを、27行目var draftsNotFound = [];で見つからなかった下書きのリストを初期化します。

5. データ処理ループ・メール送信

30行目for (var i = 1; i < data.length; i++) {}でヘッダーを除くシートの各行に対して処理を実行します。

1から開始されているため、ヘッダー行はスキップされます。

ループ処理の中では32~34行目の
var recipient = row[1];
var subject = row[2];
var body = row[3];

で、各行から宛先(B列) 、件名(C列)、本文(D列)のデータを抽出します。
データを抽出する列を変更する場合は、row[]のインデックスを変更してください。

そして、37行目var drafts = GmailApp.getDrafts();でGmailAppの全ての下書きを取得します。

41行目for (var j = 0; j < drafts.length; j++) {}のループ処理内で、スプレッドシートの各行の宛先、件名、本文のデータに一致する下書きをGmailから検索します。

47行目のif文で一致する下書きが見つかった場合は、51行目draft.send();でメールを送信し、結果をリストに追加します。

一致する下書きが見つからなかった場合は、61行目if (!draftFound) {}でその情報をリストに追加します。

6. 結果メッセージの作成

最後に、68行目if (draftsSent.length > 0){} と74行目if (draftsNotFound.length > 0){}で送信された下書きと見つからなかった下書きの情報を含むメッセージを作成します。

そして、82行目ui.alert(message || '一致する下書きはありませんでした。');で作成されたメッセージをアラートとして表示し、処理結果をユーザーに通知します。

実行ボタン作成

処理の実行は、GASのスクリプトエディタからも可能ですが、今回はGoogleスプレッドシートに実行ボタンを配置していきます。

実行ボタンを配置することで、GASのスクリプトエディタを直接操作せずに、簡単かつ直感的に処理を実行できるようになります。

1. 下書き一括送信の実行ボタンを作成する(方法①)

メニューバーの「挿入」を左クリックし、「図形描画」を選択します。

挿入から「図形描画」を左クリック



図形描画画面が開くので、メニューバーの「図形」から「ベベル(面取り)」を選択します。

図形からベベル(面取り)を選択する



任意の大きさで図形を挿入し、色やテキストを編集して「保存して閉じる」で完了します。

サンプルでは「下書き一括送信」とテキスト入力し、図形の色を水色にしています。

「保存して閉じる」を左クリックする

1. 下書き一括送信の実行ボタンを作成する(方法②)

この項目をスキップしたい方は、こちらから「スクリプト割り当て」の項目に進んでください。

「下書き一括作成の実行ボタン」を既に作成済みの場合は、「下書き一括作成の実行ボタン」をコピーして新しいボタンを作成することもできます。


まず、「下書き一括作成の実行ボタン」を右クリックし、右上の縦3点マークを左クリックします。

そして、「編集」を選択します。

図形の「編集」オプションを左クリックする


下書き一括作成の図形編集画面が開いたら、下書き一括作成の図形を左クリックで選択し、「Ctrl」+「c」か右クリックでコピーを選んで、コピーする。

コピーできたら、「保存して閉じる」を選択して図形編集画面を閉じる。


メニューバーの「挿入」を左クリックし、「図形描画」を選択します。

挿入から「図形描画」を左クリック

図形描画画面が開いたら、任意の位置で「Ctrl」+「v」か右クリックでペーストを選んで、「下書き一括作成」の図形をペーストする。

「下書き一括作成」の図形の色やテキストを編集し、「保存して閉じる」で完了します。

任意の位置にペーストし、図形を編集する


2. スクリプト割り当て

挿入した図形の右上の縦3点マークを左クリックし、「スクリプトを割り当て」を選択します。

「スクリプトを割り当て」を左クリックする



スクリプト割り当ての入力画面が開くので、下書き一括作成の関数「sendDrafts」を入力し、確定します。

スクリプトを割り当てる操作

スクリプト実行・実行結果

1. スクリプト実行

作成した「下書き一括送信」ボタンを左クリックして、スクリプトを実行します。

「下書きを一括送信」ボタンを左クリック

初めて実行する際には、スクリプトに対する権限の承認が求められる場合がありますので、承認してください。

「このアプリは Google で確認されていません」と表示された場合は左下の詳細をクリックすると、「無題のプロジェクト(安全ではないページ)に移動」というリンクが表示されます。
このリンクをクリックすると次のページへ遷移できます。

2. 確認ダイアログ表示

下書き送信の確認を求めるダイアログが表示されるので、「OK」を左クリックします。

「OK」をクリックすると、下書き送信の処理が実行されます。

下書き送信の確認ダイアログの表示

3. 実行結果確認

正常にスクリプトが実行されると、「以下の下書きが送信されました: ”宛先”:”件名”」とダイアログが表示されます。

下書き送信完了のダイアログ

最後に、Gmailを開いて、下書きが送信されていることを確認します。

「送信済み」リストから、スプレッドシートに記載した内容の下書きが一括送信されていることを確認できます。

Gmailで下書きが送信されたことを確認する

まとめ

GASを活用することで、Googleスプレッドシートに入力したデータと同じ内容の下書きを自動でGmailから送信することができます。

大量のメールを送信する必要があるときに、作業を自動化することで効率良くメールを処理することができます。

ぜひ、ご自身のスプレッドシートでも試してみてください。


Google スプレッドシートとGoogle Apps Script(GAS)を使用して、複数の宛先にGmailの下書きを一括作成する方法はこちらの記事で紹介しています。併せてご参照ください。

コメント

タイトルとURLをコピーしました