みやもとメモ

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

目次
目次

【GAS×スプレッドシート×Gmail】TO、CC、BCCを複数指定する

この記事をシェアする

今回はGAS(Google Apps Script)に関して書いていきます。

以前、「スプレッドシートの内容でGmailを作成」する記事を投稿しました(以下リンク)。

今回は上記のGASプログラムをカスタマイズしてみます。

スプレッドシートのTO・CC・BCCそれぞれの列に複数のメールアドレスを指定し、Gmailと連動させます

それでは本題へ。

スプレッドシートを修正

まずはスプレッドシートを修正します。

TO・CC・BCC列に複数のメールアドレスを指定します。

スプレッドシート:複数のメールアドレスを指定

メールアドレスを複数指定する場合は、改行して指定するようにします。
この辺りのルールはお好みで。

GAS側ではカンマ区切りを想定しているようなので、スプレッドシート側でもカンマ区切りで設定するパターンもアリです。
スプレッドシート側をカンマ区切りにすれば、GAS側の修正は不要になるはず。

ただそれだと横に長くなってしまうため、私の場合は改行としました。

ということで、プログラムで”改行”を”カンマ”に変換する処理を追加しています。

プログラム

プログラムは以下の通りです。
※後ほどプログラム差分も載せます

// スプレッドシートのファイル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) {
    // メール送信対象か
    if (!address.sendTarget) continue;
    // メールアドレス
    const to = toCsv(address.mailAddress);
    // メール件名
    const subject = getSubject();
    // メール本文
    let body = getBody();
    // メール本文を置換
    body = replaceBody(body, address);
    // メールオプション
    const options = {
      'cc': toCsv(address.mailAddressCc),
      'bcc': toCsv(address.mailAddressBcc)
    }
    // 下書きメール作成
    GmailApp.createDraft(to, subject, body, options);
  }
}

/**
 * 宛先一覧からデータ取得
 */
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.every(v => v === '')) continue;
    objectArray.push({
      sendTarget: value[0], // 送信対象
      company: value[1], // 会社名
      name: value[2], // 名前
      mailAddress: value[3], // メールアドレス(TO)
      mailAddressCc: value[4], // メールアドレス(CC)
      mailAddressBcc: value[5], // メールアドレス(BCC)
    });
  }
  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;
}

/**
 * 改行コードをカンマ区切りに変換
 */
function toCsv(mailAddress) {
  return mailAddress.replaceAll('\n', ',');
}

プログラム差分

プログラム差分は以下の通りです。

プログラム差分

TO・CC・BCCを指定する際に「toCsv」を挟むようにします。
「toCsv」では改行コード(\n)をカンマ(,)に変換します。

プログラム実行

プログラムを実行します。
スプレッドシートは以下の状態とします。

スプレッドシートの状態

「会社D」だけでも良かったのですが、単一指定や未指定のパターンも動作確認しておきたいなということで。

プログラム実行
Gmailに下書きが作成される

スプレッドシートの1列目から順に、メール内容を貼っていきます。

Gmail:1通目
Gmail:2通目
Gmail:3通目
Gmail:4通目

4通目ではTO・CC・BCCそれぞれに複数のメールアドレスが設定されました。
1~3通目に関しても、特にエラーもなく想定通りに動作しました。

おわりに

ということで、「【GAS×スプレッドシート×Gmail】TO、CC、BCCを複数指定する」に関してアレコレ書いてみました。

「Arrayにしたりするのかな?」とか思っていたのですが、カンマで区切るだけで良いんですね。
思ったよりシンプルな実装で済みました。

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

関連記事

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

GASの活用事例

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

TOPへ戻る 最新記事 HOMEへ