要将您的 CustomSMTPServer 转换为使用 aiosmtpd 的东西,您必须使用与handle_DATA()您的方法执行相同操作的方法定义一个处理程序类process_message():
import aiosmtpd.controller
class CustomSMTPHandler:
async def handle_DATA(self, server, session, envelope):
myqueue.queue.put(envelope.content)
return '250 OK'
handler = CustomSMTPHandler()
self.server = aiosmtpd.controller.Controller(handler)
self.server.start()
input("Server started. Press Return to quit.")
self.server.stop()
请注意,handle_DATA()返回“250 OK”告诉 SMTP 客户端消息已成功接收和处理。与 smtpd 不同,使用 aiosmtpd 您需要以handle_DATA().
注意handle_DATA()必须是协程函数,即使用async def. 如果您需要与 Python 3.4 兼容,请改用@asyncio.coroutine装饰器handle_DATA()。
另请注意,self.server.start()在单独的线程中运行 SMTP 服务器,asyncore.loop()这与接管当前线程不同。
如果您需要访问peer、mailfrom或rcpttos,它们分别以session.peer、envelope.mail_from和的形式提供envelope.rcpt_tos。