web-dev-qa-db-ja.com

GoogleAppスクリプトトリガーが機能しない

メールを送信するGoogleApp Scriptがあり、フォームを送信するたびにメールを送信するようにトリガーを設定しました。問題は、トリガーが最初の数分間は完全に正常に機能することですが、その後は正しいデータを入力した後でも機能します。スクリプトはメールを送信しません。スクリプトの実行ボタンを手動で押す必要があります。これが私のコードです

var EMAIL_SENT = "EMAIL_SENT";
function sendEmailsapp() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = sheet.getLastRow();   // Number of rows to process
  // Fetch the range of cells A2:B3

  var dataRange = sheet.getRange(startRow, 1, numRows,8)
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailAddress = row[4];  // First column
    var message = row[5];       // Second column
    var emailSent = row[7];  // Third column
    var money=row[6]
    if (emailSent != EMAIL_SENT) {  // Prevents sending duplicates
      var subject = "You have been registered for follwoing events:-";
      var event;

      MailApp.sendEmail(emailAddress, subject, "Please bring your college id and copy of this mail either in phone or printed paper"+
                        "\n\n"+"Name:-"+row[1]+"\n"+"USN:-"+row[2]+"\n"+"Mobile:-"+row[3]+"\n"+"Event:-"+ message+"\nMoney status:-"+money+"You registered on"+row[0]);
        sheet.getRange(startRow + i, 8).setValue(EMAIL_SENT);


      // Make sure the cell is updated right away in case the script is interrupted
      SpreadsheetApp.flush();
    }
  }
}

コードは正常に機能します。唯一の問題はトリガーです。

これが私のトリガーの画像です。 sendEmailsappがトリガーであり、sendEmailswebも同じ問題を抱えている別のトリガーです。 image

これがログです enter image description here

私の唯一の問題は、トリガーがトリガーされないことです。それは、送信される電子メールではありません。

9
user4312531

スクリプトが正しいにもかかわらず、私のトリガーがあなたのトリガーと同じように機能していませんでした。

解決策は非常に愚かでした。トリガーを削除して、新しいトリガーを追加しました。まったく同じトリガー。

21

スクリプトでこの問題が発生しましたが、イベントとしてTime-Drivenを使用していました。毎分設定しましたが、何もしません。上記のロギング方法を使用したところ、トリガーが正常に機能することがわかりました-設定した分ごとに。しかし、実際には、[実行]ボタンを明示的にクリックしたときと同じことはしません。

私はそれが次の行と関係があるのではないかと思った:

_var sheet = SpreadsheetApp.getActiveSheet();
_

だから私はそれをいじって、それを次のように変更しました:

_var spreadsheet = SpreadsheetApp.openById("INSERT_SPREADSHEET_ID_HERE");
var sheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
_

そしてそれはついにうまくいった。

_INSERT_SPREADSHEET_ID_HERE_をスプレッドシートのIDに置き換えます(URLから https://docs.google.com/spreadsheets/d/INSERT_SPREADSHEET_ID_HERE/edit#gid= )。

そして、getSheets()[0]から、_0_は、その特定のスプレッドシート内の複数のシートの最初のものになります。

これが何らかの形で役立つことを願っています。

10
Shafiq Hakim

私が便利だと思ったのは、「リソース>現在のプロジェクトのトリガー」で通知を即時に設定することでした。エラー時にメールを送信するように設定しました。その電子メールには、解決できる問題の詳細が含まれています:)。

1
kpg

問題が引き金ではないことは間違いありません。コードが機能していても、コードの条件付きセクションが機能しなくなっている可能性があります。期待した結果が得られない場合でも、関数が実際にトリガーされていることをテストして確認できます。関数の直後にLogger.log()ステートメントを置きます。

_function sendEmailsapp() {
  Logger.log('sendEmailsapp ran!');
_

次に、ログを表示します。関数がトリガーされていないなんて信じられません。電子メールが送信されていない可能性がありますが、そのメッセージ「sendEmailsappが実行されました!」を取得することは間違いありません。 LOGSに印刷されます。だから、それはあなたがする必要がある最初のことです。

次に行う必要があるのは、電子メールを取得した直後にLogger.log()ステートメントを配置することです。

_var emailSent = row[7];
Logger.log('value of the email is: ' + emailSent);
_

次に、実際に返される値についてLOGSを確認します。返されるすべての値が「EMAIL_SENT」の場合、電子メールは送信されません。

実際の結果が何であるかを知る必要があります。印刷されたものをLOGSに提供する必要があります。

0
Alan Wells