0

特定のセルに値が必要な場合に自動メールを送信しようとしています。私はこれを継続的に行う方法を考え出しました。つまり、条件が満たされているかどうかを確認してメールを送信するために、特定の時刻に毎日起動するように設定されています。しかし、私は電子メールが一度送信された後にトリガが動作を停止するようにしたいと思います。Google Apps Scriptでは、条件が満たされた場合に1回だけメールを送信する方法

条件を満たすとメールを送信する機能があります。条件が満たされない場合、トリガが作成され、トリガが1回だけ再度実行されます。トリガーは条件が満たされるまで作成され続けます。

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var ssName = ss.getName(); 
var emailAddress = ss.getRange("Tab1!B4").getValue(); 
var Test1 = ss.getRange("Tab1!B6").getValue(); 

function SendEmailOnce(){ 
    if (Test1 <= 10) { 
    MailApp.sendEmail({ 
     to: emailAddress, 
     subject: "Sample subject: " + ssName, 
     htmlBody: "Sample message<br/> Regards, robot", 
    }); 
    } 
    else { 
     function createTriggerCheckAgain() { 
     ScriptApp.newTrigger('SendEmailOnce') 
     .timeBased() 
     .after(60 * 1000) 
     .create(); 
     } 
    } 
} 

それが動作しないいくつかの理由について:ここで

私が書いたコードです。 Test1の値が15のときに関数を実行した後、値を5に変更すると、電子メールは送信されません。

別個の場合は、その部分が機能します。 1.機能を実行するときに値が5の場合、電子メールが送信されます。 2.値が5の間にそのトリガーを作成する機能を実行してから1分後にメールが送信されます。

おそらくもっと簡単な方法がありますか?私はJavaScriptの初心者です。事前に感謝の意を表します。

答えて

2

トリガーが60秒後に実行されると、Test1は定義されなくなるため、undefined<= 10であるかどうかを確認することはできません。理由は、SendEmailOnceのコードだけが実行され、コードはそのコード外ではないからです。変数はemailAddressでも同じです。

呼び出すことができる関数に最初の4行のコードを含めるか、Test1emailAddressの値を返すか、SendEmailOnce関数に含めます。

修正コード:

function SendEmailOnce(){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var ssName = ss.getName(); 
    var emailAddress = ss.getRange("Tab1!B4").getValue(); 
    var Test1 = ss.getRange("Tab1!B6").getValue(); 

    if (Test1 <= 10) { 
    MailApp.sendEmail({ 
     to: emailAddress, 
     subject: "Sample subject: " + ssName, 
     htmlBody: "Sample message<br/> Regards, robot", 
    }); 
    } 
    else { 
    function createTriggerCheckAgain() { 
     ScriptApp.newTrigger('SendEmailOnce') 
     .timeBased() 
     .after(60 * 1000) 
     .create(); 
    } 
    } 
} 
+0

はご提案をいただき、ありがとうございます。それはうまくいきませんでしたが、おそらく私が見逃していた何か他のものが原因です。しかし、私はそれをすべて別の方法で動作させることができました。条件が満たされたときに電子メールを送信し、元のトリガーを削除するトリガーをスケジュールするだけです。それでも、お世話になりました。 –

関連する問題