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
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. –