Mail versenden mit Dateianhang -> Probleme mit Datei nach Versand

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Osiris85.

    Mail versenden mit Dateianhang -> Probleme mit Datei nach Versand

    N'abend,

    ich einem meiner Projekte versende ich eine Datei per Mail über einen SMTP-Server.
    Die Datei wird während der Laufzeit des Programmes erstellt und nachdem die Datei versendet wurde, soll sie automatisch wieder gelöscht werden.
    Bis zum Versenden funtioniert alles einwandfrei (die Mail kommt auch mit korrektem Anhang im Postfach an), lässt sich die Datei nach dem Versenden nicht mehr löschen.

    Zum Anhängen und Versenden nutze ich folgenden Code:

    VB.NET-Quellcode

    1. Dim AttachmentFile As New Attachment(Application.StartupPath & "\Datei.jpg")
    2. Msg.From = New MailAddress(Me.absender) 'Absenderadresse
    3. Msg.To.Add(Me.empfaenger) 'Empfängeradresse
    4. Msg.Subject = "Automatische Mail mit Anhang" 'Betreff
    5. Msg.Body = "Dies ist eine Mail mit Anhang." 'Nachricht
    6. Msg.Attachments.Add(AttachmentFile) 'Datei anhängen
    7. Smtpsvr.Send(Msg)



    Das Versenden funktioniert genau einmal fehlerfrei: Beim ersten Starten des Programmes. Soll die Datei ein zweites Mal versendet werden (d.h. sie wird normal vorher gelöscht, wenn sie existiert und neu erstellt), bringt er mir ne IOException:
    Der Prozess kann nicht auf die Datei "Datei.txt" zugreifen, da sie von einem anderen Prozess verwendet wird.

    Die IOException verweist auf die Zeile, wo die Datei mit dann mit

    VB.NET-Quellcode

    1. System.IO.File.Delete(Application.StartupPath & "\Datei.jpg")

    gelöscht werden soll.

    Hat jemand ne Idee?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Osiris85“ ()

    Benutze mal folgenden Code:

    VB.NET-Quellcode

    1. Dim Msg As New MailMessage
    2. Dim myCredentials As New System.Net.NetworkCredential
    3. myCredentials.UserName = "Absender: Meine Email"
    4. myCredentials.Password = "Absender: Mein Passwort"
    5. Msg.IsBodyHtml = False
    6. Dim mySmtpsvr As New SmtpClient()
    7. mySmtpsvr.Host = "smtp.web.de"
    8. mySmtpsvr.Port = 25
    9. mySmtpsvr.UseDefaultCredentials = False
    10. mySmtpsvr.Credentials = myCredentials
    11. Try
    12. Dim attachment As New Attachment("Ort")
    13. Msg.From = New MailAddress("Absender: Meine Email")
    14. Msg.To.Add("Empfänger: Der, der die Email erhalten soll")
    15. Msg.Subject = "Betreff"
    16. Msg.Body = "Inhalt"
    17. Msg.Attachments.Add(attachment)
    18. mySmtpsvr.Send(Msg)
    19. MessageBox.Show("E-Mail gesendet.")
    20. Catch ex As Exception
    21. MessageBox.Show(Err.Number & ex.Message & ex.StackTrace.ToString)
    22. End Try


    Beispiel für den Ort:

    Application.StartupPath + "/Daten/bla.txt"

    Es muss ein Ordner angelegt sein und in dem Ordner ist die Datei "bla.txt". ;)

    Dies kann man natürlich beliebig anpassen.

    MfG
    Habs mittlerweile hingekriegt :thumbup: .
    Ich hab den "Senden-Code" einfach um

    VB.NET-Quellcode

    1. AttachmentFile.Dispose()
    2. Msg.Dispose()


    erweitert. Damit funktionierts ;) .

    Edit: Natürlich erst nachdem die Mail gesendet wurde:

    VB.NET-Quellcode

    1. Msg.Attachments.Add(AttachmentFile)
    2. Smtpsvr.Send(Msg)
    3. AttachmentFile.Dispose()
    4. Msg.Dispose()

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Osiris85“ ()