Gmailのメールを差し込み文章で作成する方法〜Google Apps Script〜

メモ

はじめに

この記事は、Google Apps Script(以下、GAS)を利用して、Gmailのメールを作成する(もしくは送信する)際に、宛先ユーザーごとに最適なメールを作成したい方向けの記事となります。例えば、宛名(〇〇 様)や宛先(送信先Email)、本文(納品物、請求額、見積額 etc)など、個々に異なるメールの内容を作成するものです。

前提

以下の点を前提に構成されています。

  • Spreadsheetにデータベース(差し込みする情報・データ)が整理された状態であること。
  • 差出人の設定など、Gmailの仕様についての理解があること。

注意点

  • GASによるGmailのメール送信や下書きメールの作成は、1日あたりの送信数や1メールあたりに設定可能な宛先数などに制限がある点に注意してください。 *詳細はこちら

環境

  • chrome V8ランタイムを有効にしています。

ゴールイメージ

宛先ごとに最適な文書となるメールを作成できた状態です。なお、この例では下書きの作成をゴールとしています。

実装方法

コードの例

function createMail() {
  // シートを定義
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const listSheet = spreadsheet.getSheetByName("List");
  const mailSheet = spreadsheet.getSheetByName("メール");

  //データを取得します。
  var values = listSheet.getDataRange().getValues(); //二次元配列[["Email(送信先)", "会社名", "部署", "役職"......]]

  //ベースとなる件名と本文を取得します。
  var baseSubject = mailSheet.getRange("B1").getValue();
  var baseBody = mailSheet.getRange("B2").getValue();

  //1行目(配列番号0)は差し込みには使用しないため、配列番号1から開始しています。
  for(var i = 1; i < values.length; i++) {
    //差し込みに使用するデータを配列で取得します。
    var value = values[i]; //["Email(送信先)", "会社名", "部署", "役職"......]

    //配列番号を指定し、所定の値を取得する。
    var email = value[0]; //送信先
    var company = value[1];
    var dept = value[2];
    var position = value[3];
    var name = value[4];
    var billingMonth = value[5];
    var billingAmount = value[6];
    var dueDate = value[7];

    //ベースの文章の中で差込する箇所を置き換える。
    var subject = baseSubject
    .replace("${請求月}", billingMonth)

    var body = baseBody
    .replace("${会社名}", company)
    .replace("${部署}", dept)
    .replace("${役職}", position)
    .replace("${名前}", name)
    .replace("${請求月}", billingMonth)
    .replace("${請求額}", billingAmount.toLocaleString())
    .replace("${締切}", Utilities.formatDate(dueDate, "JST", "yyyy/MM/dd"));
    
    //下書きメールを作成する。
    GmailApp.createDraft(email, subject, body);
  }
}

処理の流れ

・データベースから差し込み情報を取得します。

Email(送信先)会社名部署役職名前請求月請求額締切
aaaaaaa@example.comA株式会社総務部主任山田10月123,45610/30
bbbbbb@example.comB株式会社経理部部長鈴木11月34,56711/30
ccccc@example.comX株式会社人事部主務田中12月67,89112/31
dddddd@example.comZ株式会社総務課課長佐藤1月345,1231/31

・次に、ベースとなる件名や本文を取得します。

・差し込み処理として、ベースの文章から変換したい箇所の本文をreplace() メソッドで置き換えします。ポイントは、変換前の単語(本例では、${xxxx}としています)は、任意のもので構いません。ただし、文章内に重複する単語が存在する場合、他も同時に変換されてしまう点に注意してください。

ベースとなる本文と置き換える箇所

${請求月}の請求額のお知らせ
${会社名}
${部署}
${役職} ${名前} 様

いつもお世話になっております。
〇〇株式会社の xxです。

${請求月} の請求額をお知らせします。

ーーー
請求額: ${請求額} 円
締切: ${締切}
ーーー

どうぞよろしくお願い致します。

yyyyyyy
xxxx

置き換えるコード

var subject = baseSubject
.replace("${請求月}", billingMonth)
    var body = baseBody
    .replace("${会社名}", company)
    .replace("${部署}", dept)
    .replace("${役職}", position)
    .replace("${名前}", name)
    .replace("${請求月}", billingMonth)
    .replace("${請求額}", billingAmount.toLocaleString())
    .replace("${締切}", Utilities.formatDate(dueDate, "JST", "yyyy/MM/dd"));

・Gmailの下書きを作成します。

コメント