4

メールを送信するPythonプログラムを書いています。しかし、句を実行するたびに:

smtpserver = smtplib.SMTP("smtp.gmail.com",587)

ここでブロックされ、プロンプトやエラーなしで常に実行状態のままになります。どうしてか分かりません。誰でも私を助けることができますか?

コードは次のとおりです。 import smtplib

to = 'toemail@gmail.com'
gmail_user = 'user@gmail.com'
gmail_pwd = 'password'
smtpserver = smtplib.SMTP("smtp.gmail.com",587)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo
smtpserver.login(gmail_user, gmail_pwd)
header = 'To:' + to + '\n' + 'From: ' + gmail_user + '\n' + 'Subject:testing \n'
print header
msg = header + '\n this is test msg from mkyong.com \n\n'
smtpserver.sendmail(gmail_user, to, msg)
print 'done!'
smtpserver.close()
4

4 に答える 4

3

接続に問題がある可能性があり(プロキシまたはファイアウォールによってブロックされている可能性がありますか?)、タイムアウトがかなり大きくなり、それ以上進行しないことがわかります。

のドキュメントはsmtplib.SMTP言う:

class smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])

(...)指定されたものが正しく応答しないSMTPConnectError場合はAnが発生します。hostオプションのtimeoutパラメーターは、接続試行などのブロック操作のタイムアウトを秒単位で指定します(指定されていない場合は、グローバルなデフォルトのタイムアウト設定が使用されます)。

自分でタイムアウトを指定してみてください。

smtpserver = smtplib.SMTP("smtp.gmail.com", 587, timeout=30)
于 2012-08-16T06:48:24.107 に答える
3

たぶん私は4年遅れていますが、これは私にとってうまくいったことであり、他の誰かを助けるかもしれません!

server = smtplib.SMTP("smtp.gmail.com", 587, None, 30)
于 2016-09-15T17:11:22.433 に答える
1

参考までに、cpython smtplib はブロックしています。つまり、接続中に GIL (つまり Python) をブロックします。GIL は I/O で解放されるという主張にもかかわらず、GIL は一部の I/O でのみ解放され、SMTP 接続はそうではありません。非同期にするには、状況に応じて、メール送信を別のプロセスまたはスレッドに渡す必要があります。

于 2014-02-18T07:18:31.033 に答える