0

15 分ごとにトリガーされ、新しいメッセージの受信トレイ ラベルを監視する Google App Script を作成しました。ラベルは、特定の電子メール アドレスと特定の件名から送信された場合にのみ電子メールにラベルを付ける電子メール フィルターによって適用されます。スクリプトを実行すると、次のようになります。

  1. そのラベルが付いたメッセージがあるかどうかを確認します
  2. メールの本文を取得します
  3. で文を分割します"<br />"
  4. 結果の配列をスプレッドシートに貼り付けます
  5. 受信トレイに表示されないように、受信トレイのラベルを削除します。

私が抱えている問題は、スクリプトが実行時にスプレッドシートに何も貼り付けず、それをスキップしてラベルを削除することです。手動でラベルをメッセージに追加すると、次にスクリプトを実行すると、すべての配列要素がスプレッドシートに完全に追加され、ラベルが削除されます。しかし、毎回ラベルを再適用する必要はありません。私はスクリプトを書くのが初めてなので、私のコードが受け入れられた基準に達していない場合は申し訳ありません。

function myFunction() {

//Get Email and split data into array
var NewPhy = GmailApp.getUserLabelByName("New Physician Request")
var TransPhy = GmailApp.getUserLabelByName("Transferred Physician Request")
var Threads = GmailApp.getUserLabelByName("New Physician Request").getThreads();
if (Threads.length > 0) {
    var messages = Threads[0].getMessages()
    var body = messages[(messages.length - 1)].getBody().split("<br />")

    //Search, tag, and import values into spreadsheet
    var Spreadsheet = SpreadsheetApp.openByUrl(" Spreadsheet URL here ");
    var Sheet = Spreadsheet.getSheetByName("Sheet Name here").insertRowBefore(3);

    var SiteElement = ArrayLib.find(body, -1, "Associated Customer Site Information:")
    var Site = body[SiteElement + 1].replace(/[A-Z]{3}/gm, "").replace(/(<([^>]+)>)/igm, "").replace(/^[ \t]+/igm, "").replace(/&lt;/igm, "").replace(/&gt;/igm, "").replace(/&nbsp;/igm, "").replace(/&quot;/igm, "").trim()
    var A3 = Sheet.getRange("A3").setValue(Site).setBorder(true, false, false, false, false, false).setBackgroundRGB(239, 239, 239);
    var ConsultantElement = ArrayLib.find(body, -1, "Marketing Consultant 1 =")
    var Consultant = body[ConsultantElement].replace("Marketing Consultant 1 =", "").replace(/[A-Z]{3}/gm, "").replace(/(<([^>]+)>)/igm, "").replace(/^[ \t]+/igm, "").replace(/&lt;/igm, "").replace(/&gt;/igm, "").replace(/&nbsp;/igm, "").replace(/&quot;/igm, "").replace(/^[ \t]+/, "").trim()
    var C3 = Sheet.getRange("C3").setValue(Consultant).setBorder(true, false, false, false, false, false);

// Remove inbox label and add Transferred label
    TransPhy.addToThread(Threads[0])
    NewPhy.removeFromThread(Threads[0])
}
4

1 に答える 1

0

@patt0 - .getPlainBody() オプションを試してみましたが、役に立ちませんでした。問題はスクリプトがデータを解析する方法ではなく、最初の「if」ステートメントにあることが判明しました。最初の4行をこれに変更し、修正しました:

var NewPhy = GmailApp.getUserLabelByName("New Physician Request")
var TransPhy = GmailApp.getUserLabelByName("Transferred Physician Request")
var Threads = NewPhy.getThreads()
if (Threads[0]) {  
        var messages = Threads[0].getMessages()
        var body = messages[0].getBody().split("<br />")

この後、最初の質問に表示されているように残りのコードを残しましたが、動作します。将来このような例が必要になる可能性がある人のために、このコードは 5 分ごとにトリガーされ、定型書簡を含むメールの Google 受信トレイを監視し、その定型書簡からデータを解析してスプレッドシートに追加します。

于 2013-09-26T15:00:58.870 に答える