Wiki source code of Mailversand von selbst programmierten Scripten oder selbst installierter Spezialsoftware
Version 18.1 by Christoph Bußenius on 2024/12/09 15:46
Show last authors
author | version | line-number | content |
---|---|---|---|
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 |