背景・動機
営業部門から 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 スプレッドシートのマクロを使えば、簡単な作業は自動化でき大変便利ですので、ぜひみなさんやってみてください。