簡単なsendmail関数を自分自身に書き込んでいますが、次のエラーが発生し続けます。
NameError:名前 'SMTPException'が定義されていません
私のコードの何が問題になっていますか?助言がありますか?
import smtplib
sender = "[email protected]"
receiver = ["[email protected]"]
message = "Hello!"
try:
session = smptlib.SMTP('smtp.gmail.com',587)
session.ehlo()
session.starttls()
session.ehlo()
session.login(sender,'password')
session.sendmail(sender,receiver,message)
session.quit()
except SMTPException:
print('Error')
Pythonでは、名前の前にモジュールを付けて、名前を完全修飾する必要があります。
except smtplib.SMTPException:
これは、修飾されていない名前を具体的にインポートしない限り当てはまります(ただし、プログラムでこれを行うことはお勧めしません。可能なことを示すだけです)。
from smtplib import SMTPException
そのスペルミスは私にも何度も起こりました!この「問題」を回避する1つの方法は、 yagmail を使用することです。
冗談はさておき、私は最近、メールの送信を簡単にするためにyagmailを作成しました。
例えば:
import yagmail
yag = yagmail.SMTP('[email protected]', 'password')
yag.send(contents = "Hello!")
ここではいくつかの短縮形を使用しています。たとえば、To
が定義されていない場合、サーバーに登録したのと同じ電子メールにメールを送信します。また、ポートとホストがデフォルトであるため、非常に簡潔になっています。
実際、すぐに接続を閉じたいように思われるので、次のワンライナーを使用することもできます。
yagmail.SMTP('[email protected]', 'password').send(contents = "Hello!")
セキュリティのために、パスワードをkeyring
(ドキュメントを参照)に保持して、スクリプトに個人パスワードを保持する必要がないようにすることができます。これは非常に重要です。それはあなたにもっと貴重なスクリーン不動産を節約するでしょう。
パッケージにオールインする(@gmail.com
がデフォルトです)、次の方法で回避できます。
yagmail.SMTP('user').send('', 'Hello!')
幸運を。