こんにちわ。たろ(@tarohibi)です。
今日は、「GASでスプレッドシートからメールアドレスを取得し、メールを送信する方法」をご紹介します。
やりたいこと
スプレッドシートのA列に、メールアドレスが一覧で記載されているとします。
そのメールアドレスに対して一斉にメールを送信したいとき、どうしますか?一つ一つ手動で送信するのは大変ですよね。
こういった場合、GAS(Google Apps Script)を使用すれば、一瞬で作成できます。
ということで、コードをご紹介していきます。
完成形
GAS(Google Apps Script)の導入方法に関しては、他サイトでも載っていますので割愛します。
やり方は簡単なんで、是非1度試してみて下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
/** * 指定したシートからメールアドレスを取得します。 * * @param {string} sheetName - メールアドレスを取得するシートの名前 * @returns {Array} - A列の空白を除外したメールアドレスの二次元配列 * @throws {Error} - 指定した名前のシートが存在しない場合 */ function getRecipientEmailsFromSheet(sheetName) { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName); if (!sheet) { throw new Error(`The sheet "${sheetName}" does not exist in the active spreadsheet.`); } const lastRow = sheet.getLastRow(); const dataRange = sheet.getRange(1, 1, lastRow); const data = dataRange.getValues(); const emails = data .filter(row => row[0]) .map(row => [row[0]]); return emails; } /** * 指定したシートからメールアドレスを取得し、各アドレスにメールを送信します。 */ function sendMails() { const SHEET_NAME = "シート1"; const EMAIL_SUBJECT = 'テスト'; const EMAIL_BODY = '○○取得完了しました。'; const recipients = getRecipientEmailsFromSheet(SHEET_NAME); recipients.forEach(recipient => { GmailApp.sendEmail(recipient[0], EMAIL_SUBJECT, EMAIL_BODY); }); } |
上記をコード入力して、一度ファイルを閉じます。
再度オープンすると、「sendMails」という関数を選択し、「実行」をクリックしてみて下さい。
すると、プログラムが走り、指定したシートからメールアドレスを取得し、各アドレスにメールが送信されます。
各関数の意味と流れ
getRecipientEmailsFromSheet(sheetName): 指定したシートからメールアドレスを取得します。
取得するシートの名前を引数として受け取り、A列の空白を除外したメールアドレスの二次元配列を返します。
指定した名前のシートが存在しない場合はエラーをスローします。
sendMails(): 指定したシートからメールアドレスを取得し、各アドレスにメールを送信します。
シート名、メールの件名、メールの本文はコード内で定義されています。
基本的な流れは次のとおりです。
- sendMails() 関数を実行します。
- getRecipientEmailsFromSheet(SHEET_NAME) 関数が実行され、指定したシートからメールアドレスを取得します。
- 取得したメールアドレスに対して、GmailApp.sendEmail(recipient[0], EMAIL_SUBJECT, EMAIL_BODY) を使用してメールを送信します。
コード解説(分からなくてOK)
適宜コメントを入れていますが、自分も書いていて難しいなと思った所を解説します。
1 2 3 |
const lastRow = sheet.getLastRow(); const dataRange = sheet.getRange(1, 1, lastRow); const data = dataRange.getValues(); |
ここでは、シートの最後の行を取得し、その範囲のデータを取得しています。これにより、シートのA列の全てのデータを取得できます。
1 2 3 |
const emails = data .filter(row => row[0]) .map(row => [row[0]]); |
この部分では、取得したデータから空白の行を除外(filter(row => row[0]))し、メールアドレスの二次元配列を作成しています。(map(row => [row[0]]))
これにより、メールアドレスだけのリストを作成します。
1 2 3 |
recipients.forEach(recipient => { GmailApp.sendEmail(recipient[0], EMAIL_SUBJECT, EMAIL_BODY); }); |
最後に、取得したメールアドレスのリストをループし、各アドレスにメールを送信します。メールの件名と本文はコード内で定義されています。EMAIL_SUBJECTとEMAIL_BODYを適宜修正下さい。
以上が、このコードの主な動作と解説です。
GASを使ってスプレッドシートからメールアドレスを取得し、一斉にメールを送信することができます。
まとめ
以上、「GASでスプレッドシートからメールアドレスを取得し、メールを送信する方法」についてお伝えしました。
使うだけであれば、コードを有効化すればすぐにでも使用できます。時限式にしたい場合は、トリガー導入すればカンタンにできます。
お手軽なので、お試し下さい。
コメント