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