Abholen von E-Mails mit Pullmail

So holen Sie E-Mails mit „pullmail“ von einem Pop3-Postfach ab und stellen sie lokal (z.B. Ihrem Exchangeserver) zu.

Vor- und Nachteile von pullmail

Das Schöne an Pullmail: es ist kostenlos nutzbar und verrichtet meistens tapfer seine Arbeit.
Das Unangenehme daran: es kann – und wird – gelegentlich dazu kommen, dass E-Mails nicht vom Provider-Postfach abgerufen werden können. Das kann bei Spammails passieren oder auch bei normalen E-Mails, wenn im Header z.B. unerwartete Zeichen stehen oder ein Zeilenumbruch im „From“ steckt. Normale E-Mail-Clients haben damit üblicherweise keine Probleme.
Pullmail holt im Fehlerfall keine Mails mehr aus diesem Postfach ab (bzw. bleibt immer bei derselben Mail hängen). Dann ist ein manueller Eingriff nötig, um die E-Mail aus dem Postfach heraus zu holen, z.B. über einen Webmail-Zugang auf das Postfach. Es gehen offenbar keine Mails verloren, lediglich die Abholung wird unterbrochen. Man sollte daher das Ereignisprotokoll im Auge behalten – oder man verwendet eine Benachrichtigung, wie im Skript auf dieser Seite.

Beispiel: Ein Zeilenumbruch im „From“ bereitet Pullmail Probleme

From: "Elektroteile Sonnenschein"
<elektroteile@example.com>

Ohne diesen Zeilenumbruch kann Pullmail dieselbe Mail abholen:

From: "Elektroteile Sonnenschein" <elektroteile@example.com>

Dennoch ist Pullmail für den temporären Einsatz sehr praktisch. In kleineren Umgebungen ist es, mit den oben genannten Einschränkungen, auch durchaus für den Dauergebrauch verwendbar.
Weniger Stress bereiten kommerzielle POP3 Abholer, die weniger fehleranfällig sind und sich nicht durch einen einfachen Zeilenumbruch aus der Bahn werfen lassen.
Die ideale Lösung für die Anbindung Ihres Mailservers an Internet-E-Mail ist jedoch, ganz auf POP3 Abholung zu verzichten. Verwenden Sie stattdessen lieber die direkte E-Mail-Zustellung zur festen IP Ihres Internetzugangs – die Einrichtung dazu ist normalerweise nicht aufwändig.

Abholen der E-Mails

Das folgende Skript lädt E-Mails aus einem POP3-Postfach herunter und sendet diese an einen SMTP Server.
Da manchmal E-Mails hängen bleiben können, wurde eine E-Mail-Benachrichtigung eingebaut, die im Fehlerfall eine Benachrichtigung an den Administrator sendet und noch eine, wenn wieder erfolgreich abgeholt werden kann.

  1. Laden Sie sich Pullmail herunter und lesen Sie die beigefügte Readme-Datei.
    Pullmail.zip
  2. Laden Sie sich „BLAT“ herunter und führen Sie blat -install aus wie in der beigefügten Readme-Datei bzw. in der Programmhilfe beschrieben. Legen Sie „blat.exe“ ins Pullmail-Verzeichnis.
    Blat
  3. Laden Sie sich die UnxUtils herunter und kopieren Sie daraus „date.exe“ und „grep.exe“ ins Pullmail-Verzeichnis. Benennen Sie die „date.exe“ aus dem UnxUtils-Paket in „unixdate.exe“ um.
    unixdate.exe aus dem UnxUtils Paket
    grep.exe aus dem UnxUtils Paket
    Sourceforge: GNU utilities for Win32 (UnxUtils)
  4. Laden Sie das Skript „pull.bat“ herunter (oder verwenden Sie das Skript auf dieser Seite mit Kopieren/ Einfügen) und passen Sie die Pfade, das POP3-Login etc. an.
    pull.bat
  5. Testen Sie das Skript ausgiebig :-)
  6. Richten Sie dann einen geplanten Task ein, der das Skript pull.bat z.B. alle 10 Minuten aufruft.

Das Abhol Skript pull.bat

@echo off
@title POP3 E-Mail-Abholung (pullmail)
@color 1F

rem ##################################################
rem # POP3-Abhol-Skript mit Pullmail (v 2005091302) #
rem # www.netzprisma.de #
rem ##################################################

rem ------------ Einstellungen ------------

rem Logfile-Verzeichnis
set LOGDIR=c:\admin\pullmail\log

rem Verzeichnis mit "pullmail.exe"
set BINDIR=c:\admin\pullmail

