用Python发送XMPP消息

3 投票
1 回答
4605 浏览
提问于 2025-04-17 17:17

我正在尝试用Python发送XMPP消息,但一直没能成功。看起来在认证这一步就出问题了。我从之前的问题中找了一个例子,并设置了一个Gmail账号来测试。

import xmpp

username = 'randomtest603@gmail.com'
passwd = 'ThePass123'
to='randomtest604@gmail.com'
msg='hello :)'

client = xmpp.Client('gmail.com')
client.connect(server=('talk.google.com',5223))
client.auth(username, passwd, 'botty')
client.sendInitPresence()
message = xmpp.Message(to, msg)
message.setAttr('type', 'chat')
client.send(message)

有很多调试信息,但这部分告诉我失败的原因

DEBUG: socket       sent  <auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="PLAIN">cmFuZG9tdGVzdDYwM0BnbWFpbC5jb21AZ21haWwuY29tAHJhbmRvbXRlc3Q2MDNAZ21haWwuY29tAFRoZVBhc3MxMjM=</auth>
DEBUG: socket       got   <failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
  <invalid-authzid/>
  </failure>
  </stream:stream>
DEBUG: dispatcher   ok    Got urn:ietf:params:xml:ns:xmpp-sasl/failure stanza
DEBUG: dispatcher   ok    Dispatching failure stanza with type-> props->  [u'urn:ietf:params:xml:ns:xmpp-sasl'] id->None
DEBUG: sasl         error Failed SASL authentification: <invalid-authzid />

不过最后我还得到了这个信息

DEBUG: socket       sent  <presence id="2" />
DEBUG: socket       sent  <message to="randomtest604@gmail.com" type="chat" id="3">
  <body>hello :)</body>
  </message>

我试过xmpppy和sleekxmpp,结果都是一样的。这个领域对我来说很新,所以我可能犯了新手错误,有人能给点建议吗?

谢谢

1 个回答

3

你的问题并不是特定于Python或者某个库。当你调用 xmpp.Client('gmail.com') 时,你实际上是在指定用户名的域名部分为“gmail.com”。所以,你应该在使用用户名时去掉这个部分。

把你的第三行改成这样:

username = 'randomtest603'

这样应该就能正常工作了(我在生成了一个应用专用密码后,用我自己的账号试过,只有在去掉用户名中的“@gmail.com”后才成功,否则我也遇到了和你一样的错误)。

撰写回答