【问题标题】:What to put in msg.criteria for fetching emails in Node-RED email node?在 msg.criteria 中放入什么来获取 Node-RED 电子邮件节点中的电子邮件?
【发布时间】:2020-02-16 04:22:40
【问题描述】:

我有两个使用 Node-RED 中的 node-red-node-email 节点的流。

第一个使用预定义的值来获取所有电子邮件(CriteriaAll)。它可以正常工作并获取我收件箱中的两封电子邮件:

第二个应该模拟相同,但通过指定msg.criteria:

我创建了一个带有 change 节点设置值的流。

电子邮件模块的信息页面引用doc page for another module,并没有给出明确的示例,但我认为我应该添加一个字符串值[ ALL ]。这是change 模块的相关部分:

"rules": [
    {
        "t": "set",
        "p": "criteria",
        "pt": "msg",
        "to": "[ 'ALL' ]",
        "tot": "str"
    }

结果电子邮件节点更改为connecting,然后更改为fetching,并保持此状态。 Node-RED Web 服务器有一段时间没有响应。

我还尝试通过以下方式将 msg.criteria 指定为 JSON 对象(结果我在调试中得到 "Invalid 'to' JSON property"):

"rules": [
    {
        "t": "set",
        "p": "criteria",
        "pt": "msg",
        "to": "[ 'ALL' ]",
        "tot": "json"
    }
],

或以下方式(结果我根本没有响应;电子邮件节点甚至没有进入connecting状态):

"rules": [
    {
        "t": "set",
        "p": "criteria",
        "pt": "msg",
        "to": "{ [ 'ALL' ] }",
        "tot": "json"
    }
],

msg.criteria 应该是什么类型,它应该包含什么数据来获取所有电子邮件(以及其他标准)?

【问题讨论】:

  • 电子邮件节点期望 msg.criteria 是一个字符串而不是 JSON。尝试使用 ` [ 'UNSEEN' ]` 而不是 [ 'ALL' ] 那么它应该只返回新邮件,而不是整个收件箱(可能很大)。
  • 感谢您的评论。所以msg.criteria 在我的第一个示例中是一个不起作用的字符串。我在这里使用[ALL] 来避免cmets 关于[UNSEEN] 只获取未读消息。正如您在第一个屏幕截图中看到的那样,我的收件箱中有两封电子邮件,所以这不是问题。它们是在 Criteria 字段设置为 All 的情况下获取的,但不是在 Criteria 设置为 的情况下获取的——从 msg.criteria 设置 -msg.criteria 设置为 ['ALL']
  • 好的,我又回来看了一下源码,前面的评论是错误的。 msg.criteria 应该是一个 JSON 数组(内部版本从字符串转换为数组的位非常微妙)。您看到的问题也与更改节点中的引用类型有关。

标签: node-red


【解决方案1】:

正如我在第二条评论中提到的,这很可能与您如何使用 JSON 数组设置更改节点有关。

以下更改节点配置按预期工作。

请注意,ALL 用双引号括起来,而不是单引号。这一点很重要,因为在设置单引号时 Change 节点会引发错误,并且实际上并未将字段添加到 msg 对象。

【讨论】:

  • 哦,这太疯狂了。所有引用的文档都在单引号中显示[ 'ALL' ] 等,但出于不同的目的。谢谢。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 2016-03-22
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多