it-swarm.com.ru

Sendmail Errno [61] Соединение отклонено

Я пытался заставить свое приложение отправить выводимый текст по электронной почте. Для упрощения я выделил скрипт:

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

Этот скрипт выводит:

    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 (если это актуально).

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

34
Tehnix

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

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

16
Adam Matan

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

python -m smtpd -n -c Локальный хост DebuggingServer: 1025

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

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

Запустите простой SMTP-сервер с Python, например:

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

Если вы не хотите запускать отдельный сервер, и если вы используете только Unix, вы можете использовать эту технику, скопированную из http://www.yak.net/fqa/84.html , и первоначально из FAQ по Python:

В Unix это очень просто, используя sendmail. Расположение программы sendmail варьируется в зависимости от системы; иногда это/usr/lib/sendmail, иногда/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
4
Joshua Richardson

Я хотел создать что-то, чтобы вы могли просто скопировать вставить и заставить это работать, но это самое близкое, что я получил:

from email.message import EmailMessage
import smtplib
import os

def send_email(message,destination):
    # important, you need to send it to a server that knows how to send e-mails for you
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    # don't know how to do it without cleartexting the password and not relying on some json file that you dont git control...
    server.login('[email protected]', 'password_for_gmail')
    msg = EmailMessage()
    msg.set_content(message)

    msg['Subject'] = 'TEST'
    msg['From'] = '[email protected]'
    msg['To'] = destination
    server.send_message(msg)

if __== '__main__':
    send_email('msg','[email protected]')

Я чувствую, что учебник вводит в заблуждение, потому что он предполагает, не говоря вам очень хорошо, что у вас уже есть работающий сервер, который отправляет вам электронные письма ... это странно. Единственная проблема с моим сценарием в том, что я не знаю, как заставить его работать, не имея только что записанного пароля в виде открытого текста, но, увы ... по крайней мере, он его отправляет? Просто сделайте фальшивый адрес электронной почты или что-то ...

1
Charlie Parker

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

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

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

0
e271p314