メール作業を自動化! スプレッドシートとGASで複数の宛先へGmailを送信

この記事をおすすめの方
  • 毎回のGmail送信に手間を感じている方
  • メールの一部だけを変更して、複数の宛先に送信したい方

スプレッドシートで管理している顧客や関係先へメールを送るにあたって、同じような内容を一件ずつ送ることはありませんか?

例えば、メール本文の打ち合わせ日程だけを変えて複数の宛先に送る場合、手作業ではミスが起きたり時間がかかってしまいます。

そんな時、スプレッドシートを使ってメールを自動的に送信できる方法があれば便利ですよね。

この記事ではGoogleスプレッドシートとGoogle Apps Script(GAS)を使って、メール送信を自動化する方法をご紹介します。

これによって、毎回のメール送信に時間を取られることなく、他の重要な業務に集中できるようになります。

目次

完成イメージ

Gmail送信内容

今回作成するスプレッドシートとGASを使って、自動的にメール送信する方法の完成イメージです。

スプレッドシートに入力した各宛先の情報をもとに、メール本文の一部を自動でカスタマイズし、Gmailからメールを送信します。

今回の例では、変更部分を名前(姓)打合せ日打合せ時間としてメール本文に差し込みます。

あらかじめ用意したメール下書きを複製し、これらの情報が自動的に置き換えられ、個別に対応したメールが送信されます。

スプレッドシートの入力項目

A列(名前(姓))メール宛先となる方の名前(姓)を入力します。
Gmailで送るメール本文にこの名前を差し込む形になります。
B列(名前(名))名前(名)を入力します。
今回の例ではメール本文に載りません。
C列(メールアドレス)送信先のメールアドレスを入力します。
D列(打合せ日)打合せの日付を入力します。
E列(打合せ時間)打合せの時間を入力します。
F列(チェック)メール送信対象の人にチェックを入れます。
この列を使って送信するかどうか選択します。
G列(送信時間)メール送信時のタイムスタンプが自動的に記録されます。
メールを送信したかどうか確認できます。
シート名「メール送信リスト」を例として名前を付けています。
GAS実行の際にこのシート名を使用します。

F列 チェック欄の利用方法

F列のチェック欄を利用することで、送信する相手を簡単に選べます。

例えば、山田さんと鈴木さんにはメールを送りたいが、佐藤さんには後で送りたい場合、佐藤さんのチェックを外しておきます。

チェックが入っている行のみメールが送信され、送信が完了した後にG列に送信時間が記録されます。

Google Apps Script(GAS)の設定

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('メール送信リスト');  // タブ名「メール送信リスト」を指定
  var range = sheet.getRange("A2:G");  // A2からG列までのデータ範囲を取得
  var data = range.getDisplayValues();  // 範囲内の表示されているデータを取得
  var draftId = getDraftIdBySubject('打合せ日程について');  // 下書きメールの件名
  
  if (!draftId) {
    Logger.log("Error: 下書きが見つかりませんでした。");
    return;  // 下書きが見つからない場合は処理を中断
  }

  data.forEach(function(row, index) {
    var sentTime = row[6];  // G列: 送信時間
    if (row[5] === 'TRUE' && !sentTime) {  // F列のチェックボックスがチェックされているか確認
      var recipient = row[2];  // C列: メールアドレス
      var subject = '打合せ日程について';  // 送信するメールの件名
      var body = getDraftMessageBody(draftId);  // 下書きの本文を取得
      var attachments = getDraftAttachments(draftId);  // 下書きの添付ファイルを取得
      
      // 名前(姓)、打合せ日、打合せ時間の情報をスプレッドシートのデータで置き換え
      body = body.replace(/{名前(姓)}/g, row[0])       // A列: 名前(姓)
                 .replace(/{打合せ日}/g, row[3])         // D列: 打合せ日
                 .replace(/{打合せ時間}/g, row[4]);       // E列: 打合せ時間
      
      // GmailApp.sendEmailを使ってメールを送信(HTML形式の本文を使用)
      GmailApp.sendEmail(recipient, subject, '', {
        htmlBody: body,
        attachments: attachments  // 添付ファイルをメールに追加
      });

      // 送信日時をG列に記録
      var japanTime = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss');
      sheet.getRange(index + 2, 7).setValue(japanTime);  // G列に送信日時を記録
    }
  });
}

