masatoz’s blog

プログラミングのメモ、日常の記録

Googleフォームから自動返信メールを送る

サンプルコード

コードだけアップ。

メール本文のテンプレートをスプレッドシートから取得している。

スクリプトにハードコーディングすると変更しづらいのでこのほうがよいかと思う。

function sendMailFromForm(e) {
  
    // 件名、本文
    var subject = "受付完了"; 

    //スプレッドシートから返信メール本文を取得する
    var body = getBody();
    Logger.log(body);
    
    // 列名の指定
    var MAIL_COL_NAME = 'メールアドレス';

    // メール送信者
    var admin = "sample@hoge.com";
    var cc = "";        // Cc:
    var bcc = admin;    // Bcc:
    var reply = admin; // Reply-To:
    var to = "";       // To: 

    // 送信先オプション
    var options = {};
    if ( cc ) options.cc = cc;
    if ( bcc ) options.bcc = bcc; //bccで確認メールを自分宛に送ることが可能
    if ( reply ) options.replyTo = reply; //返信先メールアドレス

    try{
        // スプレッドシートの操作
        var sh = SpreadsheetApp.getActiveSheet(); //スプレッドシートをshに入れる
        var new_row = sh.getLastRow(); //シートの最終行取得する
        var col = sh.getLastColumn(); //右端の列を取得する
        var r = sh.getDataRange();

        // メール件名・本文作成と送信先メールアドレス取得
        for (var j = 1; j <= col; j++ ) {
            var col_name = r.getCell(1, j).getValue();        // 列名を取得。列見出しは1行目にあるのでgetCell(行数、列数)の行数=1で固定
            var cell_value = r.getCell(new_row, j).getValue(); // 一番下の行のセル値、すなわち最新のフォームデータの値を取得
            
            if ( col_name === MAIL_COL_NAME ) {
              to = cell_value;
            }
        }

        // メール送信
        MailApp.sendEmail(to, subject, body, options);
    } 
    catch(e) {
        MailApp.sendEmail(admin, "Error:自動返信メール送信エラー(Googleフォーム): ", e.message);
    } 
}

//「返信」シートA1セルの中身を取得する関数
function getBody() {
    var bk = SpreadsheetApp.getActiveSpreadsheet();
    var sh = bk.getSheetByName("body");
    if(sh != null) {
        return sh.getRange("A1").getValue();
    }
}