首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本的aiosmtpd SMTP服务器示例

基本的aiosmtpd SMTP服务器示例
EN

Stack Overflow用户
提问于 2017-05-11 00:33:00
回答 1查看 3.8K关注 0票数 1

如何将以下使用smtpd的基本SMTP服务器转换为使用aiosmtpd的服务器?

代码语言:javascript
复制
import smtpd

class CustomSMTPServer(smtpd.SMTPServer):

    def process_message(self, peer, mailfrom, rcpttos, data):
        myqueue.queue.put(data)

self.server = CustomSMTPServer(('127.0.0.1', 10025), None)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-11 00:59:46

要将CustomSMTPServer转换为使用aiosmtpd的东西,您必须使用与process_message()方法相同的handle_DATA()方法定义处理程序类:

代码语言:javascript
复制
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()返回“250OK”,它告诉SMTP客户端消息已被成功接收和处理。与smtpd不同,使用aiosmtpd时,需要在handle_DATA()中返回SMTP响应代码。

注意,handle_DATA()必须是一个coroutine函数,也就是说,使用async def定义。如果您需要与Python3.4兼容,请在@asyncio.coroutine上使用handle_DATA()装饰器。

还请注意,self.server.start()在单独的线程中运行SMTP服务器,与接管当前线程的asyncore.loop()不同。

如果您需要访问peermailfromrcpttos,则它们可以分别作为session.peerenvelope.mail_fromenvelope.rcpt_tos使用。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43904664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档