2017-06-22 8 views
0

Twistedを使用してPython SMTPサーバーとクライアントを実装しました。両方をローカルでテストすると、つまりlocalhostを使用するとすべてが完璧に動作します。しかし、私はそれを分散環境でチェックしたい。 StdoutSMTPFactoryは私のSMTPサーバを構築する工場の私の実装ですpython&twistedを使用してEC2インスタンスに電子メールを送信する方法

factory = StdoutSMTPFactory("./tmp/mail") 
tcp_server = internet.TCPServer(2500, factory) 
application = service.Application("SMTPServer") 
tcp_server.setServiceParent(application) 

下に示したようしたがって、私は、私がアプリケーションとして私のSMTPサーバを開始されたEC2アマゾンのインスタンスを実行します。 私のSMTPクライアントは、以下のようになります。ec2-X-X-X-X.eu-west-1.compute.amazonaws.comは、当然のことながら、私のEC2インスタンスの有効なホスト名は、ちょうどポストのために隠されている

import sys 
from email.mime.text import MIMEText 
from twisted.internet import reactor 
from twisted.mail.smtp import sendmail 
from twisted.python import log 

log.startLogging(sys.stdout) 

host = "ec2-X-X-X-X.eu-west-1.compute.amazonaws.com" 
sender = "[email protected]" 
recipients = ["[email protected]"] 

msg = MIMEText("""Test message 
from SenderX 
""") 
msg["Subject"] = "Title" 
msg["From"] = '"Secret Sender" <%s>' % (sender,) 
msg["To"] = ", ".join(recipients) 

deferred = sendmail(host, sender, recipients, msg.as_string(), port=2500) 
deferred.addBoth(lambda result: reactor.stop()) 

reactor.run() 

。 私は私のインスタンスに電子メールを送信しようとすると、私は、次を得る:

[-] Log opened. 
[-] Starting factory <twisted.mail.smtp.ESMTPSenderFactory instance at 0x10815d638> 
[Uninitialized] SMTP Client retrying server. Retry: 5 
[Uninitialized] SMTP Client retrying server. Retry: 4 
[Uninitialized] SMTP Client retrying server. Retry: 3 
[Uninitialized] SMTP Client retrying server. Retry: 2 
[Uninitialized] SMTP Client retrying server. Retry: 1 
[-] Stopping factory <twisted.mail.smtp.ESMTPSenderFactory instance at 0x10815d638> 
[-] Main loop terminated. 

エラーがない、どちらのサーバーまたはクライアント側で。ちょうどそれはクライアントがサーバーに接続できないようです。誰かが私が間違っていることを提案することはできますか?あなたはあなたのコードを持っている

答えて

0

deferred.addBoth(lambda result: reactor.stop()) 

これは、同期Pythonコードの繰延同等です:

try: 
    ... 
except: 
    pass 
reactor.stop() 

あなたは、エラーを参照してくださいに渡される引数を指定して何かをしたい場合あなたのDeferredの誤読。

from twisted.logger import Logger 
logger = Logger() 

deferred.addErrback(partial(logger.failure, "sending mail")) 
deferred.addCallback(lambda ignored: reactor.stop()) 

それとも、あなたのためのエラー報告を行いますどのreact

from twisted.internet.task import react 

def main(reactor): 
    ... 
    return sendmail(host, sender, recipients, msg.as_string(), port=2500) 

react(main, []) 

を使用することを検討してください。

関連する問題