【发布时间】:2017-08-01 20:51:16
【问题描述】:
以下服务器几乎直接取自 aiosmtpd 文档:
import asyncio
import ssl
from aiosmtpd.controller import Controller
class ExampleHandler:
async def handle_RCPT(self, server, session, envelope, address, rcpt_options):
if not address.endswith('@example.com'):
return '550 not relaying to that domain'
envelope.rcpt_tos.append(address)
return '250 OK'
async def handle_DATA(self, server, session, envelope):
print(f'Message from {envelope.mail_from}')
print(f'Message for {envelope.rcpt_tos}')
print(f'Message data:\n{envelope.content.decode("utf8", errors="replace")}')
print('End of message')
return '250 Message accepted for delivery'
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
controller = Controller(ExampleHandler(), port=8026, ssl_context=context)
controller.start()
input('Press enter to stop')
controller.stop()
但是,当我启动此服务器并尝试使用 swaks 向其发送电子邮件时:
echo 'Testing' | swaks --to wayne@example.com --from "something@example.org" --server localhost --port 8026 -tls
30 秒后超时。如果我从服务器中删除ssl_context=context 并从客户端中删除-tls,那么它可以正常发送邮件。
此外,当我尝试通过 telnet 连接并发送 EHLO whatever 时,服务器实际上会关闭连接。
实现支持tls的aiosmtpd服务器的正确方法是什么?
【问题讨论】:
标签: python python-3.x aiosmtpd