0

SMTPサーバーを起動するための簡単なxmlrpcサーバーのセットアップがあります。コードは次のとおりです。

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サーバー内でsmtpサーバーを初期化(および後で使用)するためにxmlrpcリクエストを作成できますか?

ありがとうアレックス

4

1 に答える 1

1

smtplibのドキュメントには、クラスのシグネチャがSMTPホストとポートの2つの異なるパラメータを受け入れると記載されています。

したがって、送信関数は次のように定義する必要があります。

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

おそらくSMTPコンストラクターはホストとして文字列を期待し、findメソッドを使用します。しかし、タプルを渡すと、(host, port)それAttributeErrorが生成されます。

于 2012-09-12T08:13:05.487 に答える