Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Gmail附加Google脚本错误行为_Javascript_Google Apps Script_Gmail_Gmail Addons - Fatal编程技术网

Javascript Gmail附加Google脚本错误行为

Javascript Gmail附加Google脚本错误行为,javascript,google-apps-script,gmail,gmail-addons,Javascript,Google Apps Script,Gmail,Gmail Addons,我正在创建一个Gmail附加组件,将电子邮件的某些信息发送到后端端点,为此,它必须以以下方式选择和格式化电子邮件的电子邮件地址: 如果电子邮件在收件箱中,则地址应为发件人的地址 如果电子邮件已发送,则地址应为收件人的地址 如果GmailMessage.getFrom()或GmailMessage.getTo()的结果是一个电子邮件格式的字符串,则这是地址,不应执行任何格式 如果GmailMessage.getFrom()或GmailMessage.getTo()的结果是格式为的字符串,例如,Jo

我正在创建一个Gmail附加组件,将电子邮件的某些信息发送到后端端点,为此,它必须以以下方式选择和格式化电子邮件的电子邮件地址:

  • 如果电子邮件在收件箱中,则地址应为发件人的地址
  • 如果电子邮件已发送,则地址应为收件人的地址
  • 如果
    GmailMessage.getFrom()
    GmailMessage.getTo()
    的结果是一个电子邮件格式的字符串,则这是地址,不应执行任何格式
  • 如果
    GmailMessage.getFrom()
    GmailMessage.getTo()
    的结果是格式为的字符串,例如,
    John Doe
    ,则地址应为尖括号之间的子字符串
  • 因此,我为此编写了以下代码

    for (var i = 0; i < messages.length; i++) {
    
        var address = '';
        var name = '';
        var from = messages[i].getFrom()
        var to = messages[i].getTo();
        Logger.log(from);
        Logger.log(to);
    
        if (messages[i].isInInbox()) {
          Logger.log('inbox'); // (*)
          if (/<(.*?)>/g.test(from)) {
            Logger.log(/<(.*?)>/g.test(from));
            Logger.log('true');
            address = /<(.*?)>/.exec(from)[1];
          } else {
            Logger.log(/<(.*?)>/g.test(from)); // (**)
            Logger.log('false');
            address = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/g.exec(from)[0];
          }
          name = /^(.*?)@/.exec(address);
        } else {
          Logger.log('sent');
          if (/<(.*?)>/g.test(to)) {
            Logger.log(/<(.*?)>/g.test(to));
            Logger.log('true');
            address = /<(.*?)>/.exec(to)[1];
          } else {
            Logger.log(/<(.*?)>/g.test(to));
            Logger.log('false');
            address = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/g.exec(to)[0];
          }
          name = /^(.*?)@/.exec(address);
        }
      }
    
    for(var i=0;i
    其中messages是GmailMessage对象的数组。 问题是,在其中一条收件箱消息中,对于
    //g
    正则表达式,“from”地址的计算结果为true,但仍然输入了else语句。 更清楚地说,记录器的输出如下:

    [19-10-14 13:52:14:750 PDT] "Foo Bar" <foo@bar.com>
    [19-10-14 13:52:14:750 PDT] john@doe.com <---- selected address
    [19-10-14 13:52:14:751 PDT] sent 
    [19-10-14 13:52:14:751 PDT] false <---- it's a "simple string", not enclosed by <>
    [19-10-14 13:52:14:752 PDT] false
    
    [19-10-14 13:52:14:753 PDT] John Doe <john@doe.com> <---- selected address
    [19-10-14 13:52:14:754 PDT] "Foo Bar" <foo@bar.com>
    [19-10-14 13:52:14:755 PDT] inbox
    [19-10-14 13:52:14:755 PDT] true <---- enclosed by <>
    [19-10-14 13:52:14:755 PDT] true
    
    [19-10-14 13:52:14:757 PDT] "Foo Bar" <foo@bar.com>
    [19-10-14 13:52:14:757 PDT] John Doe <john@doe.com> <---- selected address
    [19-10-14 13:52:14:757 PDT] sent
    [19-10-14 13:52:14:758 PDT] true <---- enclosed by <>
    [19-10-14 13:52:14:758 PDT] true
    
    [19-10-14 13:52:14:760 PDT] John Doe <john@doe.com> <---- selected address
    [19-10-14 13:52:14:760 PDT] "Foo Bar" <foo@bar.com>
    [19-10-14 13:52:14:761 PDT] inbox
    [19-10-14 13:52:14:761 PDT] true <---- enclosed by <>
    [19-10-14 13:52:14:761 PDT] false <---- it's entering to the else statement nonetheless
    
    [19-10-1413:52:14:750 PDT]“Foo-Bar”
    
    [太平洋时报19-10-1413:52:14:750]john@doe.com是全局修饰符导致了问题。带有全局修饰符的正则表达式在调用之间是有状态的,包括对test()的调用。状态的维护非常重要,因此可以迭代调用exec()之类的内容以返回下一个匹配项。因为您对表达式使用了文本,所以解释器只是将其优化为表达式的一个实例。同一实例+有状态+对test()的多次调用,使用相同的arg==您看到的内容

    删除这些表达式中的
    g
    标志,就可以了。在你使用它的方式中甚至不需要它,因为你正在测试任何比赛