0

我有一个简单的 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 服务器?

谢谢亚历克斯

4

1 回答 1

1

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

因此,您应该以这种方式定义您的发送函数:

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

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

于 2012-09-12T08:13:05.487 回答