2017-05-30 9 views
1

Ich versuche, ein automatisiertes System auf meinem Arch Linux VPS zu erstellen, die einen monatlichen, HTML-formatierten Bericht an meine E-Mail senden wird. Ich habe mich dafür entschieden, Python als Programmiersprache dafür zu verwenden, aber ich stecke fest.Senden Sie E-Mail in Python über lokale Exim MTA

Im folgenden Code finden Sie, dass ich die SMTPlib verwenden, um eine Nachricht zu erstellen und zu senden.

import smtplib 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 


def py_mail(SUBJECT, BODY, TO, FROM): 
    """"With this function we send out our HTML email""" 

    # Create message container - the correct MIME type is multipart/alternative here! 
    MESSAGE = MIMEMultipart('alternative') 
    MESSAGE['subject'] = SUBJECT 
    MESSAGE['To'] = TO 
    MESSAGE['From'] = FROM 
    MESSAGE.preamble = """"Your reader does not support the report format. Please visit 
          us <a href="https://my-website.nl">online</a>!""" 

    # Record the MIME type text/html 
    HTML_BODY = MIMEText(BODY, 'html') 

    # Attach parts into message container 
    MESSAGE.attach(HTML_BODY) 

    # Create SMTP object 
    server = smtplib.SMTP(host='localhost', port=587) 

    # Print debugging output when testing 
    if __name__ == '__main__': 
     server.set_debuglevel(1) 

    # The actual sending of the email 
    try: 
     server.starttls() 
     server.sendmail(FROM, [TO], MESSAGE.as_string()) 
     server.quit() 
    except smtplib.SMTPException as error: 
     print("Error: unable to send mail : {err}".format(err=error)) 


if __name__ == '__main__': 
    """Executes if the script is run as main script (for testing purposes)""" 

    email_content = """" 
    <head> 
     <link href="https://fonts.googleapis.com/css?family=Open+Sans+Condensed:300" rel="stylesheet"> 
     <meta charset="UTF-8"> 
     <title>TestMail</title> 

     <style> 
      h1 { 
       position: absolute; 
       top: 50%; 
       left: 50%; 
       -webkit-transform: translate(-50%, -50%); 
       -moz-transform: translate(-50%, -50%); 
       -ms-transform: translate(-50%, -50%); 
       -o-transform: translate(-50%, -50%); 
       transform: translate(-50%, -50%); 
       font-family: "Open Sans Condensed", sans-serif; 
       font-size: 3em; 

      } 
     </style> 

    </head> 
    <body> 
     <h1>'tis but a scratch</h1> 
    </body> 
    """ 

    TO = '[email protected]' 
    FROM = '[email protected]' 

    py_mail("Test email onderwerp", email_content, TO, FROM) 

Aber sobald ich das Skript ich die folgende Fehlermeldung erhalten, laufen:

ConnectionRefusedError: [Errno 111] Connection refused

Ich habe Exim als lokale ausgeführt wird, senden nur für MTA auf meinem Server. Ich habe keine Probleme E-Mails über die Kommandozeile zu versenden. Probleme treten erst auf, wenn ich versuche, mich mit Python zu verbinden.

Wenn mir jemand helfen kann, wäre das großartig. Vielen Dank im Voraus

Antwort

-1

Haben Sie wirklich einen SMTP-Server auf dem Localhost-Port 587 ausgeführt? Versuchen Sie Port 25 - es ist der Standardport für SMTP. 587 ist für SSL/TLS, aber Sie müssen Ihr SMTP dafür konfigurieren.

Wenn Sie sicher sind, dass es wirklich Port 587 sein muss - überprüfen Sie die Firewall-Einstellungen.

+0

Also ich habe es auf Port 25 eingestellt, aber leider immer noch den gleichen Fehler. Ich habe auch meine Firewall zum Testen schnell deaktiviert und dann wieder aktiviert. Immer noch keine Veränderung. –

Verwandte Themen