rem Verzeichnis mit Tools (blat,grep,unixdate)
set TOOLBINDIR=c:\admin\pullmail

rem E-Mail für Benachrichtgungen
set ADMINEMAIL=meinadmin@meinedomain.de

rem POP3-Login (bei mehr Postfächern Daten direkt beim Aufruf angeben)
set POP3_SERV=mail01.meinprovider.de
set POP3_USER=meinuser@meinedomain.de
set POP3_PASS=PsstGeheim

rem ---------------------------------------

rem Logname generieren, z.B. "pullmail-2005-09.log" -&gt; eine Logdatei monatlich

rem Zeitstempel-String (z.B. "2005-09") erzeugen
for /f "Tokens=1" %%i in ('%TOOLBINDIR%\unixdate +%%Y-%%m') do set dt=%%i

rem Monatslogdatei und aktuelle Logdatei
set LOGFILE=%LOGDIR%\pullmail-%dt%.log
set LOGFILE_CURRENT=%LOGDIR%\pullmail_current.log
if not exist %LOGDIR% mkdir %LOGDIR%

rem pullmail_curent.log enthält aktuellen Abholzyklus
echo. &gt; %LOGFILE_CURRENT%
echo ------------------------------------ &gt;&gt; %LOGFILE_CURRENT%
echo. &gt;&gt; %LOGFILE_CURRENT%
%TOOLBINDIR%\unixdate +"%%d.%%m.%%Y %%H:%%M Uhr" &gt;&gt; %LOGFILE_CURRENT%
echo. &gt;&gt; %LOGFILE_CURRENT%

rem -------- Abholen aller Postfächer --------
rem
rem Variante 1: Einzelzuordnung POP3-Postfach &lt;-&gt; Mailserver-Postfach
rem pullmail providersrv user pass ^
rem /le /lw /li /t:60 /to:local@domain.de &gt;&gt; %LOGFILE_CURRENT% 2&gt;&amp;1
rem
rem Variante 2: Catchall/ Multidrop-Postfach
rem Der Provider muss dazu passende Headereinträge bereitstellen!!!
rem Die Mails haben einen X-Envelope-To Header, aus dem der Empfänger gezogen wird
rem

%BINDIR%\pullmail %POP3_SERV% %POP3_USER% %POP3_PASS% ^
/le /lw /li /t:90 /r:X-Envelope-To &gt;&gt; %LOGFILE_CURRENT% 2&gt;&amp;1

rem
rem ------------------------------------------

rem Gab es Fehlermeldungen?
rem (keiner dieser Texte soll im Log vorkommen)
type %LOGFILE_CURRENT% | %TOOLBINDIR%\grep ^
--regexp "Unable\ to\ connect" ^
--regexp "command\ failed"
IF ERRORLEVEL 1 GOTO ALLESOK

:FEHLER
rem Ja, es gab Fehlermeldungen

rem Benachrichtigung ist bereits erfolgt?
IF EXIST %LOGDIR%\pullmail_error_state.txt GOTO EMAILWEITER

rem Benachrichtigung versenden
echo Der E-Mail-Abholer (pullmail) hat Fehler ausgegeben. &gt;&gt; %LOGDIR%\pullmail_error_state.txt
echo Ihre E-Mails werden daher NICHT abgeholt. &gt;&gt; %LOGDIR%\pullmail_error_state.txt
%TOOLBINDIR%\blat %LOGDIR%\pullmail_error_state.txt ^
-subject "POP3-E-Mail-Abholung: Fehlermeldungen" ^
-to %ADMINEMAIL% ^
-attach %LOGFILE_CURRENT%

:EMAILWEITER

GOTO ENDE

&nbsp;

:ALLESOK

rem keine Fehlermeldungen; ggf. Benachrichtigungsstatus löschen,
rem damit Benachrichtigung nächstes Mal wieder scharf geschaltet ist.
IF NOT EXIST %LOGDIR%\pullmail_error_state.txt GOTO ENDE

rem Benachrichtigungsstatus noch vorhanden; Admin informieren, dass jetzt wieder alles ok ist
DEL %LOGDIR%\pullmail_error_state.txt
%TOOLBINDIR%\blat - -body "E-Mail-Abholer (pullmail) laeuft wieder..." ^
-subject "POP3-E-Mail-Abholung: ok" ^
-to %ADMINEMAIL% ^
-attach %LOGFILE_CURRENT%

:ENDE

rem aktuelles Log an Monatslog anhängen
type %LOGFILE_CURRENT% &gt;&gt; %LOGFILE%

Weitere Informationen

NPFAQ: Abholen von E-Mails – POP3-Abholer mit hausinternem Mailserver