Changes for page Mailversand von selbst programmierten Scripten oder selbst installierter Spezialsoftware
Last modified by Christoph Bußenius on 2025/02/05 12:20
From version 1.1
edited by Christoph Bußenius
on 2024/12/09 10:15
on 2024/12/09 10:15
Change comment:
There is no comment for this version
To version 19.1
edited by Christoph Bußenius
on 2024/12/09 15:46
on 2024/12/09 15:46
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -1,26 +1,26 @@ 1 1 == Wen betrifft dieser Artikel? == 2 2 3 -Dies sind nicht die Maileinstellungen für Endanwender. 3 +Dies sind **nicht** die Maileinstellungen für Endanwender. 4 4 5 -Diese Maileinstellungen empfehlen wir zum Beispiel für automatisch verschickte Bestätigungsmails von Webformularen o.ä. 5 +Diese Maileinstellungen empfehlen wir zum Beispiel für **automatisch verschickte** Bestätigungsmails von Webformularen o.ä. 6 6 7 7 == Verbindungsdaten == 8 8 9 -Wenn es in einer Ubuntu-VM im ESX der ITO ist oder einer ähnlich installierten Linux-Installation:9 +Wenn es in einer **Ubuntu-VM** im ESX der ITO ist oder einer ähnlichen Linux-Installation: 10 10 11 -* SMTP-Server: localhost 11 +* SMTP-Server: **localhost** 12 12 * Port: 25 13 13 * Kein Login, kein Passwort 14 14 * Kein TLS/SSL 15 -* Alternativ "sendmail"-Command 15 +* Alternativ **"sendmail"**-Command 16 16 17 -Von anderen Rechnern in den internen Netzen der ITO: 17 +Von anderen Rechnern in den **internen Netzen** der ITO: 18 18 19 19 * SMTP-Server: mail.cit.tum.de 20 20 * Port: 587 (oder 25) mit StartTLS oder Port 465 mit smtps 21 21 * Kein Login, kein Passwort (evtl. in Zukunft geplant) 22 22 23 -Konfiguration alsSmarthost:23 +Konfiguration mit Smarthost in den internen Netzen der ITO: 24 24 25 25 * SMTP-Server: mailrelay.rbg.tum.de 26 26 * Port: 25 ... ... @@ -29,7 +29,65 @@ 29 29 30 30 Es ist wichtig, dass Sie diese Hinweise beachten. Was passiert, wenn Sie es nicht beachten? 31 31 32 -* 33 -* Sie laufen Gefahr, dass wir Ihren Host sperren 34 -* Sie laufen Gefahr, dass Ihr Host automatisch gesperrt wird von uns oder vom LRZ 35 -* 32 +* Wenn Ihre Mails von Benutzern externer Provider (z.B. Outlook.com) als Spam markiert werden oder dort automatisch als Spam erkannt werden, kann es sein, dass dieser Provider unseren Mailserver auf eine **Sperrliste** setzt. Im schlimmsten Fall kann dann **niemand an der CIT mehr E-Mails versenden**. 33 +* Bei falscher Konfiguration kann es auch leicht passieren, dass Mails in großer Anzahl entstehen, die unser Mailsystem **überlasten**. 34 +* Sie laufen Gefahr, dass wir Ihren Host **sperren**. 35 +* Sie laufen Gefahr, dass Ihr Host automatisch **gesperrt** wird von uns oder vom LRZ. 36 +* Ihre Benutzer können Ihre Services im wichtigsten Moment nicht benutzen oder Ihre Mails nicht empfangen. Ihr Projekt scheitert. 37 + 38 +Deswegen folgende Hinweise: 39 + 40 +* Schicken Sie niemandem Mails gegen ihren Willen. Idealerweise sollten sich alle Empfänger vorher **explizit einverstanden** erklärt haben, dass Sie Mails von Ihnen erhalten werden, und aus der Mail sollte explizit hervorgehen, warum die Empfänger sie erhalten. 41 +* Schicken Sie von einer **gültigen Absenderadresse**. Verwenden Sie keinen Absender wie "noreply@...". Es auch ist wichtig, dass auch Bounces an diese Adresse geregelt empfangen werden können. Sonst können Double Bounces entstehen, was insbesondere in größerer Anzahl das Mailsystem belasten kann. 42 +** Beachten Sie, dass es zwei Absenderadressen gibt: 1. Die **Absenderadresse** aus dem "From"-Header und 2. den **Envelope Sender** (auch bekannt als Bounce-Adresse). Beide müssen gültig sein. Sie können für beides die gleiche Adresse verwenden. 43 +* Testen Sie, was mit **Bounces** passiert, falls Ihr Script an eine nichtzustellbare Adresse schickt. 44 +* Testen Sie, ob Ihre Mails von externen Providern oder von einer Software wie SpamAssassin **als Spam eingestuft** werden. 45 +* Wenn Sie HTML-Mails versenden, fügen Sie eine **Plain-Text**-Version mit ein. 46 +* Überlegen Sie, wie viele Mails in Ausnahmesituationen entstehen können, und implementieren Sie ggf. ein **Ratelimit**. [[Hinweise zu Massenmails>>https://wiki.ito.cit.tum.de/bin/view/Informatik/Benutzerwiki/MassenMails/]] 47 +* Statt **große Attachments** (inbesondere an viele Empfänger gleichzeitig) zu verschicken, suchen Sie nach einer anderen Lösung, z.B. schicken Sie Links auf Dateien in der Nextcloud. 48 + 49 +Hinweise hauptsächlich für selbstprogrammierte Scripte / Anwendungen: 50 + 51 +* Setzen Sie alle **Header auf korrekte Werte**. 52 +** Der Header **"Date"** muss auf ein syntaktisch korrektes Datum gesetzt werden, es soll nicht in der Vergangenheit oder Zukunft liegen. Verwenden Sie Libraries o.ä., um den Header zu erzeugen. 53 +** Der Header **Message-ID** sollte auch von einer Library erzeugt werden. 54 +* Implementieren Sie **Fehlerbehandlung**, wenn der SMTP-Server oder das sendmail-Command einen Fehler liefert. 55 + 56 +== Beispiel-Code in Python == 57 + 58 +##from email.mime.text import MIMEText 59 +import email.utils 60 +import email.charset 61 +import smtplib## 62 + 63 + 64 +##body = 'Dies wäre eine Test-Message, sie hätte sogar Umlaute.' 65 +subject = 'Bloß ein Test' 66 +sender_name = 'Vorname Nachname' 67 +sender_addr = '........@cit.tum.de' 68 +recipient = '......@cit.tum.de'## 69 + 70 + 71 +##charset = email.charset.Charset('utf-8') 72 +# Quoted Printable: So bleibt der Quelltext der E-Mail menschenlesbar. 73 +charset.body_encoding = email.charset.QP## 74 + 75 +##mime = MIMEText(body, _charset=charset) 76 +mime['From'] = email.utils.formataddr((sender_name, sender_addr)) # Ergibt Vorname Nachname <addr> 77 +mime['To'] = recipient 78 +mime['Subject'] = subject 79 +mime['Date'] = email.utils.formatdate(localtime=True) 80 +mime['Message-ID'] = email.utils.make_msgid()## 81 + 82 +##try: 83 + smtp = smtplib.SMTP( 84 + host='localhost', 85 + port=25) 86 + smtp.send_message( 87 + mime, 88 + from_addr=sender_addr, # Envelope Sender 89 + to_addrs=[recipient]) 90 + smtp.quit() 91 +except (smtplib.SMTPException, ConnectionRefusedError) as e: 92 + print('Es gab einen SMTP-Fehler:', e)## 93 +