Google Apps Script でスプレッドシートに記載されたアドレス宛にメールを送る


背景・動機

営業部門から Google フォームを使った簡単なお問い合わせフォームを依頼され作成しました。

その際に、 Google Apps Script でスプレッドシート上のセルに記載されたメールアドレス宛にメールを送信するマクロを作成したため、備忘録を兼ねて投稿します。

似たような事例でお悩みの方の参考になればと思います。


実現したいこと


  • Google フォームから入力されたメールアドレス宛に返信メールを送信したい。

  • 返信するメールの本文は、返信する相手によって変更したい。

  • メールを返信した行がわかるようにしたい。

Google スプレッドシートは以下のような構成とします。

タイムスタンプ
メールアドレス
メール本文
メール送信済み

2019/01/02 10:11:30
test1@example.com
ここに本文
済み

2019/01/03 11:12:30
test2@example.com
ここに本文

2019/01/04 12:13:30
test3@example.com
ここに本文
済み


実装方法

Google Apps Script でメールを送信するには、以下のようなプログラムを書きます。

MailApp.sendEmail({

to:"メールアドレス",
subject:"件名",
body:"本文"
});

これを使って Google Apps Script 上に用意した関数をマクロとして登録し、スプレッドシートの選択した行のデータを参照してメールを送信します。

// メイン関数

function main() {
// 送信確認を表示
var accept = Browser.msgBox("メールを送信しますか?", Browser.Buttons.OK_CANCEL);
if (accept == 'cancel') {
return;
}

// 選択した行番号を取得
var sheet = SpreadsheetApp.getActiveSheet();
var rowNum = sheet.getActiveCell().getRow();

// メール送信済みの場合エラー表示
var isAlreadySend = sheet.getRange(rowNum, sheet.getLastColumn()).getValue();
if (isAlreadySend == '済み') {
Browser.msgBox("既に送信済みです。");
return;
}

// 行のデータを取得
var row = sheet.getRange(rowNum, 1, 1, sheet.getLastColumn());
// メールを送信
sendMail(row.getValues());

// 送信済みにする
Browser.msgBox("送信しました");
sheet.getRange(rowNum, sheet.getLastColumn()).setValue('済み');
}

// メール送信
function sendMail(rowData) {
MailApp.sendEmail({
to: rowData[0][1],
subject: 'お問い合わせありがとうございます',
body: rowData[0][2]
});
}

Google スプレッドシートのメニューから、[ツール]->[マクロ]->[インポート]の順に選択し、作成した関数「main」をマクロとして登録すれば完了です。

Google スプレッドシートのマクロを使えば、簡単な作業は自動化でき大変便利ですので、ぜひみなさんやってみてください。