【发布时间】:2020-02-16 04:22:40
【问题描述】:
我有两个使用 Node-RED 中的 node-red-node-email 节点的流。
第一个使用预定义的值来获取所有电子邮件(Criteria:All)。它可以正常工作并获取我收件箱中的两封电子邮件:
第二个应该模拟相同,但通过指定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