【发布时间】:2026-01-27 21:10:01
【问题描述】:
我正在使用 node-xmpp-component 来构建一个 external-xmpp-component,我需要提取任何给定 jid 的所有存档消息。
我能够连接和发送消息,但我不知道如何构建 sanza 以请求存档消息。
注意:这不是关于如何获取归档消息的问题,而是关于如何从外部 XMPP 组件获取它们的问题。
【问题讨论】:
我正在使用 node-xmpp-component 来构建一个 external-xmpp-component,我需要提取任何给定 jid 的所有存档消息。
我能够连接和发送消息,但我不知道如何构建 sanza 以请求存档消息。
注意:这不是关于如何获取归档消息的问题,而是关于如何从外部 XMPP 组件获取它们的问题。
【问题讨论】:
要获取邮件存档,您需要从请求存档的用户帐户中查询它。正如您在 XEP 示例 (Querying an archive) 中看到的,没有地方可以定义您所扮演的用户。应该是用户发送 XMPP 数据包:
<iq type='set' id='juliet1'>
<query xmlns='urn:xmpp:mam:0' queryid='f27' />
</iq>
然而,node-xmpp-component 实现了XEP-0114: Jabber Component Protocol。组件协议基本上说,您只能充当组件或来自该组件域的任何用户名:
一旦通过身份验证,组件就可以通过服务器发送节 并从服务器接收节。发送到服务器的所有节 必须拥有一个 'from' 属性和一个 'to' 属性,如 'jabber:server' 命名空间。 JID 的域标识符部分 'from' 属性中包含的必须与 零件。但是,这是对“发件人”地址的唯一限制, 并且组件可以从其主机名的任何用户发送节。
这意味着出于隐私/安全原因,“Jabber 组件”不能代表主服务器用户发送数据包。
因此,您不能伪造从组件中以用户身份查询 MAM 存档所需的 IQ 数据包,原因是隐私。
您需要为要实现的功能找到另一种设计。
【讨论】: