Benutzer mit den meisten Antworten
Anhang löschen nachdem die Mail versand wurde

Frage
-
Hallo zusammen,
ich brauche etwas Hilfe, da ich irgendwie seit tagen auf dem Schlauch stehe und einfach nicht weiter komme.
Meine suche im Netz hat leider nicht zum gewünschten Erfolg beigetragen....
Die Aufgabe ist:
1.Prüfen im Verzeichnis ob PDF Dateien liegen und diese dann als Anhang per Mail verschicken. <- funktioniert
2. E-Mail Empfänger aus dem Dateinamen der PDF lesen und verwenden <- funktioniert
3. Danach die PDF Dateien aus dem Verzeichnis löschen. <- Fehlermeldung
Ich möchte es gern in einem Skript lösen aber folgende Meldung erhalte ich:
Remove-Item : Das Element D:\Arbeit\pdf\outgo\test@tester.de.1pdf kann nicht entfernt werden: Der Prozess kann nicht auf die Datei "D:\Arbeit\pdf\outgo\test@tester.de.1pdf" zugreifen, da sie von einem
anderen Prozess verwendet wird.
In C:\Users\tester\Desktop\AnhangVersenden.ps1:51 Zeichen:1
+ Remove-Item $Attachment
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (D:\Arbeit\pdf\outgo\test@tester.de.1pdf:FileInfo) [Remove-Item], IOException
+ FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommandDas ist hier mein Skript...
# Get Hostname $ServerName = [System.Net.Dns]::GetHostName() ############################################## # Start from here to change ############################################## # E-Mail Variables $SMTP = "mail.tester" $Port = "25" $From = "abc@tester.de" #Arbeitsverzeichnis $Dateifilter = "D:\Arbeit\pdf\outgo\ " #Subject $subject="Meldung vom " + $ServerName + " @ " + $(Get-Date).ToString('dd/MM/yyyy HH:mm') + " Uhr" #Body File must be in HTML $BodyFile = Get-content D:\Arbeit\pdf\body.txt ############################################## # Until here!!! ############################################## # E-Mail initialize... ForEach($filename in Get-ChildItem -Force $Dateifilter -Name) { $Attachment = $Dateifilter+$filename $SmtpClient = new-object System.Net.Mail.SmtpClient $Mail = New-Object System.Net.Mail.MailMessage $SmtpClient.Host = "$SMTP" $Mail.from = "$From" $Mail.To.add([io.path]::GetFileNameWithoutExtension($filename)) $SMTPClient = New-Object Net.Mail.SmtpClient($SMTP, $Port) $SMTPClient.EnableSsl = $true # E-Mail content... $Mail.Subject = $subject $Mail.Body = "$BodyFile" $Mail.IsBodyHtml = $true $Mail.Attachments.Add($Attachment) $Mail.Priority = "Normal" # Sending E-Mail... $SmtpClient.Send($Mail) Remove-Item $Attachment -Debug }
Danke vorab für eure Hilfe!
Antworten
-
Hallo,
hier das soltle auch gehen, habe ich gerade erfolgreich getestet, vor dem REMOVE-ITEM folgendes einbauen.
$mail.Dispose()
Hier gibt es Lesestoff zu dem Thema:
Click
Beste Gruesse
brima- Bearbeitet brima Donnerstag, 3. März 2016 11:52
- Als Antwort vorgeschlagen Jan-Henrik DamaschkeMVP Freitag, 4. März 2016 11:25
- Als Antwort markiert Denniver ReiningMVP, Moderator Freitag, 4. März 2016 21:33
Alle Antworten
-
Hallo,
das koennte daran liegen das das versenden der Mail nicht fertig ist, wenn der Remove-Item zum Zuge kommt, dann könntst Du mit
Start-Sleep -seconds XX
eine Pause von X Sekunden einbauen.
Beste Gruesse
brima -
Hallo birma,
ich habe es gerade erneut getestet leider ohne Erfolg.
Im Grunde ist egal wie lange ich warte, es sieht so aus als würde es an der Sitzung liegen.
Solange die Sitzung noch offen ist kann weder gelöscht, verschoben oder umbenannt werden...
Sehr komisch...
Beste Grüße
Sascha
-
-
Hallo,
hier das soltle auch gehen, habe ich gerade erfolgreich getestet, vor dem REMOVE-ITEM folgendes einbauen.
$mail.Dispose()
Hier gibt es Lesestoff zu dem Thema:
Click
Beste Gruesse
brima- Bearbeitet brima Donnerstag, 3. März 2016 11:52
- Als Antwort vorgeschlagen Jan-Henrik DamaschkeMVP Freitag, 4. März 2016 11:25
- Als Antwort markiert Denniver ReiningMVP, Moderator Freitag, 4. März 2016 21:33
-
Hallo,
das ist perfekt genau danach habe ich gesucht, vielen Dank!
Für alle die vor das gleiche Problem stehen sollten anbei das komplette Skript:
# Get Hostname $ServerName = [System.Net.Dns]::GetHostName() ############################################## # Start from here to change ############################################## # E-Mail Variables $SMTP = "mail.tester" $Port = "25" $From = "abc@tester.de" #Arbeitsverzeichnis $Dateifilter = "D:\Arbeit\pdf\outgo\ " #Subject $subject="Meldung vom " + $ServerName + " @ " + $(Get-Date).ToString('dd/MM/yyyy HH:mm') + " Uhr" #Body File must be in HTML $BodyFile = Get-content D:\Arbeit\pdf\body.txt ############################################## # Until here!!! ############################################## # E-Mail initialize... ForEach($filename in Get-ChildItem -Force $Dateifilter -Name) { $Attachment = $Dateifilter+$filename $SmtpClient = new-object System.Net.Mail.SmtpClient $Mail = New-Object System.Net.Mail.MailMessage $SmtpClient.Host = "$SMTP" $Mail.from = "$From" $Mail.To.add([io.path]::GetFileNameWithoutExtension($filename)) $SMTPClient = New-Object Net.Mail.SmtpClient($SMTP, $Port) $SMTPClient.EnableSsl = $true # E-Mail content... $Mail.Subject = $subject $Mail.Body = "$BodyFile" $Mail.IsBodyHtml = $true $Mail.Attachments.Add($Attachment) $Mail.Priority = "Normal" # Sending E-Mail... $SmtpClient.Send($Mail) $mail.Dispose() Remove-Item $Attachment –recurse }
Danke nochmal für die schnelle Hilfe!
Beste Grüße
Sascha