2012-10-29 22 views
12

Piszę prosty sendmail funkcję do siebie i wciąż otrzymuję ten błąd:Nowy w Pythonie, błąd GMail SMTP

NameError: nazwa „SMTPException” nie jest zdefiniowane

Co jest nie tak z moim kodu? Jakieś sugestie?

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

Odpowiedz

20

W Pythonie, trzeba będzie w pełni kwalifikuje nazwy poprzedzając ją z modułu:

except smtplib.SMTPException: 

To jest prawda, chyba że wyraźnie importować bez zastrzeżeń nazwy (ale nie polecam robić to dla twojego programu, po prostu pokazując, co jest możliwe):

from smtplib import SMTPException 
+0

Ah Miałem błąd w pisowni. – eatonphil

+5

Nie martw się, nawet po 20 latach pracy z SMTP, nadal to robię. –

1

To błędne pisanie zdarzyło się też wiele razy! Jednym ze sposobów obejścia tego "problemu" jest użycie yagmail.

Boki na bok, niedawno stworzyłem yagmaila, aby ułatwić wysyłanie e-maili.

Na przykład:

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

Wykorzystuje kilka skróceń tutaj, na przykład, gdy To nie jest zdefiniowana, to wysłać wiadomość do tej samej wiadomości e-mail, który zarejestrował się na serwerze. Również port i host są domyślne, co sprawia, że ​​jest bardzo zwięzły.

W rzeczywistości, ponieważ wydaje się, chcesz natychmiast zamknąć połączenie, można nawet użyć tego jednego-liner:

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

Dla bezpieczeństwa można przechowywać hasła w keyring (patrz dokumentacja), takie że nie musisz przechowywać osobistego hasła w swoich skryptach, bardzo ważne! Zaoszczędzi ci to jeszcze więcej cennego ekranu.

Idąc all-in z pakietem (@gmail.com jest domyślny), można uciec z następujących czynności:

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

powodzenia.

+1

Daj głos bez pozostawiania komentarza? – PascalVKooten

+2

Użyłem yagmaila i dałem uprowadzenie! – sureshvv

+0

@sureshvv Dzięki :) Mam nadzieję, że ci dobrze służy. – PascalVKooten