it-swarm.com.de

Sendmail Errno [61] Verbindung abgelehnt

Ich habe versucht, meinen Antrag zu veranlassen, einen ausgegebenen Text an eine E-Mail zu senden. Zur Vereinfachung habe ich das Skript isoliert:

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

Dieses Skript gibt Folgendes aus:

    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

Wie Sie sehen, wird die Verbindung abgelehnt. Ich verwende Python 2.6 unter Mac OS X Snow Leopard (falls relevant).

Ich habe viel herumgesucht, konnte aber keine Lösung finden. Jede Hilfe wird geschätzt.

34
Tehnix

Ich vermute, dass auf Ihrem lokalen Rechner kein SMTP-Server installiert ist.

Wenn Ihre E-Mails nicht sensibel sind, öffnen Sie ein Google Mail-Konto und senden Sie Ihre E-Mails mit Python .

16
Adam Matan

Wenn Sie einen lokalen Server wie folgt starten:

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

Stellen Sie sicher, dass Sie den E-Mail-Versandcode ändern, um die nicht standardmäßige Portnummer zu verwenden:

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

Starten Sie einen einfachen SMTP-Server mit Python wie folgt:

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

Wenn Sie keinen separaten Server betreiben möchten und nur Unix verwenden, können Sie diese Technik verwenden, die von http://www.yak.net/fqa/84.html und kopiert wird ursprünglich aus der Python-FAQ:

Unter Unix ist es sehr einfach, sendmail zu verwenden. Der Ort des Sendmail-Programms variiert zwischen den Systemen. manchmal ist es/usr/lib/sendmail, manchmal/usr/sbin/sendmail. Die sendmail-Handbuchseite hilft Ihnen dabei. Hier ist ein Beispielcode:

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

Ich wollte etwas erstellen, damit Sie es einfach kopieren und einfügen können, aber es ist das nächste, was ich habe:

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]')

Ich denke, dass das Tutorial irreführend ist, da es davon ausgeht, dass Sie bereits über einen laufenden Server verfügen, der E-Mails für Sie sendet. Das einzige Problem mit meinem Skript ist, dass ich nicht weiß, wie es funktioniert, ohne das Klartext-Passwort nur dort geschrieben zu haben, aber leider ... zumindest sendet es es? Machen Sie einfach eine falsche E-Mail-Adresse oder etwas ...

1
Charlie Parker

Aus irgendeinem Grund hatte ich Schwierigkeiten, Server und Port an den Konstruktor weiterzugeben, nicht jedoch die Verbindungsfunktion. Das endete für mich:

    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

Wenn Sie root auf Ihrem System sind, möchten Sie möglicherweise opensmtpd installieren. Auf diese Weise müssen Sie den Server zunächst nicht manuell ausführen (dieser Dienst ist standardmäßig aktiviert, dh, nach der Installation von smtpd entweder manuell starten oder den Computer neu starten). Zweitens müssen Sie die Zeile server = smtplib.SMTP(SERVER) nicht ändern. Zum Abschluss verwenden Sie yum install opensmtpd oder den entsprechenden apt-get-Befehl.

0
e271p314