Version 19.1 by Christoph Bußenius on 2024/12/09 15:46

Show last authors
1 == Wen betrifft dieser Artikel? ==
2
3 Dies sind **nicht** die Maileinstellungen für Endanwender.
4
5 Diese Maileinstellungen empfehlen wir zum Beispiel für **automatisch verschickte** Bestätigungsmails von Webformularen o.ä.
6
7 == Verbindungsdaten ==
8
9 Wenn es in einer **Ubuntu-VM** im ESX der ITO ist oder einer ähnlichen Linux-Installation:
10
11 * SMTP-Server: **localhost**
12 * Port: 25
13 * Kein Login, kein Passwort
14 * Kein TLS/SSL
15 * Alternativ **"sendmail"**-Command
16
17 Von anderen Rechnern in den **internen Netzen** der ITO:
18
19 * SMTP-Server: mail.cit.tum.de
20 * Port: 587 (oder 25) mit StartTLS oder Port 465 mit smtps
21 * Kein Login, kein Passwort (evtl. in Zukunft geplant)
22
23 Konfiguration mit Smarthost in den internen Netzen der ITO:
24
25 * SMTP-Server: mailrelay.rbg.tum.de
26 * Port: 25
27
28 == Bitte beachten ==
29
30 Es ist wichtig, dass Sie diese Hinweise beachten. Was passiert, wenn Sie es nicht beachten?
31
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