python - Py3.4 IMAPLib Login... 'str' does not support the buffer interface -
using imaplib, i'm trying connect mailserver. when include password normal string: 'password' connects fine. i'm trying obfuscate password, had run through b64encode, , used b64decode in login:
#works: mail.login('myloginname', 'mypassword') #doesn't work: mail.login('myloginname', base64.b64decode('ja3rhsnakhdgkhervc')) # or mail.login('myloginname', bytes(base64.b64decode('ja3rhsnakhdgkhervc'))) ...
traceback (most recent call last): file "./testing.py", line 15, in <module> mail.login('myloginname', bytes(base64.b64decode('ja3rhsnakhdgkhervc'))) file "/usr/local/lib/python3.4/imaplib.py", line 536, in login typ, dat = self._simple_command('login', user, self._quote(password)) file "/usr/local/lib/python3.4/imaplib.py", line 1125, in _quote arg = arg.replace('\\', '\\\\') typeerror: 'str' not support buffer interface suggestions?
you passing in bytes object password, not str value, because that's base64.b64decode() returns.
you'd have decode value string:
base64.b64decode('ja3rhsnakhdgkhervc').decode('ascii') the exception caused bytes.replace() method, expects bytes arguments. since '\\' , '\\\\' str objects, traceback @ args.replace('\\', '\\\\') because args bytes object:
>>> b'foo'.replace('\\', '\\\\') traceback (most recent call last): file "<stdin>", line 1, in <module> typeerror: bytes-like object required, not 'str' >>> 'foo'.replace('\\', '\\\\') 'foo'
Comments
Post a Comment