none
Anhang löschen nachdem die Mail versand wurde RRS feed

  • 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.RemoveItemCommand

    Das 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!

    Mittwoch, 2. März 2016 15:32

Antworten

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


    • Bearbeitet brima Mittwoch, 2. März 2016 15:54
    • Als Antwort markiert cykilly Donnerstag, 3. März 2016 09:46
    • Tag als Antwort aufgehoben cykilly Donnerstag, 3. März 2016 09:47
    Mittwoch, 2. März 2016 15:53
  • Hallo,

    danke für den Tipp werde es morgen früh testen.

    Beste Grüße

    Sascha

    Mittwoch, 2. März 2016 16:01
  • 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

    Donnerstag, 3. März 2016 09:46
  • Hallo,

    du kannst zum versenden auch das CMDLet

    Send-MailMessage

    nutzen, anstelle von dem Bauen eines SMTP-Client Objects, das macht das Script dann auch deutlich kleiner.

    Beste Gruesse
    brima



    • Bearbeitet brima Donnerstag, 3. März 2016 10:59
    Donnerstag, 3. März 2016 10:53
  • 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


    Donnerstag, 3. März 2016 11:50
  • 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

    • Als Antwort markiert cykilly Freitag, 4. März 2016 09:03
    • Tag als Antwort aufgehoben cykilly Freitag, 4. März 2016 09:03
    Freitag, 4. März 2016 09:02