17

簡単なsendmail関数を自分自身に書き込んでいますが、次のエラーが発生し続けます。

NameError:名前'SMTPException'が定義されていません

私のコードの何が問題になっていますか?助言がありますか?

import smtplib

sender = "user@gmail.com"
receiver = ["user@gmail.com"]
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')
4

2 に答える 2

32

Pythonでは、名前の前にモジュールを付けて、名前を完全に修飾する必要があります。

except smtplib.SMTPException:

これは、修飾されていない名前を具体的にインポートしない限り当てはまります(ただし、プログラムでこれを行うことはお勧めしません。可能なことを示すだけです)。

from smtplib import SMTPException
于 2012-10-29T04:08:45.150 に答える
1

そのスペルミスは私にも何度も起こりました!この「問題」を回避する1つの方法は、yagmailを使用することです。

冗談はさておき、私は最近、メールの送信を簡単にするためにyagmailを作成しました。

例えば:

import yagmail
yag = yagmail.SMTP('user@gmail.com', 'password')
yag.send(contents = "Hello!")

ここではいくつかの短縮形を使用しています。たとえば、Toが定義されていない場合は、サーバーに登録した同じ電子メールにメールを送信します。また、ポートとホストがデフォルトであるため、非常に簡潔になっています。

実際、接続をすぐに閉じたいように思われるので、次のワンライナーを使用することもできます。

yagmail.SMTP('user@gmail.com', 'password').send(contents = "Hello!")

セキュリティのために、keyring(ドキュメントを参照)にパスワードを保持して、スクリプトに個人のパスワードを保持する必要がないようにすることができます。これは非常に重要です。それはあなたにもっと貴重なスクリーンエステートを節約するでしょう。

パッケージ(@gmail.comデフォルト)をオールインすると、次のように回避できます。

yagmail.SMTP('user').send('', 'Hello!')

幸運を。

于 2015-04-18T18:43:45.817 に答える