LoginSignup
2
6

More than 5 years have passed since last update.

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

Posted at

背景・動機

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

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6