みやもとメモ

「Notion」「Google Apps Script」「ブログカスタマイズ」などについて書いていきます。

目次
目次

【GAS】スプレッドシートの内容でGmailを作成(宛名/メールアドレス/件名/本文)

この記事をシェアする

今回はGAS(Google Apps Script)に関して書いていきます。
GASで「スプレッドシート」と「Gmail」を操作します。

スプレッドシートでは以下の情報を管理します。

  • 会社名
  • 名前
  • メールアドレス
  • メール件名
  • メール本文

上記の内容を取得し、Gmailを組み立てるプログラムをGASで実装してみます。

「定型文だけど宛先だけ違うメールを送る」みたいな業務はよくあるはずで、それをGASで自動化してみます。

それでは本題へ。

GASとは?

まずは「GASとは?」について書いておきます。

Google Apps Script(GAS)は、ひとことで言えばGoogleが提供する各種サービスの自動化/連携を行うためのローコード開発(※1)ツールです。GASを使うと、Gmailやカレンダー、GoogleスプレッドシートGoogleドライブなど、Googleが提供する様々なサービス上で処理を自動化したり、複数のサービスを連携させたりできます。
※1:ローコード開発:可能な限りソースコードを書かずにアプリケーションを開発する手法

出典:【入門】GASとは?できること&活用法を解説(サンプルコード付き) - マーケティングオートメーションツール SATORI

satori.marketing

やりたいこと

記事の冒頭でも触れた通り、スプレッドシートで管理している宛先情報を基にGmailを組み立てます。

スプレッドシートの内容は以下の通りです。

スプレッドシートの内容

GASで上記の内容を取得し、Gmailを組み立てます。

メール本文の{{会社名}}や{{名前}}を、宛先一覧の当該項目と対応させます。
GASで置換処理を実装して差し込みます。
とりあえず「{{ }}」で囲んでおけば、意図しない置換は防げるかなと。

なお、メールアドレスには自分自身のGmailアドレスを指定しています。

そのGmailアドレスにエイリアス設定して送信テストしてみます。
Gmailエイリアス設定に関しては以下を参考にして頂ければと。
www.android.com

シーケンス図

全体像をシーケンス図にまとめてみました(ざっくりですが)。

シーケンス図

ちなみに上記のシーケンス図はMermaidで書いています。
Mermaidに関しては記事も書いています。
こちらも良ければぜひ。
miya-moto-memo.hatenablog.com

今回のシーケンス図のMermaidコードも載せておきます。

%%{init:{'theme':'default'}}%%
sequenceDiagram
	autonumber
	actor User
	User->>GAS: プログラム実行
	GAS->>スプレッドシート: データ取得(メールアドレス等)
	GAS->>GAS: データ加工
	GAS->>Gmail: 下書きメール作成

事前準備

スプレッドシートの準備

先ほど画像を載せましたが、スプレッドシートを事前に作成しておきます。

スプレッドシートの準備

スプレッドシートを作成したら、以下2つの操作をしておきます。

  • ファイルIDを控えておく
  • シート名を決めておく

GASとスプレッドシートの連携

スプレッドシートのファイルIDをスクリプトプロパティに設定しておきます。
詳細は以下の記事を見てもらえればと思います。
miya-moto-memo.hatenablog.com

プログラム

準備が整ったところで、プログラムです。
※事前準備が完了している前提です。

// スプレッドシートのファイルID
const SS_FILE_ID= PropertiesService.getScriptProperties().getProperty('SPREADSHEET_FILE_ID');
// スプレッドシート
const SS = SpreadsheetApp.openById(SS_FILE_ID);

/**
 * メイン処理
 */
function main() {
  // 宛先一覧からデータ取得
  const addresses = getAddresses();
  // 下書きメール作成
  for (const address of addresses) {
    // メールアドレス
    const to = address.mailAddress;
    // メール件名
    const subject = getSubject();
    // メール本文
    let body = getBody();
    // メール本文を置換
    body = replaceBody(body, address);
    // 下書きメール作成
    GmailApp.createDraft(to, subject, body);
  }
}

/**
 * 宛先一覧からデータ取得
 */
function getAddresses() {
  const sheet = SS.getSheetByName('宛先一覧');
  const lastRow = sheet.getLastRow();
  const lastColumn = sheet.getLastColumn();
  const sheetValues = sheet.getRange(2, 1, lastRow, lastColumn).getValues();
  const objectArray = [];
  for (const value of sheetValues) {
    if(value.includes('')) continue;
    objectArray.push({
      company: value[0], // 会社名
      name: value[1], // 名前
      mailAddress: value[2], // メールアドレス
    });
  }
  return objectArray;
}

/**
 * メール件名取得
 */
function getSubject() {
  const sheet = SS.getSheetByName('メール本文');
  const subject = sheet.getRange('B1');
  return subject.getValue();
}

/**
 * メール本文取得
 */
function getBody() {
  const sheet = SS.getSheetByName('メール本文');
  const body = sheet.getRange('B2');
  return body.getValue();
}

/**
 * メール本文を置換
 */
function replaceBody(body, address) {
  body = body.replaceAll('{{会社名}}', address.company);
  body = body.replaceAll('{{名前}}', address.name);
  return body;
}

プログラム実行

上記のプログラムを実行すると、3件の下書きメールが作成されます。

プログラム実行
Gmailに下書きが作成される
スプレッドシートの値がGmailに差し込まれる

スプレッドシートで管理している「会社名」「名前」「メールアドレス」を使ってGmailを組み立てています。

おわりに

ということで、「【GAS】スプレッドシートの内容からGmailを組み立てる」に関してアレコレ書いてみました。

とりあえず必要最低限の自動化処理は実装できたかなと思います。

あとは必要に応じて、

  • メール本文の置換項目を増やす
  • メール件名にも置換項目を追加する
  • CC、BCCスプレッドシートで管理する
  • メール件名/本文のパターンを増やす
  • チェックした行だけ送信対象にする

など、色々とカスタマイズしていく感じになるかなと思います。

この記事が参考になれば幸いです。

関連記事

GAS(Google Apps Script)に関してはいくつか記事にしています。
気になる記事があればぜひ。

GASの活用事例

スプレッドシートの内容でGmailを作成 - 派生記事

TOPへ戻る 最新記事 HOMEへ