// 下書きの添付ファイルを取得する関数
function getDraftAttachments(draftId) {
  var draft = GmailApp.getDraft(draftId);
  var message = draft.getMessage();
  return message.getAttachments();  // 添付ファイルを取得
}

// 指定された件名の下書きを取得する関数
function getDraftIdBySubject(subject) {
  var drafts = GmailApp.getDrafts();
  for (var i = 0; i < drafts.length; i++) {
    if (drafts[i].getMessage().getSubject() === subject) {
      return drafts[i].getId();
    }
  }
  Logger.log("Error: 件名が '" + subject + "' の下書きが見つかりませんでした。");
  return null;  // 下書きが見つからなかった場合、nullを返す
}

// 下書きの本文を取得する関数
function getDraftMessageBody(draftId) {
  var draft = GmailApp.getDraft(draftId);
  var message = draft.getMessage();
  return message.getBody();  // 下書きのHTML本文を取得
}
スクリプトの説明
メインの処理 :sendEmails()

sendEmails() は、スプレッドシートのデータを取得して、各行に対応するメールを自動送信するメインの関数です。

スプレッドシートのデータ取得
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('メール送信リスト');
var range = sheet.getRange("A2:G");
var data = range.getDisplayValues();
  • SpreadsheetApp.getActiveSpreadsheet().getSheetByName('メール送信リスト'): 「メール送信リスト」という名前のシートを指定して取得します。
  • sheet.getRange("A2:G"): A2からG列までの範囲を指定してデータを取得します。
    この範囲には、名前(姓)、メールアドレス、打合せ日、打合せ時間、チェックボックス、送信日時が含まれます。
  • getDisplayValues(): 範囲内の表示されている値を配列形式で取得します。
下書きメールの取得
var draftId = getDraftIdBySubject('打合せ日程について');
if (!draftId) {
  Logger.log("Error: 下書きが見つかりませんでした。");
  return;
}
  • getDraftIdBySubject('打合せ日程について'): 件名が「打合せ日程について」の下書きをGmailから検索し、そのIDを取得します。
  • 下書きが見つからなかった場合は、エラーメッセージを記録して処理を終了します。
