web-dev-qa-db-fra.com

Le lancement d'un script python dans IDLE fonctionne mais dans le terminal, une instance SMTP ne comportant pas d'attribut 'send_message' error

J'ai un script qui entraîne l'envoi d'un courrier électronique avec le module smtplib.SMTP python.

Quand je le lance dans IDLE, il envoie très bien, sans message d'erreur. J'essaie différentes manières de l'automatiser avec Crontab pour que je puisse aller tous les jours à 10h.

Si je le lance depuis le terminal, j'obtiens une erreur:

$ python endofmonth.py
Traceback (most recent call last):
  File "endofmonth.py", line 74, in <module>
    s.send_message(msg)
AttributeError: SMTP instance has no attribute 'send_message'

Pourquoi cela fonctionnerait-il dans IDLE mais pas quand on appelle depuis un terminal?

2
paullystew

La méthode send_message de la classe SMTP a été ajoutée dans Python 3.2 . Vous appelez le script à exécuter à l'aide de python, qui est un lien symbolique pour Python 2. Comme la méthode send_message n'est pas définie dans Python 2, vous obtenez un AttributeError.

Pour résoudre ce problème, vous devez appeler votre script à l'aide de Python 3.2 ou plus récent. Exécutez-le comme:

python3 endofmonth.py

et ça marcherait.

Vous utilisez très probablement la version Python 3 d'IDLE, qui est la raison pour laquelle il fonctionne là-bas.

2
Aditya