download
VBA Makro (Visual Basic for Applications) für Outlook 2003 zum extrahieren (speichern Anhänge als Datei) von Anhängen eines MailItem ins Filesystem (Laufwerk Pfad Dateiname). Die Anhänge werden anschliessend im Outlook (Exchange) in der Mail gelöscht - in einem neuen Anhang zur Mail wird aber ein (anklickbarer) Verweis mit dem Dateinamen hinterlegt - der Body (als Nur-Text) und die wesentlichen Header werden ebenfalls dokumentiert
Installation
- in Outlook 2003 Alt+F11 (VBA Editor)
- Textdownload (Sub... End Sub) z.B. in Modul1 kopieren (ggf. Doppelklick links auf Name, rechts reinkopieren)
- den Pfadnamen anpassen (und was sonst nicht gefällt, suche hierzu alle Kommentarzeilen mit "§§§" im Source) und speichern
- Makro am besten in eine Symbolleiste plazieren (sonst jeweils Alt+F8)
Den Pfadnamen sucht man im Makro nach folgender Zeile:
'Hier wird im Dialog nach dem Ort gefragt wo gespeichert werden soll - muss schon existieren
Wenn man diesen Pfad ohnehin nie ändert, ersetze man die ganze Folgezeile durch eine simple
Zuweisung anstelle jedesmal eine Dialogbox aufpoppen zu lassen, z.B.:
myOrt = "d:/user/juergen/Archive/Outlook/Anlagen/"
Anwendung
- Mails mit/ohne Anhänge markieren
- Makro in Symbolleiste anklicken (bzw. via Alt+F8 starten wenn man Symbolleiste nicht angepasst hat)
- Sicherheitsmeldungen bestätigen (je nach Anzahl Mails 1 Minute oder mehr erlauben)
Arbeitsweise
- bearbeitet alle in Outlook markierten Mails (die Anlagen enthalten)
- Anlagen werden ins Filesystem extrahiert und in Outlook gelöscht
- es wird eine neue Anlage(!) zur Mail ergänzt. Diese enthält (einfaches HTML-Dokument) die wichtigsten Infos zur Mail (From, To, Cc, Subject, Größe gesamt, gesendet/empfangen, Body als Nur-Text) sowie anklickbare Links zu den extrahierten Anlagen
Zumindest für Nur-Text-Mails könnte man die Hinweise zu extrahierten Anlagen auch einfach im Body der Ursprungsmail hinterlegen (einfach myItem.Body ergänzen). Für HTML/RichText-Mails ist mir das nicht gelungen (die Felder lassen sich zwar ändern, aber die Msg konnte nicht mehr gespeichert werden (als zur Nur-Text-Mail umgewandelte Nachricht schon). Liegt an der "weak Object Reference" für myItem vermute ich. Wahrscheinlich wäre nur eine Kleinigkeit zu ändern gewesen - jetzt ist es mittels externer Anlage gelöst...
Wen die Sicherheitsabfrage des Makros nervt
- Man kann seine eigenen VBA Makros signieren. Dazu muss man zunächst ein passendes Zertifikat haben (oder lokal selbst erzeugen) und damit in der VBA-Entwicklungsumgebung das Makro signieren. Nach jeder Änderung am Source ggf. wieder neu... Auf anderen Rechnern muss man die ganze Prozedur ebenfalls wiederholen...
- bessere Lösung: Als Add-In programmieren, z.B. in C++ - da gibts dann keine Sicherheitsabfragen mehr (warum auch immer)
Hinweise
- normalerweise werden die Anhänge mit ihrem Originalnamen (Mini-Prüfung auf "schädliche" Zeichen anhand Blacklist) und einem Datumspräfix (Entstehungs-Timestamp der Mail) im Verzeichnis myOrt abgelegt: ''laufwerk:/pfad/''jjjjmmtt_hhmmss-orginalname.endung
- u.U. legt man eher je Jahr ein eigenes Verzeichnis an (oder je Sender oder je Anlagentyp (Dateiendung) oder...)
- evtl. filtert man auch via Anlagengröße (kleine Anlagen bleiben im Mailstorage, nur große Files werden extrahiert)...
- Probleme gibts bei HTML-Mails (eingebundene aber jetzt extrahierte Bilder werden anschliessend nicht mehr dargestellt!)
- am Anfang des Makros steht noch ungefähr drin, wie man es als Script für die Outlook Regeln einsetzen kann (Extras - Regeln und Benachrichtigungen). Da nervt dann aber die Sicherheitsabfrage (d.h. man müsste signieren) - und ich habe es auch nur als Nur-Client-Regel hinbekommen (was im Normalfall ausreichen sollte)...
- natürlich ist das Verzeichnis mit den Dateien genausogut zu sichern wie der Mailstorage (und umgekehrt)...
14.10.2008 ↸