首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >aiosmtpd.handlers.Proxy.handle_DATA中的字节/字符串不匹配

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

Stack Overflow用户
提问于 2017-04-21 00:17:03
回答 1查看 168关注 0票数 0

我是第一次使用asyncio / aiosmtpd。我是不是用错了,还是这是个bug?

运行下面的代码,我得到一个错误,表明我们把字节和字符串搞混了。我在带有aiosmtpd 1.0a5的Linux上用Python 3.6.1运行它。

代码语言:javascript
复制
#!/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()

我得到了这个回溯。

代码语言:javascript
复制
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的代理类中进行更改:

代码语言:javascript
复制
@asyncio.coroutine
def handle_DATA(self, server, session, envelope):
    lines = envelope.content.splitlines(keepends=True)

到这个

代码语言:javascript
复制
@asyncio.coroutine
def handle_DATA(self, server, session, envelope):
    lines = str(envelope.content).splitlines(keepends=True)

它似乎起作用了,但我对信封、邮件协议、编码等了解不够多,无法知道这是否是一个适当的修复,或者我是否正确地使用了这个库。在我看来,这个处理器永远不会工作,我还以为有一些测试...

EN

回答 1

Stack Overflow用户

发布于 2017-05-10 05:21:45

实际上,这是aiosmtpd1.0a5中的一个bug (也在this question中报道过)。它是reported,随后被修复(v1v2)。

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

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

https://stackoverflow.com/questions/43524824

复制
相关文章

相似问题

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