Envoyer un email en utilisant le script python
Aujourd'hui, j'ai besoin d'envoyer un email à partir d'un script Python. Comme toujours, j'ai cherché sur Google et trouvé le script suivant qui correspond à mon besoin.
import smtplib
SERVER = "localhost"
FROM = "[email protected]"
TO = ["[email protected]"] # must be a list
SUBJECT = "Hello!"
TEXT = "This message was sent with Python's smtplib."
# Prepare actual message
message = """\
From: %s
To: %s
Subject: %s
%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
# Send the mail
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
Mais quand j'ai essayé d'exécuter le programme, j'ai eu le message d'erreur suivant:
Traceback (most recent call last):
File "C:/Python26/email.py", line 1, in <module>
import smtplib
File "C:\Python26\lib\smtplib.py", line 46, in <module>
import email.utils
File "C:/Python26/email.py", line 24, in <module>
server = smtplib.SMTP(SERVER)
AttributeError: 'module' object has no attribute 'SMTP'
Comment puis-je résoudre ce problème? Quelqu'un peut-il m'aider?
Merci d'avance,
Nimmy.
changé le nom de emailsendin .py. Mais j'ai obtenu l'erreur suivante
Traceback (most recent call last):
File "C:\Python26\emailsending.py", line 24, in <module>
server = smtplib.SMTP(SERVER)
File "C:\Python26\lib\smtplib.py", line 239, in __init__
(code, msg) = self.connect(host, port)
File "C:\Python26\lib\smtplib.py", line 295, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "C:\Python26\lib\smtplib.py", line 273, in _get_socket
return socket.create_connection((port, host), timeout)
File "C:\Python26\lib\socket.py", line 512, in create_connection
raise error, msg
error: [Errno 10061] No connection could be made because the target machine actively refused it
source d'informationauteur Nimmy
Vous devez vous connecter pour publier un commentaire.
Vous avez nommé votre module le même que celui de Python modules internes. Lorsque vous importez des
smtplib
il tente d'importeremail
et trouve votre module à la place de l'interne. Lorsque deux modules d'importation de l'un à l'autre, seules les variables de chaque module visible avant de l'importer les déclarations seront visibles l'un pour l'autre. Le fait de renommer le module permettra de résoudre le problème.Vous pouvez le voir, même si c'est quelque peu obscur, dans la trace de la pile. Le
import email.utils
ligne desmtplib.py
appelle votre module "c:/Python26/email.py".Une autre remarque: il n'est probablement pas une bonne idée d'utiliser votre répertoire d'installation de Python comme votre répertoire de travail pour le code Python.
Avez-vous le nom de votre script
email.py
?Si oui, renommer en quelque chose d'autre et le conflit de noms vous êtes à la rencontre devrait être résolu.
Vous avez réussi à faire de l'ombre aux stdlib
email
module en appelant votre scriptemail.py
. Renommer votre script à quelque chose de pas dans la stdlib et essayez à nouveau.Votre ordinateur aussi avez ouvert un serveur de messagerie à l'écoute sur le port par défaut?
smptlib fournit des méthodes pour se connecter à un serveur de messagerie smtp, mais si votre ordinateur n'est pas actuellement en cours d'exécution, puis vous ne pouvez pas envoyer de mail.