Отправить письмо с помощью скрипта Python - PullRequest
9 голосов
/ 20 марта 2010

Сегодня мне нужно было отправить письмо из скрипта 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

Ответы [ 4 ]

14 голосов
/ 20 марта 2010

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

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

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

5 голосов
/ 20 марта 2010

Вы назвали свой сценарий email.py?

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

3 голосов
/ 20 марта 2010

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

1 голос
/ 20 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...