aiosmtpd 本地主机服务器没有响应

问题描述 投票:0回答:1

我正在尝试运行一个 SMTP 服务器,该服务器仅打印来自发件人的传入消息。 这是服务器代码:

import asyncio
from aiosmtpd.controller import Controller
from smtplib import SMTP as Client
import time

class ExampleHandler:
    print('It works!')
    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('Message from %s' % envelope.mail_from)
        print('Message for %s' % envelope.rcpt_tos)
        print('Message data:\n')
        for ln in envelope.content.decode('utf8', errors='replace').splitlines():
            print(f'> {ln}'.strip())
        print()
        print('End of message')
        return '250 Message accepted for delivery'
    controller = Controller(ExampleHandler())
    loop = asyncio.get_event_loop()
    server = loop.create_server(controller, host='::1', port=8025)
    loop.run_until_complete(server)
    loop.run_forever()

这是发送电子邮件的代码:

from smtplib import SMTP as Client


host = "::1"
port = 8025
print(host, port)
client = Client(host, port)
print(client.getreply())

r = client.sendmail('[email protected]', ['[email protected]'], """\
From: Anne Person <[email protected]>
To: Bart Person <[email protected]>
Subject: A test
Message-ID: <ant>

Hi Bart, this is Anne.
""")

我通过两个不同的终端运行这些脚本。在服务器情况下,我首先激活它所在的 venv,然后运行脚本。控制台中显示消息“它有效!”出现,大概意味着服务器已启动。然后我运行一个脚本,在没有服务器终端的情况下向服务器发送消息,并且在服务器终端中出现以下消息:

回溯(最近一次调用最后一次):文件 “C:\ Users \ Lev \ AppData \ Local \ Programs \ Python \ Python311 \ Libsyncio vents.py”, 第 80 行,在 _run 中 self._context.run(self._callback, *self._args) 文件 "C:\Users\Lev\AppData\Local\Programs\Python\Python311\Libsyncio\proactor_events.py", 第 847 行,循环中 协议 = 协议工厂() 类型错误:“控制器”对象不可调用

可能是什么问题?不正确使用 asyncio 可能会出现问题吗?

python email server smtp
1个回答
0
投票

问题已解决——在loop.create_server中应该传递controller.factory而不是控制器参数。

© www.soinside.com 2019 - 2024. All rights reserved.