データごとにメールを送信
data.forEach(function(row, index) {
  var sentTime = row[6];  // G列: 送信時間
  if (row[5] === 'TRUE' && !sentTime) {  // F列のチェックボックスがチェックされているか確認
  • row[6]: G列の送信日時を確認。送信済みの行には送信日時が入っているので、それを確認します。
  • row[5] === 'TRUE': F列にあるチェックボックスが「TRUE」(チェックされている)かを確認し、メールを送信する対象かどうかを判断します。
  • この条件に該当する行に対して、後続のメール送信処理が行われます。
メール送信準備
var recipient = row[2];  // C列: メールアドレス
var subject = '打合せ日程について';
var body = getDraftMessageBody(draftId);
var attachments = getDraftAttachments(draftId);
  • row[2]: C列からメールアドレスを取得して、送信先を指定します。
  • getDraftMessageBody(draftId)およびgetDraftAttachments(draftId): 先ほど取得した下書きメールの本文と添付ファイルを取得します。
本文のカスタマイズ
body = body.replace(/{名前(姓)}/g, row[0])       // A列: 名前(姓)
           .replace(/{打合せ日}/g, row[3])         // D列: 打合せ日
           .replace(/{打合せ時間}/g, row[4]);       // E列: 打合せ時間
  • body.replace(): スプレッドシートのデータを元に、下書きメールのプレースホルダー({名前(姓)}, {打合せ日}, {打合せ時間})を実際のデータに置き換えます。
  • row[0]: A列(名前(姓))、row[3]: D列(打合せ日)、row[4]: E列(打合せ時間)を使用して、個別のメール内容を動的にカスタマイズします。
メールの送信
GmailApp.sendEmail(recipient, subject, '', {
  htmlBody: body,
  attachments: attachments
});
  • GmailApp.sendEmail(): 取得した本文と添付ファイルを使って、指定の宛先にメールを送信します。htmlBodyを使うことでHTML形式のメールが送られます。
送信日時の記録
var japanTime = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss');
sheet.getRange(index + 2, 7).setValue(japanTime);  // G列に送信日時を記録
  • Utilities.formatDate(): 日本時間での現在の日時を取得します。sheet.getRange(index + 2, 7).setValue(japanTime): メールを送信した行のG列に送信日時を記録します。これにより、重複送信を防ぐことができます。
サポート関数:getDraftAttachments(draftId)
function getDraftAttachments(draftId) {
  var draft = GmailApp.getDraft(draftId);
  var message = draft.getMessage();
  return message.getAttachments();  // 添付ファイルを取得
}
  • 指定された下書きメールのIDに基づいて、添付ファイルを取得します。
  • GmailApp.getDraft()で下書きメールを取得し、そのメッセージから添付ファイルを取得します。
サポート関数:getDraftIdBySubject(subject)
function getDraftIdBySubject(subject) {
  var drafts = GmailApp.getDrafts();
  for (var i = 0; i < drafts.length; i++) {
    if (drafts[i].getMessage().getSubject() === subject) {
      return drafts[i].getId();
    }
  }
  Logger.log("Error: 件名が '" + subject + "' の下書きが見つかりませんでした。");
  return null;
}
  • Gmailに保存されている全ての下書きから、指定した件名と一致するメールを探し、そのIDを取得します。見つからない場合はnullを返します。
サポート関数:getDraftMessageBody(draftId)
function getDraftMessageBody(draftId) {
  var draft = GmailApp.getDraft(draftId);
  var message = draft.getMessage();
  return message.getBody();  // 下書きのHTML本文を取得
}
  • 指定されたIDに対応する下書きメールから本文(HTML形式)を取得します。

このスクリプトは、スプレッドシートに記載されたメールアドレスと打合せ日程を元に、Gmailから自動でメールを送信します。

メール本文は、あらかじめ用意した下書きメールのテンプレートをカスタマイズして作成されます。

スプレッドシートの情報をもとに個別にメールが送られ、送信済みの日時も記録されます。

送信日時を記録することで、重複の送信を防ぐ仕組みになっています。

STEP
GASエディタを開く

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

STEP
GASスクリプトの作成

上のコードをコピーしてエディタに貼り付けます。

STEP
スクリプトを保存

コードを書いたら、名前をつけて保存します。

(例:「メール送信」)

メールの下書き作成

次にGmailを開き、下書きのメールテンプレートを作成します。

下書きメールには以下のようにプレースホルダー{ }を使って、スプレッドシートのデータが差し込まれるようにします。

下書きの例

件名:打合せ日程について

{名前(姓)} 様

お世話になっております。

以下の通り、打合せ日程が決まりましたのでご案内いたします。

- 打合せ日: {打合せ日}
- 時間: {打合せ時間}

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

メールの本文内に {名前(姓)}{打合せ日} というプレースホルダーを入れておくことで、スプレッドシートのデータが自動的に差し込まれます。

スクリプトを実行してメールを送信

すべての設定が完了したら、Apps Scriptのエディタ画面からスクリプトを実行します。

STEP
GASエディタを開く

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

STEP
スクリプトを実行

スクリプトを実行して、メール送信します。

初めてそのスクリプトを実行する場合は権限の確認が必要です。

そのため、『権限を確認』を押します。

許可の詳細手順

「詳細」をクリックします。

無題のプロジェクト(安全ではないページ)に移動」をクリックします。

許可」をクリックします。

これでスプレッドシートにチェックが入った人に自動的にメールが送信され、送信日時が記録されます。

スプレッドシートの送信日時記録

なお、スプレッドシート上にボタンを作成しておくとより簡単にスクリプトを実行できるようになります。

Gmailの送信内容

まとめ

以上で、スプレッドシートとGASを使った基本的なメール送信自動化が完了です。

一度設定すれば、これまで手間がかかっていたメール送信作業を自動で効率よく進められます。

メールの一部だけを変更して、各宛先に送りたい時にご活用ください。

弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。

GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。

また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。

貴方の業務改善を全力でサポートいたします。

お問い合わせはこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次