質問

非常に単純なコードを使って以前のバージョンのPythonではなく問題(バージョン2.5前).今3.0、以下のコードをエラーログインライン引数に1を必ず文字列またはバッファはstr".

import smtplib

   smtpserver = 'mail.somedomain.com'
   AUTHREQUIRED = 1                     # if you need to use SMTP AUTH set to 1
   smtpuser = 'admin@somedomain.com'    # for SMTP AUTH, set SMTP username here
   smtppass = 'somepassword'            # for SMTP AUTH, set SMTP password here
   msg = "Some message to send"

   RECIPIENTS = ['admin@somedomain.com']
   SENDER = 'someone@someotherdomain.net'

   session = smtplib.SMTP(smtpserver)

   if AUTHREQUIRED:
      session.login(smtpuser, smtppass)

   smtpresult = session.sendmail(SENDER, RECIPIENTS, msg)

Google示の問題があるとエラーがあげられるが、だいたい何をしています。提案を含むを定義するユーザ名としてb"のユーザー名"がることはなさそうです。

役に立ちましたか?

解決

更新:でっからのバグトラッカーが推奨される固定のもの:

編集smtplib.py に置き換えて、既存の encode_plain() 定義この:

def encode_plain(user, password):
    s = "\0%s\0%s" % (user, password)
    return encode_base64(s.encode('ascii'), eol='')

試ここでも設置でない不具合を修正しました。

他のヒント

Traceback (most recent call last):
  File "smtptest.py", line 18, in <module>
    session.login(smtpuser, smtppass)
  File "c:\Python30\lib\smtplib.py", line 580, in login
    AUTH_PLAIN + " " + encode_plain(user, password))
  File "c:\Python30\lib\smtplib.py", line 545, in encode_plain
    return encode_base64("\0%s\0%s" % (user, password))
  File "c:\Python30\lib\email\base64mime.py", line 96, in body_encode
    enc = b2a_base64(s[i:i + max_unencoded]).decode("ascii")
TypeError: b2a_base64() argument 1 must be bytes or buffer, not str

あなたのコードが正しいです。これは、をしたりするsmtplib または base64mime.py の中のバグです。 あなたはここでの問題を追跡することができます。 http://bugs.python.org/issue5259する

うまくいけば、開発者はすぐにパッチを投稿します。

実行時にジェイの答えに変動はなく、編集smtplib.pyあなたはできる「モンキーパッチ」、それとして。

あなたのコードでは、このどこかを入れます:


def encode_plain(user, password):
    s = "\0%s\0%s" % (user, password)
    return encode_base64(s.encode('ascii'), eol='')

import smtplib
encode_plain.func_globals = vars(smtplib)
smtplib.encode_plain = encode_plain
あなたは自分のPythonライブラリに変更を加えることなく、他のシステムにあなたのコードをデプロイしたい場合は、

これは醜いが、便利なの一種である。

scroll top