質問
非常に単純なコードを使って以前のバージョンの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ライブラリに変更を加えることなく、他のシステムにあなたのコードをデプロイしたい場合は、これは醜いが、便利なの一種である。
この問題はPython3.1で解決されています。 http://www.python.org/download/releases/3.1/ <でアップデートを入手/>
所属していません StackOverflow