Пошлите электронное письмо с помощью сценария Python

Сегодня я должен был послать электронное письмо из сценария 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
9
задан Bill the Lizard 4 August 2011 в 15:49
поделиться

4 ответа

Вы назвали свой модуль так же, как один из внутренних модулей Python. Когда вы импортируете smtplib, он пытается импортировать email и находит ваш модуль вместо внутреннего. Когда два модуля импортируют друг друга, только переменные в каждом модуле, видимые до обоих операторов импорта, будут видны друг другу. Переименование вашего модуля устранит проблему.

Вы можете увидеть это, хотя и немного неясно, в трассировке стека. Строка import email.utils из smtplib.py вызывает ваш модуль в "c:/Python26/email.py".

Еще одно замечание: вероятно, не стоит использовать каталог установки Python в качестве рабочего каталога для кода Python.

14
ответ дан 4 December 2019 в 09:12
поделиться

Вы назвали свой скрипт email.py?

Если да, переименуйте его во что-нибудь другое, и конфликт именования, с которым вы столкнулись, будет решен.

5
ответ дан 4 December 2019 в 09:12
поделиться

На вашем компьютере также есть открытый почтовый сервер, слушающий порт по умолчанию? smptlib предоставляет методы для подключения к почтовому серверу smtp, но если на вашем компьютере в данный момент не запущен такой сервер, то вы не сможете отправлять на него почту.

1
ответ дан 4 December 2019 в 09:12
поделиться

Вам удалось скрыть модуль электронной почты stdlib , вызвав свой скрипт email.py . Переименуйте свой сценарий во что-нибудь, чего нет в stdlib , и попробуйте еще раз.

3
ответ дан 4 December 2019 в 09:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: