1

Pythonでメールを受け取りたいです。次に、メールサーバーを終了し、スクリプトでメールの内容を使用したいと考えています。

例えば:

if "any_string" in data:
    print "success"
    << exit mailserver >>
    << any other commands >>

コード:

import smtpd
import asyncore

class FakeSMTPServer(smtpd.SMTPServer):
    __version__ = 'TEST EMAIL SERVER'

    def process_message(self, peer, mailfrom, rcpttos, data):
        print 'Receiving message from:', peer
        print 'Message addressed from:', mailfrom
        print 'Message addressed to  :', rcpttos
        print 'Message length        :', len(data)
        print 'Message               :', data
        return

if __name__ == "__main__":
    smtp_server = FakeSMTPServer(('0.0.0.0', 25), None)
    try:
        asyncore.loop()
    except KeyboardInterrupt:
        smtp_server.close()
4

2 に答える 2

1

メソッドasyncoreを呼び出すことで、ループを終了できasyncore.close_allます。process_message

def process_message(self, peer, mailfrom, rcpttos, data):
    # ...
    print 'Message               :', data
    asyncore.close_all()
    return

編集

ループを終了した後にメッセージのテキストにアクセスしたい場合は、asyncoreそれを smtp サーバーの属性として保存するだけです

#...
class FakeSMTPServer(smtpd.SMTPServer):
    def process_message(self, peer, mailfrom, rcpttos, data):
        # ...
        self.data = data
        # ...

if __name__ == "__main__":
    smtp_server = FakeSMTPServer(('0.0.0.0', 25), None)
    try:
        asyncore.loop()
    except KeyboardInterrupt:
        smtp_server.close()
    # smtp_server.data contains text of message
于 2014-06-18T13:28:37.447 に答える