使用imaplib,我正在尝试连接到邮件服务器。 当我将密码包含为普通字符串时:'password' 它很好。但我试图略微模糊我的密码,所以我以前通过b64encode运行它,然后在登录中使用b64decode:
#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' does not support the buffer interface
建议?
答案 0 :(得分:0)
您传递的是bytes
对象的密码,而不是str
值,因为这是base64.b64decode()
返回的内容。
您必须解码该值为字符串:
base64.b64decode('Ja3rHsnakhdgkhervc').decode('ascii')
异常是由bytes.replace()
方法引起的,该方法需要bytes
个参数。由于'\\'
和'\\\\'
是str
个对象,因此只有args.replace('\\', '\\\\')
是args
对象,才会在bytes
处获得追溯:
>>> b'foo'.replace('\\', '\\\\')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: a bytes-like object is required, not 'str'
>>> 'foo'.replace('\\', '\\\\')
'foo'