【问题标题】:GAS script to monitor email inbox only responds intermittently用于监控电子邮件收件箱的 GAS 脚本仅间歇性响应
【发布时间】:2013-09-13 18:16:16
【问题描述】:

我创建了每 15 分钟触发一次并监控收件箱标签以查找新邮件的 Google 应用脚本。该标签由电子邮件过滤器应用,该过滤器仅对来自特定电子邮件地址和特定主题的电子邮件进行标记。当脚本运行时:

  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])
}

【问题讨论】:

  • 我认为问题出在你被&lt;br&gt; 标签分割的地方。您可以在拆分之前记录电子邮件的内容吗?来自同一来源的电子邮件可以有不同的换行符,具体取决于电子邮件客户端的行为方式。因此,如果您可以记录有用的电子邮件内容
  • 使用新的 GMailMessage.getPlainBody() 方法然后使用 sting 操作可能会很有用。这将从邮件正文中去除 HTML 并使其更易于操作。

标签: email triggers google-apps-script


【解决方案1】:

@patt0 - 我尝试了 .getPlainBody() 选项,但没有帮助。事实证明,问题不在于脚本如何解析数据,而在于最初的“if”语句。我把前四行改成了这个并修复了它:

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 收件箱中是否有一封包含套用信函的电子邮件,然后从该套用信函中解析数据并将其添加到电子表格中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 2021-12-12
    • 2011-09-06
    • 1970-01-01
    相关资源
    最近更新 更多