ゴミ箱の中のメモ帳

まだ見ぬ息子たちへ綴る手記

smtplib.SMTPServerDisconnected: Connection unexpectedly closed

前の記事に「Pythonでメールを送信する(SMTP)」を書き、そのなかで「送信は簡単」と言うような内容を書いた。だが実際は1時間以上タイトルのエラーに困った。

結果から言うと、SMTPサーバにログイン処理が漏れていたため詰まったものになる。

初めてのPython 第3版

初めてのPython 第3版


エラーのより正確なものは以下になる。

Traceback (most recent call last):
File "./mail.py", line 68, in
send_mail( cfg, "from@example.jp", "to@example.jp", "こんにちわ", "本文だよ")
File "./mail.py", line 66, in send_mail
send( from_addr, to_addr, message)
File "./mail.py", line 62, in send
smtp.sendmail( from_addr, to_addr, message.as_string())
File "/usr/lib/python2.7/smtplib.py", line 734, in sendmail
self.rset()
File "/usr/lib/python2.7/smtplib.py", line 462, in rset
return self.docmd("rset")
File "/usr/lib/python2.7/smtplib.py", line 387, in docmd
return self.getreply()
File "/usr/lib/python2.7/smtplib.py", line 363, in getreply
raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed


なぜか接続先SMTPドメイン宛には送信できるが、接続先SMTPドメインからの送信が出来なかった。非常に悩んだ。1時間以上悩んだ。

結果から言うと単純に認証処理が抜けていただけになる。なぜ忘れていたかは不明だが、sendmail()を呼び出す際のエラーとなっていたために「認証漏れ」ということに気が付かなかった。気づいた時は落胆した。自分のアホさに。

ということで下記のコードで認証を通せばいいだけになる。

smtp.login( cfg["user_name"], cfg["password"])


このエラーについて検索してもほとんど見つからず、検索した結果からは解決が出来なかったため記事にしておく。私のようなアホがすぐに解決できるように。

初めてのPython 第3版

初めてのPython 第3版

パーフェクトPython (PERFECT SERIES 5)

パーフェクトPython (PERFECT SERIES 5)

エキスパートPythonプログラミング

エキスパートPythonプログラミング

Pythonプロフェッショナルプログラミング

Pythonプロフェッショナルプログラミング

Pythonチュートリアル 第2版

Pythonチュートリアル 第2版