schneerunzel
Goto Top

Powershell: Ausnahme beim Aufrufen von "Save"

Hallo zusammen,


ich habe eine Powershell Script welche mit Hilfer der IMAPX.ddl E-Mailanhänge aus einem Postfach abholt und diese abspeichert.
Bei meinen ersten Testdaten hat das auch funktioniert, doch nun habe ich eine Datei bekommen, bei der mir das Script folgendes sagt:

Ausnahme beim Aufrufen von "Save" mit 2 Argument(en): "Die Eingabe ist keine gültige Base-64-Zeichenfolge, da sie ein Nicht-Base-64-Zeichen, mehr als zwei Leerstellen oder in den Leerstellen ein Zeichen enthält, das ungültig ist. "

Bei den zuspeichernden Anhängen handelt es sich um PDF Rechnungen, die dann ins Rechnungsprgramm zur Bearbeitung importiert werden.

Das Script tut an dierser Stelle Folgendes:
# wenn es Nachrichten gibt
    if($messages.Count -gt 0){
        # Für jede Nachricht
        foreach ($m in $messages){
            Write-Host $m.subject
            #Prüfen der Anzahl der Anhänge. Die Anzahl muss größer/gleich 1 sein.
            if ($m.Attachments.Count -ge 1) {
                $cntatt = 0
				#Zählen der Anhänge die auf PDF enden. 
                foreach($a in $m.Attachments){
                    if ($a.FileName.Substring($a.FileName.Length -3).ToUpper() -eq "PDF") {  
                        $cntatt = $cntatt + 1
                    }
                }
				#Nur wenn 1 PDF Anhang an der Mail ist wird die Mail bearbeitet
                if ($cntatt -eq 1) {
                    # Ist das Attachment aus einem Grund noch nicht heruntergeladen, lade es
                    if (!$a.Downloaded){$a.Download()}
                    # Zieldateiname  = Dateiname des Original-Attachments
                    $targetfile = $a.FileName; $cnt = 1
                    # Sollte bereits eine Datei mit diesem Zielnamen im Download-Ordner existieren hänge an den Namen so lange eine
                    # Zahl an _NN bis der Name frei ist.
                    while(Test-Path "$DOWNLOADPATH\$targetfile"){  
                        $targetfile = "$([IO.Path]::GetFileNameWithoutExtension($a.Filename))_$("{0:00}" -f $cnt)$([IO.Path]::GetExtension($a.Filename))"  
                        $cnt++
                    }
                    write-host "Speichere Anhang '$targetfile' ($("{0:F3} MB" -F ($a.FileSize / 1MB))) ... " -NoNewline -ForegroundColor Green  
                    $a.Save($DOWNLOADPATH,$targetfile)

Die Fehlermeldung erscheint bei der letzten Zeile.

Hat jemand eine Idee wodran das liegen könnte und wie man das Problem lösen kann?

Vielen Dank.

Content-ID: 464328

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

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

colinardo
Lösung colinardo 20.06.2019 aktualisiert um 10:38:41 Uhr
Goto Top
Servus,
das ist ein Bug der DLL. Der Attachment-Parser ist fehlerhaft und versagt z.B. bei Nachrichten mit einem Mix aus echten Anhängen und Inline-Attachments.
Das Projekt wird so gut wie nicht mehr gepflegt, deswegen rate ich zum Umstieg z.B. auf Mailkit (http://www.mimekit.net) oder die diversen anderen .NET Bibliotheken.

Grüße Uwe
colinardo
colinardo 21.06.2019 aktualisiert um 15:41:41 Uhr
Goto Top
Hallo Schneerunzel,
da der alte Post sehr viel Feedback hat, habe ich ergänzend mit der Mailkit-Bibliothek ein ähnliches Beispiel im alten Thread gepostet der die Probleme mit dem Attachment-Handling nicht aufweist.

Grüße Uwe
colinardo
colinardo 24.06.2019 um 10:06:13 Uhr
Goto Top
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.
schneerunzel
schneerunzel 25.06.2019 um 21:27:14 Uhr
Goto Top
Hallo colinardo,

Vielen Dank für den Hinweis.
Da das ganze zeitkritisch wurde habe ich auf ein anderes Hilfsmittel, mit dem ich besser vertraut bin zurückgegriffen und das Script mit Python geschrieben