Jump to content

Anhänge aus eMails extrahieren


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

ich stehe vor dem Problem, dass ich aus einem Exchange-Postfach Anhänge exportieren und in einem definierten Ordner ablegen muss. Bei der Ablage müssen die Anhänge auch noch umbenannt werden.

Nach einigen Versuchen habe ich ein funktionierendes Script zustande gebracht, aber nun habe ich das Problem, dass das Script verhältnismäßig lange läuft (z.B. bei einer Mail mit 6 Anhängen fast 10 Minuten) und während der Laufzeit den kompletten virtuellen Server CPU-technisch auslastet.

 

Könnt ihr da vielleicht mal rüberlesen, ob da grobe Fehler drin sind?

Hat jemand noch einen anderen Ansatz als mit dem entsprechenden Benutzer über Outlook zu arbeiten?

 

Vielen Dank

Thorus

##########################################################
$object = New-Object -comobject outlook.application
$namespace = $object.GetNamespace("MAPI")
$folder = $namespace.GetDefaultFolder(6)
$dir = "C:\Technik\extrahiert"
$dir_ready = "C:\Technik"
##########################################################
#Check if folder exist
if( -not (Test-Path $dir) )
{
   New-Item $dir -type directory
}
#Set timestamp to logfile
Get-Date | Out-File -FilePath "C:\Logfiles\extract.log" -append
#Check every mail for attachments and copy them to $dir. Write all filenames to logfile and move all mails to trash.
$folder.Items | foreach {$SendName = $_.SenderName
    $_.attachments | foreach {
		$attachName = $_.filename
		If ($attachName.Contains("jpg")) {
        (get-content "C:\Logfiles\extract.log") | where {$_ -ne ""} | out-file "C:\Logfiles\extract.log"
        #Create entry in logfile
		Write-Output $_.filename | Out-File -FilePath "C:\Logfiles\extract.log" -append
		#Write File to filesystem
		$_.saveasfile((Join-Path $dir $attachName))
				
   }
   }
#Rename Files
   $files = dir $dir\*.jpg

foreach ($item in $files)
{
	#Split filename on blank
	$fid = $item.Name.split(" ")

	#fill fid2 up to 7 digits
	#count actual digits
	$mo = $fid[2] | Measure-Object -Character
	$count = $mo.Characters

	while ($count -lt 7) 
	{
		$fid[2] = "0" + $fid[2]
		$mo = $fid[2] | Measure-Object -Character
		$count = $mo.Characters
	}

	#Change format of items LastWriteTime
	$time = $item.LastWriteTime
	$time = $time.ToString("_yyyyMMdd_HHmmss_")

	#Build new filename
	$newname = $fid[0] + $time + $fid[2]

	#Rename item 
	$item | Rename-Item -NewName $newname
}

   $files = dir $dir\*.jpg	
   Move-Item $files $dir_ready
   $_.Delete()
}

#Stop all processes of user konfigseiten
$processes = Get-WmiObject win32_process | Select-Object ProcessID,Name,@{n=’Owner‘;e={$_.GetOwner().User}}
foreach ($p in $processes)
{
    if ($p.Owner -eq „konfigseiten“)
    {
        if ($p.Name -eq „outlook.exe“)
        {
            stop-process -id $p.ProcessID -Force

        }
    }    
}
Link zu diesem Kommentar

Moin,

nur so als Hinweis für einen anderen Ansatz.

Ein Tool wie Exchange Rules Pro (https://www.codetwo.de/exchange-rules-pro/) macht so etwas nebenbei mit. Ganz ohne Programmieraufwand und einen (fehleranfälligen) Outlook-Client für so etwas missbrauchen zu müssen!

 

Gruß

Dirk

bearbeitet von monstermania
Link zu diesem Kommentar

Dies kannst du über eine Regel steuern (Ausführen von Skripten).

 

Probiere es mal hiermit:

Public Sub saveAttachtoDisk (itm As Outlook.MailItem) 
    Dim objAtt As Outlook.Attachment 
    Dim saveFolder As String Dim dateFormat
    dateFormat = Format(itm.ReceivedTime, "yyyy-mm-dd H-mm")
    saveFolder = "C:\Temp"
    For Each objAtt In itm.Attachments
        objAtt.SaveAsFile saveFolder & "\" & dateFormat & objAtt.DisplayName
    Next
End Sub
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...