aiosmtpd.handlers.Proxy.handle_DATA中的字节/字符串不匹配

时间:2017-04-20 16:17:03

标签: python python-3.x aiosmtpd

我是asyncio / aiosmtpd的新手。我使用这个错误,还是这个错误?

运行下面的代码,我收到一个错误,表明我们将字节与字符串混淆。我使用aiosmtpd 1.0a5在Linux上运行Python 3.6.1。

#!/usr/bin/env python3
import asyncio
from aiosmtpd.controller import Controller
from aiosmtpd.handlers import Proxy
import logging


async def proxy_mail(loop):
    cont = Controller(
        Proxy('localhost', 8025),
        hostname='localhost',
        port=1025)
    cont.start()


def main():
    logging.basicConfig(level=logging.DEBUG)
    loop = asyncio.get_event_loop()
    loop.create_task(proxy_mail(loop=loop))
    loop.run_forever()


if __name__ == '__main__':
    main()

我得到了这个追溯。

Traceback (most recent call last):
  File "/home/magnusl/.pyenv/versions/3.6.1/lib/python3.6/site-packages/aiosmtpd/smtp.py", line 235, in _handle_client
    yield from method(arg)
  File "/home/magnusl/.pyenv/versions/3.6.1/lib/python3.6/site-packages/aiosmtpd/smtp.py", line 585, in smtp_DATA
    status = yield from self._call_handler_hook('DATA')
  File "/home/magnusl/.pyenv/versions/3.6.1/lib/python3.6/site-packages/aiosmtpd/smtp.py", line 187, in _call_handler_hook
    status = yield from hook(self, self.session, self.envelope, *args)
  File "/home/magnusl/.pyenv/versions/3.6.1/lib/python3.6/asyncio/coroutines.py", line 210, in coro
    res = func(*args, **kw)
  File "/home/magnusl/.pyenv/versions/3.6.1/lib/python3.6/site-packages/aiosmtpd/handlers.py", line 101, in handle_DATA
    if NLCRE.match(line):
TypeError: cannot use a string pattern on a bytes-like object

如果我在aiosmtpd / handlers.py中的Proxy类中更改了这个:

@asyncio.coroutine
def handle_DATA(self, server, session, envelope):
    lines = envelope.content.splitlines(keepends=True)

到这个

@asyncio.coroutine
def handle_DATA(self, server, session, envelope):
    lines = str(envelope.content).splitlines(keepends=True)
它似乎工作,但我不知道信封,邮件协议,编码等知道这是否是一个适当的修复,或者即使我正在使用该库。它看起来像这个处理程序永远不会工作,我认为有一些测试......

1 个答案:

答案 0 :(得分:0)

实际上,这是aiosmtpd 1.0a5中的一个错误(也在this question中报告)。它是reported并随后修正(v1v2)。

aiosmtpd 1.0b1最近发布了此修复程序。请尝试升级 - 我在两个版本上都尝试了你的脚本,在1.0a5上失败了,在1.0b1上失败了。