Globenaut

Jeder hat das Recht auf Meinungsfreiheit und freie Meinungsäußerung; dieses Recht schließt die Freiheit ein, Meinungen ungehindert anzuhängen sowie über Medien jeder Art und ohne Rücksicht auf Grenzen Informationen und Gedankengut zu suchen, zu empfangen und zu verbreiten.
Die Allgemeine Erklärung der Menschenrechte
Resolution 217 A (III) vom 10.12.1948/Artikel 19
Zensoren sind Verbrecher!
BPjM: Trusted Censorship
Christliche Werte — Neine Danke!

Skripttipp #4: E-Mail bei Mailinator automatisch abholen

von Globenaut am 11.4.09

Wer den Mailinator und seine Verwandten benutzt, hat unter Umständen das Problem, daß er einerseits nicht weiß wann die erwartete e-Mail eintrifft, andererseits aber Mailinator selbige nach ein paar Stunden löscht. Dies läßt sich durch ein kleines Bashskript beheben, welches die e-Mails abholt.

Was macht das Skript genau?

  1. Für jeden Skriptaufruf wird ein eigener Ordner angelegt, wobei sich der Ordnername aus e-Mailadresse, Datum und Uhrzeit zusammensetzt: Test@Mailinator.com_2009.04.11-1351.
  2. Die Liste mit den eingegangenen Mails wird heruntergeladen. Wenn es nicht erfolgreich war endet die Ausführung.
  3. Jetzt wird jede e-Mail einzeln heruntergeladen und in einer eigenen Datei abgelegt, wobei als Dateiname der Betreff der jeweiligen e-Mail genommen wird.
  4. Abschließend wird die Datei mit der Liste der Eingangsmails sicher gelöscht. Im Ordner verbleiben verbleiben nur die Dateien mit den e-Mails. Ist keine e-Mail eingetroffen, bleibt ein leerer Ordner zurück, um eine einfache Kontrolle der Skriptausführung zu haben.
#!/usr/bin/env bash
# Skript       Mailinatorabfrage
# Beschreibung Holt e-Mail von Mailinator.com ab.
# Parameter    $1: Die e-Mailadresse die abgefragt werden soll; optional.
#              $2: Der Pfad wo die Mail(s) gespeichert werden sollen; optional.

Mailadresse=${1:-'Test@mailinator.com'}
Pfad=${2:-$HOME'/Downloads/'}${Mailadresse}_$(date "+%Y.%m.%d-%H%M")
Domain='http://'${Mailadresse#*@}
URL_Fach=$Domain'/maildir.jsp?email='${Mailadresse%@*}'&x=0&y=0'
Inhalt='maildir.html'
mkdir $Pfad
cd $Pfad
curl -A "Anonymous" $URL_Fach -o $Inhalt
if [ -e $Inhalt ]; then
    for Zeile in $(cat $Inhalt | grep -Eio '/showmail.jsp([^>])*')
    do
        Betreff=$(grep -Eio "${Zeile#*&}.*</a>" < $Inhalt)
        Betreff=${Betreff#*>}
        Betreff=${Betreff%<*}
        curl -A 'Anonymous' ${Domain}${Zeile%>*} -o "$Betreff"'.html'
    done
    srm -srf $Inhalt
fi

Das Skript hat zwei optionale Parameter

  1. $1: Die e-Mailadresse die abgefragt werden soll; wird keine angegeben wird 'Test@mailinator.com' genommen.
  2. $2: Der Pfad wo die Mail(s) gespeichert werden sollen; wird kein Pfad angegeben, erfolgt die Speicherung in einem Ordner im Download-Ordner des jeweiligen Anwenders (Letzteres gilt für MacOS X, Linuxer müssen den Pfad ggf. anpassen).

Die regelmäßige Ausführung des Skriptes ist unter Linux ein cron-Job, unter MacOS X wird eine separate plist-Datei benötigt. Der Aufbau ist relativ einfach, zur Erstellung werden folgende Angaben benötigt:

  1. Die abzufragende e-Mailadresse, bspw. Test@Mailinator.com
  2. Ein sinnvoller Name des Jobs, bspw. Mailinator.Test
  3. Name des Skriptes und sein Ablageort, bspw. /Users/Loginname/bin/Mailinatorabfrage
  4. Der zeitliche Abstand in dem das Skript ausgeführt werden soll in Sekunden, bspw. 3600 (= stündlich)

Ausgehend von diesen Annahmen kann mit jedem beliebigen Texteditor die plist erstellt werden:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>KeepAlive</key>
 <false/>
 <key>Label</key>
 <string>Mailinator.Test</string>
 <key>ProgramArguments</key>
 <array>
  <string>/Users/Loginname/bin/Mailinatorabfrage</string>
  <string>Test@mailinator.com</string>
 </array>
 <key>RunAtLoad</key>
 <true/>
 <key>StartInterval</key>
 <integer>3600</integer>
</dict>
</plist>

Die Datei jetzt noch als reinen Text unter dem Namen »Mailinator.Test.plist« in »~/Librqary/LaunchAgents« speichern.

Die Angaben unter <array> sind übrigens nichts anderes als ein Skriptaufruf im Terminal mit Parameter:

#:~/bin>Mailinatorabfrage Test@mailinator.com

Ab dem nächsten Neustart wird dann jede Stunde dieses Skript ausgeführt. Eleganter steuert man es aber über die Kommandozeile. Jeweils eines der nachfolgenden (selbsterklärenden ?) Kommandos im Terminalfenster aufrufen:

#:~/Library/LaunchAgents>launchctl load Mailinator.Test.plist
#:~>launchctl start Mailinator.Test
#:~>launchctl list Mailinator.Test
#:~>launchctl stop Mailinator.Test
#:~/Library/LaunchAgents>launchctl unload Mailinator.Test.plist
#:~>launchctl help

Wie auch bei anderen Dingen, sollte man Fairness walten lassen und die automatishe Abfrage nicht unnötig und immerwährend laufen lassen. Der Zeitraum in dem Mails eintreffen können ist ja meist auf wenige Stunden beschränkt. Es ist aber gut geeingnet längere Arbeitspausen oder die Nacht abzudecken.

Wer seine eingehenden Mails nur so Abfragen und speichern will kann das Skript natürlich auch direkt im Terminal aufrufen oder in ein kleines AppleSkript einbetten und per Menü im Finder aufrufen:

tell application "Finder"
 activate
 do shell script "Mailinatorabfrage 'Test@mailinator.com'"
end tell

Labels: , , , , , , ,

#
Kommentare:
Anonymous Anonym meinte um 15:26 Uhr:
Hallo und vielen Dank für dieses nützliche Skript. Nach so etwas hatte ich gesucht. Ich habe das auf meinem Debian Lenny als Bashskript eingerichtet. Eine kleine Anpassung ist aber nötig: Mailinator hat die Bezeichnung von "showmail.jsp" zwischenzeitlich auf "displayemail.jsp" geändert. Wenn man das berücksichtigt, klappt alles wunderbar.

Christoph
Permanentlink des Komentars  
Kommentar veröffentlichen

Neuester Eintrag
Piratenblogger
Glauben ist die mutwillige Nichtbenutzung des Verstandes!
Bundestagswahl 2009: Weg mit dem Gesindel von SPD und C*U!
© 2005-2009, GlobenautDieses Blog wird unterstützt von Blogger.