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-ID: 311203

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

Ausgedruckt am: 25.11.2024 um 23:11 Uhr

Kraemer
Kraemer 29.07.2016 um 10:51:42 Uhr
Goto Top
Moin,

ich würde es einmal hiermit versuchen.

Gruß Krämer
Ulfonso
Ulfonso 29.07.2016 um 11:15:41 Uhr
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
Kraemer
Kraemer 29.07.2016 um 11:22:53 Uhr
Goto Top
Da das nette Programm Kommandozeilenaufrufe beherrscht, kannst du in Kombination mit diesem Thread das problemlos lösen.

Gruß Krämer
129813
129813 29.07.2016 aktualisiert um 11:38:26 Uhr
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
colinardo
colinardo 29.07.2016, aktualisiert am 01.08.2016 um 15:00:24 Uhr
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
Ulfonso
Ulfonso 01.08.2016 um 14:59:22 Uhr
Goto Top
Hallo Uwe,
super, deine Powershell-Lösung lief sofort durch! Vielen Dank!
Danke auch an die anderen Teilnehmer!
VG Ulfonso
colinardo
colinardo 01.08.2016 aktualisiert um 15:02:47 Uhr
Goto Top
Schön face-smile.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.