2012-10-29 8 views
12

私は自分自身に簡単なsendmailの機能を書いていますし、私はこのエラーを取得しておいてください。新しい、GmailのSMTPエラー

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') 

答えて

20

Pythonでは、あなたは完全にそのモジュールでそれを付けることによって名前を修飾する必要があります:あなたは、特に非修飾名をインポートする(私はやってお勧めしませんしない限り、

except smtplib.SMTPException: 

これが真実でありますこれはあなたのプログラムのためだけに可能なことを示しています):

from smtplib import SMTPException 
+0

ああ、スペルミスがありました。 – eatonphil

+5

SMTPを使って20年経っても、私はまだそれをやっています。 –

1

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

私は最近、電子メールを送信しやすくするためにyagmailを作成しました。例えば

Toが定義されていない場合には、例えば、ここではいくつかのショートニングを使用しています

import yagmail 
yag = yagmail.SMTP('[email protected]', 'password') 
yag.send(contents = "Hello!") 

、それがサーバーに登録同じメールにメールを送信します。また、ポートとホストがデフォルトであり、非常に簡潔になります。実際に

、それはあなたがすぐに接続を閉じるようにしたいと思われることから、あなたも、このワンライナーを使用することができます。

yagmail.SMTP('[email protected]', 'password').send(contents = "Hello!") 

セキュリティを強化するために、あなたは(ドキュメントを参照してください)、このようなkeyringにパスワードを保つことができますあなたのスクリプトにあなたの個人的なパスワードを保持する必要はありません、非常に重要!さらに貴重なスクリーン・エステートを節約できます。パッケージにすべてを-で行く

@gmail.comがデフォルトです)、次のように逃げることができます。

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

幸運を。

+1

コメントを残したままでDownvote? – PascalVKooten

+2

私はyagmailを使用し、uにupvoteを与えました! – sureshvv

+0

@ sureshvvありがとう:)それはあなたによく役立つことを願っています。 – PascalVKooten

関連する問題