FAQ #212001
letzte Änderung: 10.6.2010, 10:40 Uhr
Abholen von Emails mit Pullmail
| Technischer Inhalt: |
So holen Sie Emails mit "pullmail" von einem Pop3-Postfach ab und stellen sie lokal (z.B. Ihrem Exchangeserver) zu.
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, daß Emails nicht vom ISP-Postfach abgerufen werden können. Das kann bei Spammails passieren oder auch bei normalen Emails wenn im Header z.B. unerwartete Zeichen stehen oder wenn z.B. ein Zeilenumbruch im "From" steckt.
Pullmail holt dann aus diesem Postfach keine Mails mehr ab (bzw. bleibt immer bei derselben Mail hängen) und es wird ein manueller Eingriff nötig sein, um die Email aus dem Postfach heraus zu holen (z.B. per Webmail auf das Providerpostfach) . 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.
Dennoch ist Pullmail für den temporären Einsatz sehr praktisch, in kleineren Umgebungen (mit den genannten Einschränkungen) auch durchaus für den Dauergebrauch verwendbar.
Abholen der Emails
Das folgende Skript lädt Emails aus einem POP3-Postfach herunter und sendet diese an einen SMTP Server.
Da manchmal Emails hängen bleiben können, wurde eine Email-Benachrichtigung eingebaut, die im Fehlerfall eine Benachrichtigungsmail an den Admin sendet und noch eine, wenn wieder erfolgreich abgeholt werden kann.
-
Laden Sie sich Pullmail herunter und lesen Sie die beigefügte Readme-Datei.
- 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. - 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. - Laden Sie das Skript "pull.bat" herunter und passen Sie die Pfade, das POP3-Login etc. an.
- Testen Sie das Skript ausgiebig :-)
- Richten Sie dann einen geplanten Task ein, der das Skript pull.bat z.B. alle 10 Minuten aufruft.
pull.bat
@echo off @title POP3 Email 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 Email 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" -> 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. > %LOGFILE_CURRENT% echo ------------------------------------ >> %LOGFILE_CURRENT% echo. >> %LOGFILE_CURRENT% %TOOLBINDIR%\unixdate +"%%d.%%m.%%Y %%H:%%M Uhr" >> %LOGFILE_CURRENT% echo. >> %LOGFILE_CURRENT% rem -------- Abholen aller Postfächer -------- rem rem Variante 1: Einzelzuordnung POP3-Postfach <-> Mailserver-Postfach rem pullmail providersrv user pass ^ rem /le /lw /li /t:60 /to:local@domain.de >> %LOGFILE_CURRENT% 2>&1 rem rem Variante 2: Catchall/ Multidrop-Postfach rem Der Provider muß dazu passenden Headereintrag 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 >> %LOGFILE_CURRENT% 2>&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 bereits erfolgt? IF EXIST %LOGDIR%\pullmail_error_state.txt GOTO EMAILWEITER rem Benachrichtigung versenden echo Der Email-Abholer (pullmail) hat Fehler ausgegeben. >> %LOGDIR%\pullmail_error_state.txt echo Ihre Emails werden daher NICHT abgeholt. >> %LOGDIR%\pullmail_error_state.txt %TOOLBINDIR%\blat %LOGDIR%\pullmail_error_state.txt ^ -subject "POP3-Emailabholung: Fehlermeldungen" ^ -to %ADMINEMAIL% ^ -attach %LOGFILE_CURRENT% :EMAILWEITER GOTO ENDE :ALLESOK rem keine Fehlermeldungen; ggf. Benachrichtigungsstatus löschen, rem damit Benachrichtigung nächstes Mal wieder scharfgeschaltet ist. IF NOT EXIST %LOGDIR%\pullmail_error_state.txt GOTO ENDE rem Benachrichtigungsstatus noch vorhanden; Admin informieren, daß jetzt wieder alles ok ist DEL %LOGDIR%\pullmail_error_state.txt %TOOLBINDIR%\blat - -body "Email-Abholer (pullmail) laeuft wieder..." ^ -subject "POP3-Emailabholung: ok" ^ -to %ADMINEMAIL% ^ -attach %LOGFILE_CURRENT% :ENDE rem aktuelles Log an Monatslog anhängen type %LOGFILE_CURRENT% >> %LOGFILE%
