Ответ 1
Я предполагаю, что у вас нет SMTP-сервера, установленного на вашей локальной машине.
Если ваши электронные письма не чувствительны, откройте учетную запись Gmail и отправьте свои письма с помощью Python.
Я пытаюсь получить приложение для отправки некоторого выводимого текста на электронную почту. Для упрощения я выделил script:
import smtplib
import sys
import os
SERVER = "localhost"
FROM = os.getlogin()
TO = [raw_input("To : ")]
SUBJECT = "Message From " + os.getlogin()
print "Message : (End with ^D)"
TEXT = ''
while 1:
line = sys.stdin.readline()
if not line:
break
TEXT = TEXT + line
# 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()
Этот script выдает:
Traceback (most recent call last):
File "/Users/christianlaustsen/Dropbox/Apps - Python/mail/smtplib_mail.py", line 32, in <module>
server = smtplib.SMTP(SERVER)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 239, in __init__
(code, msg) = self.connect(host, port)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 295, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 273, in _get_socket
return socket.create_connection((port, host), timeout)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 512, in create_connection
raise error, msg
error: [Errno 61] Connection refused
Итак, как вы можете видеть, соединение отказывается. Я запускаю Python 2.6 на Mac OS X Snow Leopard (если это необходимо).
Я пробовал много искать, но не смог найти решение. Любая помощь будет оценена.
Я предполагаю, что у вас нет SMTP-сервера, установленного на вашей локальной машине.
Если ваши электронные письма не чувствительны, откройте учетную запись Gmail и отправьте свои письма с помощью Python.
Если вы запустите локальный сервер следующим образом:
python -m smtpd -n -c ОтладкаServer localhost: 1025
Обязательно измените код отправки почты, чтобы использовать нестандартный номер порта:
server = smtplib.SMTP(SERVER, 1025)
server.sendmail(FROM, TO, message)
server.quit()
Запустите простой SMTP-сервер с Python следующим образом:
python -m smtpd -n -c DebuggingServer localhost:1025
Если вы не хотите запускать отдельный сервер, и если вы используете Unix, вы можете использовать эту технику, скопированную из http://www.yak.net/fqa/84.html, и изначально из FAQ Python:
В Unix это очень просто, используя sendmail. Расположение программы sendmail варьируется между системами; иногда это /usr/lib/sendmail, sometime/usr/sbin/sendmail. Страница руководства sendmail поможет вам. Вот пример кода:
SENDMAIL = "/usr/sbin/sendmail" # sendmail location
import os
p = os.popen("%s -t" % SENDMAIL, "w")
p.write("To: [email protected]\n")
p.write("Subject: test\n")
p.write("\n") # blank line separating headers from body
p.write("Some text\n")
p.write("some more text\n")
sts = p.close()
if sts != 0:
print "Sendmail exit status", sts
Если вы root в вашей системе, вы можете установить opensmtpd
. Во-первых, вам не нужно запускать сервер вручную (эта услуга включена по умолчанию, поэтому после smtpd
установка либо запустит ее вручную, либо перезагрузите компьютер). Во-вторых, вам не нужно менять строку server = smtplib.SMTP(SERVER)
. В заключение используйте yum install opensmtpd
или эквивалентную команду apt-get
.
По какой-то причине мне было сложно передать сервер и порт конструктору, но не функцию подключения. Это закончилось для меня работой:
s = smtplib.SMTP(timeout=30) #seconds
s.connect(EMAIL_HOST, EMAIL_PORT)
m = MIMEText('see subject')
m['subject'] = 'sweet subject'
m['from'] = EMAIL_FROM
m['to'] = to_list # comma-separated list of emails
s.sendmail(m['from'], m['to'].split(','), m.as_string())
s.quit()