質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.98%

【google apps script】MailApp.sendEmail()が動作しない、送信済みフォルダにメールが残らない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 551

kooooji049

score 7

自分では解決できない問題にぶつかり、teratailで初めて質問さていただきます。
質問の仕方など、至らぬ点が多々あるかもしれませんが何卒よろしくお願いいたします。

概要

googleフォームを用いたセミナー申し込みフォームで、セミナー申し込み者に対し自動返信メールを送る環境を構築しました。しばらくは問題なく動作していましたが、突然自動返信メールが送られず送信済みフォルダにも送信履歴が残らなくなりました。

発生している問題・エラーメッセージ

googleフォームの回答をリンクしたスプレットシートに溜め、スプレットシートのスクリプトエディタからMailApp.sendEmail()を用いて自動返信メールを送ります。
イベントトリガーは「スプレッドシートから、フォーム送信時」としました。

少し前の現象で大変恐縮ですが、問題が発生したのは2019年4月22日から4月30日です。
5月1日以降は復旧し、問題なく動作しております。(返信メールも送られ、送信済みフォルダにも送信メールが残っています。)
その間、同じフォーム、スプレットシート、スクリプト、トリガーでセミナーの受付を行ない、スクリプト等の修正・変更はしておりません。

なお主題としている問題に関係あるか分かりませんが、スプレットシートからスクリプトを制御しているので、最近報告されている「MailApp.sendEmail()による重複送信」も合わせて頻発しております。
https://teratail.com/questions/176187
https://teratail.com/questions/174338
https://teratail.com/questions/177064

該当のソースコード

※個人情報が含まれますので、一部改変しております。

function function(){

  // 件名、本文、フッター
  var subject = "タイトル";
  var body
    = "この度は、セミナーに申し込みいただき誠にありがとうございます。\n"
    + "ご登録内容\n"
    + "---------------------------------------------------------------------------------\n";
  var footer
    = "---------------------------------------------------------------------------------\n\n"
    + "止むを得ずキャンセルされる場合やご不明な点がございましたら、\n"
    + "下記問い合わせ先までご連絡下さいますようお願い申し上げます。\n\n"
    + "============================================\n"
    + "問い合わせ先 担当\n"
    + "株式会社〇〇 ◇◇部\n"
    + "令和 太郎\n"
    + "Email:〇〇@gmail.com\n"
    + "============================================\n";

  // 入力カラム名の指定
  var TIMESTAMP_LABEL = 'タイムスタンプ';
  var NAME_COL_NAME = '氏名';
  var NAME1_COL_NAME = '氏名(ひらがな)';
  var WORK_COL_NAME = '勤務先';
  var WORKTEL_COL_NAME = '勤務先電話番号';  
  var EMAIL_COL_NAME = 'Emailアドレス'; 
  var EMAIL2_COL_NAME = 'Emailアドレス(再入力)';
  var JOB_CATEGORY_NAME = '職種';
  var NUM_COL_NAME = '会員番号';
  var INFO_COL_NAME = '通信欄';

  // メール送信先
  var admin = "△△@gmail.com"; // 管理者
  var reply = ""; // Reply-To:(問い合わせ先)
  var to    = "";    // To: (入力者のアドレスが自動で入る)

  try{
    // スプレッドシートの操作
    var sh   = SpreadsheetApp.getActiveSheet();
    var rows = sh.getLastRow();
    var cols = sh.getLastColumn();
    var rg   = sh.getDataRange();

    // メール件名・本文作成と送信先メールアドレス取得
    for (var j = 1; j <= cols; j++ ) {
        var col_name  = rg.getCell(1, j).getValue();    // カラム名
        var col_value = rg.getCell(rows, j).getValue(); // 入力値
        if ( col_name === WORK_COL_NAME ) {  //メール本文の最初に勤務先を入れる
            body = col_value+"\n"+body;
        }
        if ( col_name === NAME_COL_NAME ) {  //メール本文の最初に名前を入れる
            body = col_value+" 様\n\n"+body;
        }
        if ( col_name === EMAIL_COL_NAME ) {  //メールアドレス
            to = col_value;
        }
       if ( col_name === TIMESTAMP_LABEL ) { //タイムスタンプ⇒申込日時
            col_name = '申込日時';
        }
        if ( col_name === WORK_COL_NAME ) { //勤務先
            col_name = '勤務先';
        }

        if ( col_name === WORKTEL_COL_NAME ) { //勤務先電話番号
            col_name = '勤務先電話番号';
        }

        if ( col_name === EMAIL_COL_NAME ) { //Emailアドレス
            col_name = 'Emailアドレス';
        }

        if ( col_name === EMAIL2_COL_NAME ) {  //メールアドレス(確認用)
            col_name = 'Emailアドレス(確認用)';
        }

        if ( col_name === JOB_CATEGORY_NAME ) {  //職種
            col_name = '職種';
        }

        if ( col_name === NUM_COL_NAME ) { //会員番号
            col_name = '会員番号';
        }

        if ( col_name === INFO_COL_NAME ) { //通信欄
            col_name = '通信欄';
        }


        // 日付フォーマットの変換
        if ( col_name === '申込日時' ) {
            col_value = Utilities.formatDate(col_value, "JST", "yyyy'年'MM'月'dd'日' HH:mm:ss");;
        }
        body += "【"+col_name+"】";
        body += col_value + "\n";
    }
    body += footer;

    // 送信先オプション
    var options = {};
    if ( reply ) options.replyTo = reply;

   // メール送信
    if ( to ) {
        MailApp.sendEmail(to, subject, body, options);
        }else{
            MailApp.sendEmail(admin, "【失敗】Googleフォームにメールアドレスが指定されていません", body);
        }
    }catch(e){
        MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message);
    }

}

