2016-09-07 2 views
0

imaplibを使用してメールサーバーに接続しようとしています。 パスワードを通常の文字列として含めると、「パスワード」 正常に接続されます。しかし、私は少し私のパスワードを難読化しようとしているので、私は以前b64encodeを通してそれを実行し、ログインにb64decodeを使用していた:Py3.4 IMAPLibログイン... 'str'はバッファインターフェイスをサポートしていません

#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

パスワードbytesのオブジェクトは、strの値ではなく、base64.b64decode()が返すので、パスワードとして渡しています。

あなたは、文字列に値デコードする必要があると思います:例外がbytesの引数を期待しbytes.replace()方法、によって引き起こされる

base64.b64decode('Ja3rHsnakhdgkhervc').decode('ascii') 

>>> 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' 
+0

ハ:'\\''\\\\'strオブジェクトなのでargsbytesオブジェクトなので、あなただけのargs.replace('\\', '\\\\')でトレースバックを入手します!私はPy3が文字列の代わりにバイトを求めていることについて多くの記事を読んでいましたが、私はそれを別の方向にキャストすることについても考えませんでした。完璧に働いた。ありがとうございました。 – wolf2600

+0

Pythonを初めて使用したため、エラーメッセージが正しく理解されませんでした。 strがサポートしていないと言ったとき、文字列を探しているのではなく、文字列を渡しているのを見ていたと仮定します。 – wolf2600

関連する問題