ulfonso
Goto Top

Ohne Outlook und Co Anhänge aus vielen gespeicherten Mails .eml rauskopieren

Hallo, in einem Ordner liegen mehrere Unterordner (ca. 350 Stück), in denen wieder mehrere MSG1.eml, MSG2.eml liegen. Die .eml enthalten meist mehrere Anhänge - und genau um die geht es. Die Dateinamen der Anhänge haben manchmal auch den gleichen Namen. Ich suche eine Möglichkeit, diese Anhänge alle in einem einzigen Ordner zu kopieren, trotz eventueller Namensgleichheit. Ich habe 2 Probleme: Wie bekommt man die Anhänge aus der eml? Natürlich ohne Outlook, weil da müsste ich jede eml einzeln öffnen und die Anhänge speichern - das sind tausende!
Ich denke das ist auch eine Sache, welche entwickelt werden müsste. Ansatzweise habe ich schon per PHP, C und Visual Basic etwas probiert, bisher erfolglos.
Hat jemand eine Idee, einen Lösungsansatz oder vielleicht eine kleines Tool ? Der EML Viewer kann nicht mit gleichen Dateinamen umgehen, der überschreibt die vorhanden...

Vielen Dank, Ulfonso

Content-Key: 311203

Url: https://administrator.de/contentid/311203

Printed on: April 25, 2024 at 00:04 o'clock

Member: Kraemer
Kraemer Jul 29, 2016 at 08:51:42 (UTC)
Goto Top
Moin,

ich würde es einmal hiermit versuchen.

Gruß Krämer
Member: Ulfonso
Ulfonso Jul 29, 2016 at 09:15:41 (UTC)
Goto Top
Danke für den Tipp, aber ich kann damit auch nicht die Anhänge aus mehreren eml in verschiedenen Ordnern zugleich rauskopieren. Es scheint zwar so, durch Gruppieren, aber wenn ich durchzähle stimmt das nicht.
Trotzdem Danke und beste Grüße
Member: Kraemer
Kraemer Jul 29, 2016 at 09:22:53 (UTC)
Goto Top
Da das nette Programm Kommandozeilenaufrufe beherrscht, kannst du in Kombination mit diesem Thread das problemlos lösen.

Gruß Krämer
Mitglied: 129813
129813 Jul 29, 2016 updated at 09:38:26 (UTC)
Goto Top
Hi.
Sure you can do that within Outlook and VBA, just import all mails into outlook, than you can iterate over all mails check them for attachments (Attachments-Property) extract them, then extract the attachments with the commandline-tool to a temp directory and then copy them into one directory (when a file with the same name exists, append a counting number with a while loop).

Regards
Member: colinardo
colinardo Jul 29, 2016, updated at Aug 01, 2016 at 13:00:24 (UTC)
Goto Top
Hallo zusammen,
das geht auch mit Bordmitteln und Outlook COM-Automation.

Hier ein passendes Powershell-Skript (VBA/VBS hatte ich gerade keine Böcke face-smile)
# Ordner der die EML-Dateien enthält
$rootFolder = 'D:\Mails'  
# Ordner in den die Attachments kopiert werde
$attachmentFolder = 'D:\Attachments'  
# Outlook COM-Object holen
[void][reflection.assembly]::LoadWithPartialName("microsoft.visualbasic")  
$ol = [microsoft.visualbasic.interaction]::GetObject($null,"Outlook.Application")  
if (!$ol){$ol = New-Object Outlook.Application}
# Für jede EML-Datei im Ordner (inkl. Unterordner)
gci $rootFolder -Filter *.eml -recurse | ?{!$_.PSIsContainer} | %{
    # öffne die EML-Datei mit Outlook
    start-process outlook.exe -ArgumentList "/eml `"$($_.FullName)`""  
    # warten bis inspector die mail geöffnet hat
    while (!$ol.ActiveInspector().CurrentItem){sleep .2}
    # mail referenzieren
    $mail = $ol.ActiveInspector().CurrentItem
    # Attachments extrahieren
    $mail.Attachments | ?{$_.FileName -ne ''} | %{  
        $name = $_.FileName
        # prüfe ob attachment schon im Zielordner existiert. Falls ja hänge einen Zufallswert in Klammern an den namen 'Attachment(xxxxx).Extension' 
        while((Test-path "$attachmentFolder\$name")){  
            $name = "$([System.IO.Path]::GetFileNameWithoutExtension($name))($([System.IO.Path]::GetRandomFileName().split('.')))$([System.IO.Path]::GetExtension($name))"  
        }
        write-host "Speichere Attachment mit dem Namen '$($_.FileName)' als '$("$attachmentFolder\$name")'" -F Green  
        # Attachment speicern
        $_.SaveAsFile("$attachmentFolder\$name")  
    }
    # Mail schließen
    $mail.Close($false) | out-null
}
Grüße Uwe

Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate

Tags: EML, Outlook
Member: Ulfonso
Ulfonso Aug 01, 2016 at 12:59:22 (UTC)
Goto Top
Hallo Uwe,
super, deine Powershell-Lösung lief sofort durch! Vielen Dank!
Danke auch an die anderen Teilnehmer!
VG Ulfonso
Member: colinardo
colinardo Aug 01, 2016 updated at 13:02:47 (UTC)
Goto Top
Schön face-smile.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.