Сегодня я должен был послать электронное письмо из сценария Python. Когда всегда я искал Google и нашел следующий сценарий, который соответствует к моей потребности.
import smtplib
SERVER = "localhost"
FROM = "sender@example.com"
TO = ["user@example.com"] # 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()
Но когда я пытался запустить программу, я получил следующее сообщение об ошибке:
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'
Как я могу решить эту проблему? Кто-либо может помочь мне?
Заранее спасибо, Nimmy.
изменивший имя на emailsendin .py. Но я получил следующую ошибку
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
Вы назвали свой модуль так же, как один из внутренних модулей Python. Когда вы импортируете smtplib
, он пытается импортировать email
и находит ваш модуль вместо внутреннего. Когда два модуля импортируют друг друга, только переменные в каждом модуле, видимые до обоих операторов импорта, будут видны друг другу. Переименование вашего модуля устранит проблему.
Вы можете увидеть это, хотя и немного неясно, в трассировке стека. Строка import email.utils
из smtplib.py
вызывает ваш модуль в "c:/Python26/email.py".
Еще одно замечание: вероятно, не стоит использовать каталог установки Python в качестве рабочего каталога для кода Python.
Вы назвали свой скрипт email.py
?
Если да, переименуйте его во что-нибудь другое, и конфликт именования, с которым вы столкнулись, будет решен.
На вашем компьютере также есть открытый почтовый сервер, слушающий порт по умолчанию? smptlib предоставляет методы для подключения к почтовому серверу smtp, но если на вашем компьютере в данный момент не запущен такой сервер, то вы не сможете отправлять на него почту.
Вам удалось скрыть модуль электронной почты stdlib , вызвав свой скрипт
email.py
. Переименуйте свой сценарий во что-нибудь, чего нет в stdlib , и попробуйте еще раз.