2017-04-20 31 views
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) 

它似乎工作,但我不知道夠不夠關於信封,郵件協議,編碼等知道這是否是一個適當的修補程序,或者即使我正確使用該庫。它看起來像我這個處理程序可能永遠不會工作,並且我假設有一些測試...

回答

0

確實,這是aiosmtpd 1.0a5中的錯誤(也在this question中報告)。它是reported,隨後是固定的(v1,v2)。

aiosmtpd 1.0b1最近與此修復程序一起發佈。請嘗試升級 - 我在兩個版本上都嘗試了腳本,在1.0a5上失敗,在1.0b1上失敗。