2017-04-20 6 views
0

저는 asyncio/aiosmtpd에서 새롭게 변경되었습니다. 이 잘못을 사용하고 있습니까, 아니면이 버그입니까?aiosmtpd.handlers.Proxy.handle_DATA의 바이트/문자열 불일치

아래 코드를 실행하면 바이트가 문자열과 혼동된다는 오류가 표시됩니다. 필자는 파이어 폭스 3.6.1을 Linux에서 aiosmtpd 1.0a5와 함께 실행합니다.

#!/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) 

에,하지만 난 충분히 모른다 봉투, 메일 프로토콜, 인코딩 등이 적절한 수정인지 또는 라이브러리를 올바르게 사용하고 있는지 여부를 알 수 있습니다. 이 핸들러가 작동하지 않는 것처럼 보였고 몇 가지 테스트가 있다고 가정했습니다 ...

답변

0

실제로 이것은 aiosmtpd 1.0a5 (this question으로보고 됨)의 버그입니다. reported이었으며 이후 고정되었습니다 (v1, v2).

aiosmtpd 1.0b1이 최근에이 수정 사항과 함께 출시되었습니다. 업그레이드를 시도하십시오 - 두 버전 모두에서 스크립트를 시험해 보았습니다. 1.0a5에서는 실패했고 1.0b1에서는 성공했습니다.