今回は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', ','); }
プログラム実行
プログラムを実行します。
スプレッドシートは以下の状態とします。
「会社D」だけでも良かったのですが、単一指定や未指定のパターンも動作確認しておきたいなということで。
スプレッドシートの1列目から順に、メール内容を貼っていきます。
4通目ではTO・CC・BCCそれぞれに複数のメールアドレスが設定されました。
1~3通目に関しても、特にエラーもなく想定通りに動作しました。