Подтвердить что ты не робот

Sendmail Errno [61] Соединение Отказано

Я пытаюсь получить приложение для отправки некоторого выводимого текста на электронную почту. Для упрощения я выделил 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 (если это необходимо).

Я пробовал много искать, но не смог найти решение. Любая помощь будет оценена.

4b9b3361

Ответ 1

Я предполагаю, что у вас нет SMTP-сервера, установленного на вашей локальной машине.

Если ваши электронные письма не чувствительны, откройте учетную запись Gmail и отправьте свои письма с помощью Python.

Ответ 2

Если вы запустите локальный сервер следующим образом:

python -m smtpd -n -c ОтладкаServer localhost: 1025

Обязательно измените код отправки почты, чтобы использовать нестандартный номер порта:

server = smtplib.SMTP(SERVER, 1025)
server.sendmail(FROM, TO, message)
server.quit()

Ответ 3

Запустите простой SMTP-сервер с Python следующим образом:

python -m smtpd -n -c DebuggingServer localhost:1025

Ответ 4

Если вы не хотите запускать отдельный сервер, и если вы используете 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

Ответ 5

Если вы root в вашей системе, вы можете установить opensmtpd. Во-первых, вам не нужно запускать сервер вручную (эта услуга включена по умолчанию, поэтому после smtpd установка либо запустит ее вручную, либо перезагрузите компьютер). Во-вторых, вам не нужно менять строку server = smtplib.SMTP(SERVER). В заключение используйте yum install opensmtpd или эквивалентную команду apt-get.

Ответ 6

По какой-то причине мне было сложно передать сервер и порт конструктору, но не функцию подключения. Это закончилось для меня работой:

    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()