简单的xmlrpc python脚本中的属性错误

时间:2012-09-12 08:08:46

标签: python xml-rpc smtplib

我有一个简单的xmlrpc服务器设置来启动SMTP服务器,代码在这里:

from SimpleXMLRPCServer import SimpleXMLRPCServer
import smtplib

# Create server
server = SimpleXMLRPCServer(("localhost", 1025), allow_none = True)

# add the introspection functions (system.listMethods, system.methodHelp 
# and system.methodSignature)
server.register_introspection_functions()

def send(host, port):
    server = smtplib.SMTP((host, port), None)

# register this method
server.register_function(send, 'send')

# start server
server.serve_forever()

我启动此服务器,在客户端执行以下步骤:

import xmlrpclib
s = xmlrpclib.ServerProxy('http://localhost:1025')
s.send('0.0.0.0',25)

导致以下错误我不明白:

xmlrpclib.Fault: <Fault 1: "<type 'exceptions.AttributeError'>:'tuple' object has no attribute 'find'">

这里有什么元组对象?为什么代码需要查找属性?任何帮助我使这段代码工作的想法,即我能够在xmlrpc服务器中创建一个xmlrpc请求来初始化(以及稍后使用)一个smtp服务器?

由于   亚历

1 个答案:

答案 0 :(得分:1)

smtplib documentation中声明SMTP类的签名接受两个不同的主机和端口参数。

因此,您应该以这种方式定义发送功能:

def send(host, port):
    server = smtplib.SMTP(host, port)

SMTP构造函数可能需要一个字符串作为主机,并使用find方法。 但是,如果您传入元组(host, port),则会生成AttributeError