python-xmpp 并循环接收要接收的收件人列表和 IM 消息

Posted

技术标签:

【中文标题】python-xmpp 并循环接收要接收的收件人列表和 IM 消息【英文标题】:python-xmpp and looping through list of recipients to receive and IM message 【发布时间】:2010-05-12 02:45:07 【问题描述】:

我无法找出问题所在,想了解我的 Python 代码是否不正确,或者这是 Python XMPP 库的问题或设计限制。顺便说一句,我是 Python 新手。

这是下面有问题的代码的 sn-ps。我想做的是读取 IM 收件人的文本文件,每行一个收件人,采用 XMPP/Jabber ID 格式。这被读入 Python 列表变量。

然后,我实例化一个 XMPP 客户端会话并遍历收件人列表并向每个收件人发送一条消息。然后睡一会,重复测试。这是为了对收件人的 IM 客户端和 IM 服务器进行负载测试。有代码可以交替处理仅从命令行输入而不是从文件中获取一个收件人的情况。

最终发生的事情是 Python 确实遍历/循环列表,但只有列表中的最后一个收件人收到消息。切换收件人顺序以进行验证。有点像 Python XMPP 库没有正确发送它,或者我错过了库调用的步骤,因为运行时的调试打印语句表明循环正常工作。


recipient = ""
delay = 60
useFile = False
recList = []
...
elif (sys.argv[i] == '-t'):
  recipient = sys.argv[i+1]
  useFile = False
elif (sys.argv[i] == '-tf'):
  fil = open(sys.argv[i+1], 'r')
  recList = fil.readlines()
  fil.close()
  useFile = True
...
# disable debug msgs
cnx = xmpp.Client(svr,debug=[])
cnx.connect(server=(svr,5223))
cnx.auth(user,pwd,'imbot')
cnx.sendInitPresence()

while (True):
  if useFile:
    for listUser in recList:
      cnx.send(xmpp.Message(listUser,msg+str(msgCounter)))
      print "sending to "+listUser+" msg = "+msg+str(msgCounter)
  else:
    cnx.send(xmpp.Message(recipient,msg+str(msgCounter)))
  msgCounter += 1
  time.sleep(delay)

【问题讨论】:

【参考方案1】:

没关系,找到问题了。对于 file.readlines() 返回的列表中的元素,必须注意行尾的换行符,所以我必须在发送时用元素上的 .rstrip('\n') 将其删除出消息。

【讨论】:

以上是关于python-xmpp 并循环接收要接收的收件人列表和 IM 消息的主要内容,如果未能解决你的问题,请参考以下文章

Python-XMPP - 迭代 IQ 节项目

Dmarc指定外域邮箱接收报告

odoo系统中如何配置收发邮件服务器

用于爆炸电子邮件接收器的 PHP 正则表达式

python电子邮件系列(三)之POP接收邮件

OUTLOOK EXPRESS不能接收邮件的问题