Basics – Mail


Mailempfang

Beim einem Projekt kam der Wunsch hoch, Mails mit einem bestimmten Datum nach einem bestimmten Suchstring durchsuchen und mit einer Aktion verbinden zu können. Es geht mit der Installation und Konfiguration des Mailprogramms “fetchmail” los.

$ sudo apt-get install fetchmail
$ sudo nano /etc/fetchmailrc


poll pop.1und1.de
protocol POP3
user “Mail@Adresse.de” with password “Geheim!” mda “/home/pi/myfetch.sh”
fetchlimit 1

wobei die richtige Mailadresse und das richtige Passwort angegeben werden müssen. Da die meisten Provider nur noch SSL-Verbindungen zulassen, muss man dieses noch konfigurieren. Dazu muss erst einmal das Zertifikat des eigenen Providers abgeholt und gespeichert werden. Ich habe dazu einen Artikel “Fetchmail mit SSL absichern” gelesen, worin diverse Provider genannt wurden, nur meiner nicht. Außerdem wurde geschrieben, dass die Zertifikate regelmäßig erneuert werden und man dann die folgende Prozedur dann wiederholen muss. Da für mich das Thema ganz neu ist, kann ich das noch nicht bestätigen.

$ sudo mkdir -p /etc/ssl/fetchmail

In der nachfolgenden Zeile müssen die Serverdaten durch die gewünschten Angaben ersetzt werden, wobei pop3-Server meistens den Port 995 nutzen und IMAP nutzt meistens Port 993.

$ echo “quit” | openssl s_client -connect pop.1und1.de:995 -showcerts 2>/dev/null | sudo su -c ‘sed -ne “/BEGIN/,/END/p” >/etc/ssl/fetchmail/pop.1und1.de.pem’
$ openssl x509 -in /etc/ssl/fetchmail/pop.1und1.de.pem -fingerprint -noout -md5

Die Ausgabe wird in die Zwischenablage kopiert und muss in eine bestehende Datei eingefügt werden.

$ sudo nano /etc/fetchmailrc

Folgende Zeilen unten anhängen, Fingerprint ersetzen und abspeichern:

ssl
sslfingerprint “49:E7:36:66:55:10:A9:CF:F6:C7:BC:14:03:80:2A:65”
<— Hier den Fingerprint durch Deine Zwischenablage ersetzen!
sslcertck
sslcertpath /etc/ssl/certs/

Dann folgt ein kurzes Skript um die empfangenen Mails zwischen zu speichern:

$ sudo nano /home/pi/myfetch.sh

OutputFile=”/var/tmp/mail”
echo “” > $OutputFile
while read x
do
#echo $x
echo $x >> $OutputFile
done

Ich setze noch die Berechtigungen wie folgt:

$ sudo chown pi /etc/fetchmailrc
$ sudo chmod 600 /etc/fetchmailrc
$ sudo chown pi /home/pi/myfetch.sh
$ sudo chmod 755 /home/pi/myfetch.sh

Testen mittels:

$ sudo fetchmail -v -a -k -f /etc/fetchmailrc

v = verbose (ausführliche Meldungen)
a = alle (auch gelesene)
k= keep (verbleiben auf Server)
f= es folgt der Dateiname Deines Skripts

Wenn der Test erfolgreich war und auch wirklich der Inhalt einer Mail zu lesen war, wird alles automatisiert eingerichtet. Den Mailinhalt bekomme ich als Klartext allerdings nur angezeigt, wenn ich eine der Maildateien im Ordner /var/tmp aufliste (beispielsweise mit dem Befehl “more”) oder editiere (Beispiel “nano”). Da sollte so etwas zu sehen sein:

——=_NextPart_000_0027_01D257E5.ED82B820
Content-Type: text/plain;
charset=”iso-8859-1″
Content-Transfer-Encoding: quoted-printable

Hallo live stream,=20

folgende E-Mail-Adresse wurde neu angelegt:=20

Die Datei /etc/autostart.sh wurde mittels Editor “Nano” geändert. Es sollen alle Mails abgeholt und dabei gelöscht werden. Der Link der neuestes Mail von “heute”, die einen MMS-Link enthält, wird abgespielt. So sieht die /etc/autostart.sh aktuell aus, wobei sie nicht unbedingt hübsch ist und nur wenige Erklärungen enthält:

#!/bin/bash
# Soundeinstellungen setzen
sudo amixer cset numid=3 1
sudo amixer cset numid=1 98%
# IP-Adresse anzeigen
sudo ifconfig
# alle Mails mittels Pop3 abholen und löschen und den MMS-Link in Datei schreiben
Antwort=2
while [ $Antwort -gt 1 ];
do
fetchmail -a -f /etc/fetchmailrc
sudo chmod 666 /var/tmp/mail
Antwort=$(ls -l /var/tmp/mail | sudo awk ‘{ print $5 }’)
if [[ $Antwort == “” ]]; then
Antwort=0
fi
if [[ $Antwort > 1 ]]; then
MDatum=$(sudo grep ‘Date: ‘ /var/tmp/mail | sudo cut -c12- | sudo awk -v FS=”:” ‘{print substr($1,1,11)}’)
HDatum=$(date -R | sudo cut -c6- | sudo awk -v FS=”:” ‘{print substr($1,1,11)}’)
if [[ $HDatum == $MDatum ]]; then
echo “ist gleich”
Link=”cvlc -L “$(sudo grep ‘<mms://’ /var/tmp/mail | sudo cut -c2- | sudo awk -v FS=”>” ‘{print $1}’)” vlc://quit”
echo $Link > /home/pi/Link
sudo rm /var/tmp/mail
fi
fi
done
# Wenn Link in Mail gefunden, dann Mailabholung beenden
Antwort=$(ls -l /home/pi/Link | sudo awk ‘{ print $5 }’)
if [[ $Antwort > 1 ]]; then
sudo /etc/init.d/fetchmail stop
fi
# Datei mit MMS-Link abspielen
chmod 777 /home/pi/Link
/home/pi/Link
# Falls Link unbrauchbar beendet sich VLC automatisch und macht mit dem ERF-Link weiter
cvlc -L http://c14000-l.i.core.cdn.streamfarm.net/14000cina/live/3212erf_96/live_de_96.mp3 vlc://quit

Erklärung:
Mit Hilfe des Streamingprogramms No23Live wird eine Rundmail an alle der möglichen Hörer mit dem Link des MMS-Streams verschickt. Der Inhalt der aktuellsten Mail, die vom gleichen Tag sein muss (also “heute”) wird nach dem Link des Streams durchsucht und wenn vorhanden, wird der Link komplett abgespeichert. Ein vorhandener Link wird dabei überschrieben. Der zuletzt abgespeicherte Link wird danach abgespielt. Sollte das Abspielen des Links nicht funktionieren, beendet sich VLC selbstständig um anschließend den ERF-Link abzuspielen.

Diese Datei wurde am 25.01.2017 erstellt. Sie ist nicht unbedingt selbsterklärend, aber ich hoffe, dass mit etwas Experimentierfreude eigene Lösungen schneller gefunden werden können! Die Stringbearbeitung mit “awk” und noch einige andere Dinge waren hier Neuland für mich!