Ich musste nachforschen, also habe ich versucht, die gesendete E-Mail weiterzuleiten, zu verarbeiten und dann an Office365 weiterzuleiten.
WSL → Telnet → Mail senden → Postfix → Mit Python verarbeiten → sendmail → Es ist wie in Office365.
Ich verwende WSL (Ubuntu 18.04 LTS) von Windows 10 als Umgebung, da dies nur eine Bestätigung der Implementierungsmethode ist. E-Mails werden auch innerhalb der WSL (localhost) gesendet, und Postfix-Einstellungen werden für die Funktionsprüfung priorisiert.
Ich habe in einer Umgebung begonnen, in der WSL (Ubuntu 18.04 LTS) unter Windows 10 Pro verwendet werden kann.
Installation von WSL (Windows Subsystem für Linux) und Grundeinstellungen von Ubuntu
http://www.postfix.org/FILTER_README.html https://qiita.com/kanedaq/items/aab362e20bdafea83fff
$ sudo apt install postfix
$ sudo cp /etc/postfix/main.cf.proto /etc/postfix/main.cf
$ sudo vi /etc/postfix/main.cf
#Hostname des Mail-Systems (FQDN)
myhostname = hostname.example.jp
#Mail-System-Domainname
mydomain = example.jp
#Domainname (Domainname), der automatisch zugestellt wird, wenn eine E-Mail zugestellt wird
myorigin = $mydomain
#Netzwerkschnittstelle zum Empfangen von E-Mails (alle)
inet_interfaces = all
#Zulässige Netzwerkreichweite
mynetworks = 127.0.0.0/8
#Postfix sendmail Befehl vollständiger Pfad
sendmail_path = /usr/sbin/sendmail
#Vollständiger Pfad des Postfix-Befehls newaliases
newaliases_path = /usr/bin/newaliases
#Vollständiger Pfad des Postfix mailq-Befehls
mailq_path = /usr/bin/mailq
#Gruppe zum Senden von E-Mails und Verwalten von Warteschlangen
setgid_group = postdrop
#Speicherort des Postfix-HTML-Dokuments
html_directory = no
#Postfix manuelle Position
manpage_directory = /usr/share/man
#Speicherort der Postfix-Beispielkonfigurationsdatei
sample_directory = /etc/postfix
#Speicherort der Postfix README-Datei
readme_directory = /usr/share/doc/postfix
#Fügen Sie von hier aus das Ende der Einstellungsdatei hinzu
#Top-Mailserver des Weiterleitungsziels (diesmal Office365)
relayhost = [smtp.office365.com]:587
# SMTP-Aktivieren Sie AUTH
smtp_sasl_auth_enable = yes
#Eine Datei, die die Adresse des Übertragungszielservers sowie den zu authentifizierenden Benutzernamen und das Kennwort beschreibt.
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
#Erlaube keine anonyme Anmeldung
smtp_sasl_security_options = noanonymous
#Filter für SASL-Mechanismus des Zielservers
smtp_sasl_mechanism_filter = LOGIN
#TLS-Verschlüsselung wenn möglich
smtp_tls_security_level = may
#CA-Zertifikat (ca.-certificates)
smtp_tls_CApath = /etc/ssl/certs/ca-certificates.crt
$ sudo vi /etc/postfix/sasl_passwd
[smtp.office365.com]:587 Benutzername (E-Mail-Adresse):Passwort
$ sudo chmod 600 /etc/postfix/sasl_passwd
$ sudo postmap hash:/etc/postfix/sasl_passwd
$ sudo service postfix restart
$ tail -f /var/log/mail.log
$ cat /var/log/mail.err
#Überprüfen Sie den Prozess
$ ps aux|grep rsyslog|grep -v grep
#Überprüfen Sie die Einstellungen
$ sudo /usr/sbin/rsyslogd -n -d
$ cat /etc/rsyslog.d/50-default.conf
#Überprüfen Sie den Status
$ sudo /etc/init.d/rsyslog status
#Starten Sie den Prozess
$ sudo /etc/init.d/rsyslog start
error: open database /etc/aliases.db: No such file or directory
#Beenden Sie Postfix und erstellen Sie die Mail-Alias-Datenbank neu und starten Sie sie
$ sudo service postfix stop
$ sudo newaliases
$ sudo service postfix start
#Bestätigung des Vorhandenseins einer Mail-Alias-Datenbank
$ ls /etc/aliases.db
$ telnet hostname.example.jp 25
Trying 127.0.1.1...
Connected to hostname.example.jp.
Escape character is '^]'.
220 hostname.example.jp ESMTP Postfix (Ubuntu)
(Eingang) HELO hostname.example.jp
250 hostname.example.jp
(Eingang) MAIL From:Absender-E-Mail-Adresse
250 2.1.0 Ok
(Eingang) RCPT To:Ziel-E-Mail-Adresse
250 2.1.5 Ok
(Eingang) DATA
354 End data with <CR><LF>.<CR><LF>
(Eingang) This is test mail.
(Eingang) .
250 2.0.0 Ok: queued as EAD291C000000084498
(Eingang) quit
221 2.0.0 Bye
Connection closed by foreign host.
Stellen Sie sicher, dass Sie die weitergeleitete E-Mail auf dem MUA (Outlook) empfangen können, für den Sie ein Office365-Konto eingerichtet haben.
Wenn Sie die E-Mail nicht erhalten können, überprüfen Sie das Protokoll
$ tail -f /var/log/mail.log
$ cat /var/log/mail.err
$ sudo apt install python3
$ sudo apt install python3-pip
$ python3 -V
$ pip3 -V
$ cd ~
$ mkdir postfix
$ cd postfix
$ touch transfer_mail.py
$ chmod 755 transfer_mail.py
#!/usr/bin/python3
import sys
import os
import email
import email.parser
from os.path import join, dirname
from subprocess import Popen, PIPE
#Holen Sie sich von der Standardeingabe
mime_str = sys.stdin.read()
# mime_str = open(sys.argv[4]).read()
#Als E-Mail analysieren
message = email.parser.Parser().parsestr(mime_str)
#Datei, die den Inhalt der E-Mail ausspuckt
filepath = join(dirname(__file__), 'result.txt')
#Atme den Inhalt der E-Mail in eine Datei aus
with open(filepath, mode='w') as f:
#Parameter
for arg in sys.argv:
f.write(f"{arg}\n")
#Mail-Header
for key in message.keys():
value = message.get(key)
f.write(f"{key} : {value}\n")
#den Inhalt der E-Mail
payload = message.get_payload()
f.write(payload)
#Stellen Sie Quelle, Ziel und Betreff ein
message["From"] = sys.argv[1]
message["To"] = sys.argv[2]
message["Subject"] = "Test mail !!!"
#Post weiterleiten
command = ["/usr/sbin/sendmail", "-t", "-oi"]
stdout = ''
stderr = ''
retval = 0
process = Popen(command, stdin=PIPE)
(stdout, stderr) = process.communicate(message.as_string().encode())
retval = process.wait()
if retval == 0:
sys.exit(0)
else:
sys.exit(1)
$ sudo vi /etc/postfix/master.cf
# content_Filter angeben
smtp inet n - n - - smtpd -o content_filter=filter:dummy
# content_Definieren Sie einen Filter (laufender Benutzer, laufendes Programm, Absender, Empfänger, Größe)
filter unix - n n - 10 pipe
flags=Rq user=Benutzer argv=/home/Nutzer/postfix/transfer_mail.py ${sender} ${recipient} ${size}
$ sudo service postfix restart
$ tail -f /var/log/mail.log
$ cat /var/log/mail.err
$ telnet hostname.example.jp 25
Trying 127.0.1.1...
Connected to hostname.example.jp.
Escape character is '^]'.
220 hostname.example.jp ESMTP Postfix (Ubuntu)
(Eingang) HELO hostname.example.jp
250 hostname.example.jp
(Eingang) MAIL From:Absender-E-Mail-Adresse
250 2.1.0 Ok
(Eingang) RCPT To:Ziel-E-Mail-Adresse
250 2.1.5 Ok
(Eingang) DATA
354 End data with <CR><LF>.<CR><LF>
(Eingang) This is test mail.
(Eingang) .
250 2.0.0 Ok: queued as EAD291C000000084498
(Eingang) quit
221 2.0.0 Bye
Connection closed by foreign host.
Stellen Sie sicher, dass die weitergeleitete E-Mail von MUA (Outlook) empfangen wurde, für die Sie ein Office365-Konto eingerichtet haben.
Bestätigen Sie, dass die Textdatei ausgegeben wird
$ cat ~/postfix/result.txt
/home/Nutzer/postfix/transfer_mail.py ← Programm ausgeführt
Absender-E-Mail-Adresse ← Filterparameter 1
Ziel-E-Mail-Adresse ← Filterparameter 2
Größe ← Filterparameter 3
Return-Path : <Relay-E-Mail-Adresse>
Received : from hostname.example.jp (localhost [127.0.0.1])
by hostname.example.jp (Postfix) with SMTP id 923AE9E00000003FBF1
for <Ziel-E-Mail-Adresse>; Fri, 9 Oct 2020 23:55:00 +0900 (JST)
Message-Id : <[email protected]>
Date : Fri, 10 Oct 2020 23:55:00 +0900 (JST)
From :Absender-E-Mail-Adresse
This is test mail.(Text)
$ tail -f /var/log/mail.log
Oct 10 23:55:00 hostname postfix/qmgr[10858]: 923AE9E00000003FBF1: from=<Absender-E-Mail-Adresse>, size=362, nrcpt=1 (queue active)
Oct 10 23:55:00 hostname postfix/pipe[10951]: 923AE9E00000003FBF1: to=<Ziel-E-Mail-Adresse>, relay=filter, delay=591, delays=591/0.01/0/0.08, dsn=2.0.0, status=sent (delivered via filter service)
Oct 10 23:55:00 hostname postfix/qmgr[10858]: 923AE9E00000003FBF1: removed
Oct 10 23:55:00 hostname postfix/pickup[10857]: 2047A9F00000003FBF1: uid=1000 from=<Nutzer>
Oct 10 23:55:00 hostname postfix/cleanup[10955]: 2047A9F00000003FBF1: message-id=<[email protected]>
Oct 10 23:55:00 hostname postfix/qmgr[10858]: 2047A9F00000003FBF1: from=<[email protected]>, size=567, nrcpt=1 (queue active)
Oct 10 23:55:00 hostname postfix/smtp[10957]: warning: vstream_tweak_tcp: getsockopt TCP_MAXSEG: Protocol not available
Oct 10 23:55:00 hostname postfix/smtp[10957]: 2047A9F00000003FBF1: to=<Ziel-E-Mail-Adresse>, relay=smtp.office365.com[XXX.XXX.XXX.XXX]:587, delay=1.6, delays=0.03/0.02/1.1/0.4, dsn=2.0.0, status=sent (250 2.0.0 OK <[email protected]> [Hostname=XXXXXXXXXXXXX.xxxxxxxx.xxxx.outlook.com])
Oct 10 23:55:00 hostname postfix/qmgr[10858]: 2047A9F00000003FBF1: removed
Ich bin neugierig auf die Warnung vstream_tweak_tcp im Protokoll, aber ich konnte die gesendete E-Mail weiterleiten, verarbeiten und dann an Office365 weiterleiten. Es scheint, dass es zum Zeitpunkt der Entwicklung für die Zusammenarbeit mit anderen Diensten und Untersuchungen verwendet werden kann.