2010-03-28 13 views
0

L'erreur est d'être jeté:Comment puis-je détecter une erreur de délai de connexion dans le fichier SMTPlib de Python?

error: [Errno 110] Connection timed out 

Je ne sais pas quoi sauf pour les?

try: 
     smtpObj = smtplib.SMTP('smtp.example.com') 
     smtpObj.starttls() 
     smtpObj.login('user','pass') 
     smtpObj.sendmail(sender, receivers, message) 
     print "Successfully sent email" 
    except smtplib.SMTPException('Error: unable to send email"'): 
     pass 
    except smtplib.socket.error ('Error: could not connect to server'): 
     pass 

Merci.

+0

pouvez-vous poster le code qui provoque l'erreur? –

+0

J'ai mis à jour la question avec le code qui jette l'erreur. Il renvoie l'erreur lorsque le serveur SMTP ne peut pas être contacté. – ensnare

Répondre

2

Je crois que socket.error devrait fonctionner, mais si vous postez le code que vous utilisez, nous pouvons vous aider à mieux. smtplib.SMTPConnectError devrait également être d'intérêt.

Essayez quelque chose comme ceci:

try: 
    server = smtplib.SMTP("something.com") 
except (socket.error, smtplib.SMTPConnectError): 
    print >> stderr, "Error connecting" 
    sys.exit(-1) 
3

Vous devez fournir la classe d'exception, et non pas une instance de celle-ci. C'est-à-dire le code devrait ressembler à

try: 
    smtpObj = smtplib.SMTP('smtp.example.com') 
    smtpObj.starttls() 
    smtpObj.login('user','pass') 
    smtpObj.sendmail(sender, receivers, message) 
    print "Successfully sent email" 
except smtplib.SMTPException: # Didn't make an instance. 
    pass 
except smtplib.socket.error: 
    pass 

La deuxième exception, smtplib.socket.error, semble être celui applicable pour attraper cette erreur. Il est généralement accessible directement à partir du module de socket import socket, socket.error.

Notez que j'ai dit que c'était le code "devrait" ressembler, et c'est une sorte d'exagération. Lorsque vous utilisez try/except, vous voulez inclure le moins de code possible dans le bloc try, en particulier lorsque vous rencontrez des erreurs assez générales comme socket.error.