4

我正在将 xmpp 与 python 一起使用,我想创建一个简单的客户端来与 gmail id 进行通信。

#!/usr/bin/python
import xmpp

login = 'Your.Login' # @gmail.com 
pwd   = 'YourPassword'

cnx = xmpp.Client('gmail.com')
cnx.connect( server=('talk.google.com',5223) )
cnx.auth(login,pwd, 'botty')

cnx.send( xmpp.Message( "YourFriend@gmail.com" ,"Hello World form Python" ) )

当我运行最后一行时,我得到一个异常

IOError:与服务器断开连接。

此外,当我运行其他语句时,我会在控制台中收到调试消息。

可能是什么问题,我该如何解决?

4

4 回答 4

6

是它在我的 PyTalk 客户端上的表现。

不要忘记用户 ID 中的@gmail.com。

我认为您应该尝试在 5222 端口上连接talk.google.com。

还尝试为身份验证指定资源。

import xmpp
import sys

userID   = 'Your.Login@gmail.com' 
password = 'YourPassword'
ressource = 'Script'

jid  = xmpp.protocol.JID(userID)
jabber     = xmpp.Client(jid.getDomain(), debug=[])

connection = jabber.connect(('talk.google.com',5222))
if not connection:
    sys.stderr.write('Could not connect\n')
else:
    sys.stderr.write('Connected with %s\n' % connection)

auth = jabber.auth(jid.getNode(), password, ressource)
if not auth:
    sys.stderr.write("Could not authenticate\n")
else:
    sys.stderr.write('Authenticate using %s\n' % auth)

jabber.sendInitPresence(requestRoster=1)
jabber.send(xmpp.Message( "YourFriend@gmail.com" ,"Hello World form Python" ))

顺便说一句,它看起来离菲利普答案很近

于 2009-10-09T04:31:51.923 回答
1

试试这个代码片段。为了简单起见,我没有处理错误条件。

import xmpp

login = 'Your.Login' # @gmail.com 
pwd   = 'YourPassword'

jid = xmpp.protocol.JID(login)
cl  = xmpp.Client(jid.getDomain(), debug=[])
if cl.connect(('talk.google.com',5223)):
    print "Connected"
else:
    print "Connectioned failed"

if cl.auth(jid.getNode(), pwd):
    cl.sendInitPresence()
    cl.send(xmpp.Message( "YourFriend@gmail.com" ,"Hello World form Python" ))
else:
    print "Authentication failed"


要关闭调试消息,请将debug=[]传递给 Client 类的构造函数的第二个参数:

cl  = xmpp.Client(jid.getDomain(), debug=[])
于 2009-08-23T12:14:06.510 回答
1

我想你必须写这个。我在 python 2.7 中使用 xmpppy 0.5.0rc1 对其进行了测试,并且工作得非常好:P :):

import xmpp

login = 'your mail@gmail.com' # @gmail.com 
pwd   = 'your pass'
text='Hello worlD!'
tojid='your friend @gmail.com'



jid = xmpp.protocol.JID(login)
cl  = xmpp.Client(jid.getDomain(), debug=[])
if cl.connect(('talk.google.com',5223)):
    print "Connected"

else:
    print "Connectioned failed"

if cl.auth(jid.getNode(), pwd):
    cl.sendInitPresence()
    cl.send(xmpp.protocol.Message(tojid,text))
else:
    print "Authentication failed"
于 2010-10-25T07:49:01.573 回答
0

我认为您需要sendInitPresence在发送第一条消息之前致电:

...
cnx.auth(login,pwd, 'botty')
cnx.sendInitPresence()
cnx.send( xmpp.Message( "YourFriend@gmail.com" ,"Hello World form Python" ) )
于 2009-08-19T17:13:15.223 回答