2012-10-29 13 views
12

Sto scrivendo una semplice funzione di sendmail per me stesso e continuo a ricevere questo errore:Nuovo per Python, errore SMTP di Gmail

NameError: nome 'SmtpException' non è definito

Cosa c'è di sbagliato con il mio codice? Eventuali suggerimenti?

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

risposta

20

In Python, è necessario qualificare completamente il nome con il prefisso con il suo modulo:

except smtplib.SMTPException: 

Ciò è vero a meno che non espressamente importa il nome non qualificato (ma io non consiglierei facendo questo per il tuo programma, mostrando solo cosa è possibile):

from smtplib import SMTPException 
+0

Ah, ho avuto un errore di ortografia. – eatonphil

+5

Non mi preoccupo, anche dopo 20 anni di lavoro con SMTP, lo faccio ancora. –

1

Questo errore di ortografia si è verificato molte volte anche a me! Un modo per aggirare questo "problema" è usare yagmail.

Scherzi a parte, recentemente ho creato yagmail per semplificare l'invio di e-mail.

Ad esempio:

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

Esso utilizza diversi accorciamenti qui, per esempio quando To non è definito, invierà una e-mail allo stesso e-mail che ha registrato sul server. Anche la porta e l'host sono predefiniti, il che lo rende molto conciso.

Infatti, dal momento che sembra che si desidera chiudere immediatamente la connessione, si può anche utilizzare questo uno-liner:

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

Per ragioni di sicurezza, è possibile mantenere la password nel keyring (vedi documentazione) quali che non devi mantenere la tua password personale negli script, molto importante! Ti farà risparmiare ancora più spazio prezioso sullo schermo.

Andare all-in con il pacchetto (@gmail.com è di default), si può farla franca con il seguente:

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

Buona fortuna.

+1

Downvote senza lasciare un commento? – PascalVKooten

+2

Ho usato yagmail e ti ho dato un upvote! – sureshvv

+0

@sureshvv Grazie :) Spero che ti serva bene. – PascalVKooten

Problemi correlati