試したこと

問題の起きたgoogleアカウントで、新たに別のフォームとスプレットシートを建てて同じスクリプト、同じ内容のトリガーで返信メールが送られるか試しましたが、メールは送られず、送信済みフォルダにも残りませんでした。

別のgoogleアカウントで同じ環境を再現すると問題なく送信されました。

問題が起きたのはfreeのgoogleアカウントであったため、google apps scriptの制限を疑いましたが、メール送信数、トリガーの合計実行時間等、問題ありませんでした。

次にトリガー設定を疑い、トリガーログを調べましたがステータスは全て「完了」となっており、トリガーの動作は問題ないと考えました。

現在の状態

現在は復旧しており、問題の現象を再現できません。
MailAppではなくGmailAppだと誤動作がないという書き込みは見かけましたが、根本的な原因がわからず気持ちが悪いです。
同じような現象を経験された方がいらしたら何かご教授いただけないでしょうか。
(当該期間中にAPIの不具合があった等の情報でも嬉しいです。)
よろしくお願い申し上げます。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • macaron_xxx

    2019/05/20 10:41

    何が聞きたいんですか?
    不具合ならGoogleに問い合わせないと誰もわかりません。

    キャンセル

  • kooooji049

    2019/05/20 19:56

    macaron_xxx様
    質問内容が不明確で申し訳ございません。

    私の不手際ですが、問題の現象が起こった際にスクリプトのトレースによる問題の切り分けを行いませんでした。
    そうこうしているうちに何の変更も加えていないのに復旧したため、原因がわからなくなりました。

    教えていただきたかった事は、
    ①同様の現象を経験し原因究明した方がいれば、原因は何であったのか
    ②当該期間中にAPIの不具合はあったのか
    です。

    しかしmacaron_xxx様のご指摘の通り、Googleに問い合わせるべき内容でした。
    不適切な質問でお騒がせをして申し訳ございませんでした。

    キャンセル

回答 1

check解決した方法

0

プログラミングの本質とは離れた質問であり、teratailでの質問として適切でありませんでした。
自己解決として質問を閉じます、大変失礼しました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる