0
我是新的asyncio/aiosmtpd。我使用這個錯誤,還是這是一個錯誤?aiosmtpd.handlers.Proxy.handle_DATA中的字節/字符串不匹配
運行下面的代碼,我收到一個錯誤,指出我們將字節與字符串混淆。我使用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改變這個代理類:
@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)
它似乎工作,但我不知道夠不夠關於信封,郵件協議,編碼等知道這是否是一個適當的修補程序,或者即使我正確使用該庫。它看起來像我這個處理程序可能永遠不會工作,並且我假設有一些測試...