Listbox als txt mit e-mail versenden

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Manschula.

    Listbox als txt mit e-mail versenden

    Hallo Miteinander,

    Ich würde gerne ein "Logfile" per e-mail senden.

    Normalerweise versende ich mail's so:

    VB.NET-Quellcode

    1. Dim smtpServer As New SmtpClient()
    2. Dim mail As New MailMessage()
    3. smtpServer.Credentials = New Net.NetworkCredential("XxX@gmail.com", "password")
    4. smtpServer.Port = 587
    5. smtpServer.Host = "smtp.gmail.com"
    6. smtpServer.EnableSsl = True
    7. mail = New MailMessage
    8. mail.From = New MailAddress("von@gmail.com")
    9. mail.To.Add("xxx@empfänger.ch")
    10. mail.Subject = "Backup HD"
    11. mail.Body = "Harddisk Ist zu " & la_proz.Text & " voll!"
    12. smtpServer.Send(mail)


    Jedoch würde ich gerne nicht das der Inhalt der Listbox als Text versendet wird, sondern als .txt Angehänt wird.
    Dies währe auch einfach indem ich das .txt file zuerst speichern würde, dies möchte ich aber auch vermeident.

    Mein Wunsch:

    E-mail mit logfile als .txt versenden ohne die .txt auf dem rechner Speichern zu müssen.


    Edit by Manschula: Bitte darauf achten, dass im richtigen/passenden Unterforum gepostet wird. E-Mail --> Thema aus dem Hauptforum verschoben

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

    Hey,

    schau dir mal "Attachments" (engl. für Anhang) an:

    VB.NET-Quellcode

    1. Dim mail As New Net.Mail.MailMessage()
    2. Dim Attach As New System.Net.Mail.Attachment("PFAD")
    3. mail.Attachments.Add(Attach)

    Ein vorheriges Erstellen/Speichern wirst du mit dieser Methode aber nicht vermeiden können.

    Gruß Manschula

    Manschula schrieb:


    Ein vorheriges Erstellen/Speichern wirst du mit dieser Methode aber nicht vermeiden können.

    Gruß Manschula
    Ja, daran hab ich auch schon gedacht aber ich würde es gerne umgehen :)
    Hallo, ich wollte gerade dies mit der .txt Speichern, senden und wieder löschen lancieren.

    Jedoch kommt beim löschen immer die meldung das ich kein Zugriff hätte da die Datei noch verwendet wird.

    Kann mir jemand "zeigen" wie ich eine Listbox korrekt in ein .txt file speichere und nach dem senden wieder löschen?

    Mein Code Bisher:

    Speichern:

    VB.NET-Quellcode

    1. Sub logs_spiecher()
    2. Dim text As String = ""
    3. For Each Litem As String In ListBox1.Items
    4. text &= vbCrLf & Litem
    5. Next
    6. IO.File.WriteAllText(Application.StartupPath & "\logfile.txt", text)
    7. End Sub




    Senden:

    VB.NET-Quellcode

    1. Dim Attach As New System.Net.Mail.Attachment(Application.StartupPath & "\logfile.txt")
    2. Dim smtpServer As New SmtpClient()
    3. Dim mail As New MailMessage()
    4. smtpServer.Credentials = New Net.NetworkCredential("absender@gmail.com", "passwort")
    5. smtpServer.Port = 587
    6. smtpServer.Host = "smtp.gmail.com"
    7. smtpServer.EnableSsl = True
    8. mail = New MailMessage
    9. mail.From = New MailAddress("absender@gmail.com")
    10. mail.To.Add("empfänger")
    11. mail.Subject = "Backup HD"
    12. mail.Body = "Backup von " & was & " abgeschlossen!"
    13. mail.Attachments.Add(Attach)
    14. smtpServer.Send(mail)



    löschen:

    VB.NET-Quellcode

    1. My.Computer.FileSystem.DeleteFile(Application.StartupPath & "\logfile.txt")


    Edit by Manschula: Es gibt eine Bearbeiten-Funktion! Diese bitte auch verwenden! --> Beiträge zusammengefügt

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

    Du kannst die Datei erst nach 10 Sekunden löschen lassen!
    Obs funktioniert weiß ich nicht...

    Aber solang die Email gesendet wird, kann er die Datei nicht löschen!

    Benutz das:

    VB.NET-Quellcode

    1. System.Threading.Thread.Sleep(10000)

    um die Datei nach 10 Sekunden zu löschen!

    Edit:

    Ok geht anders:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim WithEvents client As New Net.Mail.SmtpClient("smtp.gmail.com")
    3. Private Sub client_SendCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles client.SendCompleted
    4. My.Computer.FileSystem.DeleteFile(Application.StartupPath & "\logfile.txt")
    5. End Sub
    6. End Class

    Email senden geht kürzer:

    VB.NET-Quellcode

    1. Dim myClient As New Net.Mail.SmtpClient("smtp.gmail.com")
    2. myClient.Credentials = New Net.NetworkCredential("Meine Email", "Mein Email Pw")
    3. myClient.Send("Meine Email", "ZielEmail", "Betreff-Hallo", "zusendenderText")

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

    Das Problem ist, das ich das Programm auf einem entfernten Rechner habe, dieser erledigt nach einander Backups, nach jedem abgeschlossenen Backup wird ein Logfile gesendet, dann kann ich das Programm nicht schlissen...

    Das Problem liegt definitiv an dem E-mail client, wenn ich die Datei erstellenlasse kann ich sie gleich wieder löschen.

    Gibt es noch eine andere Variante e-mails mit anhang zu versenden?


    Danke für Deine mühe.
    Das Programm soll alles selber machen, ich möchte nur per mail erfahren falls etwas schief gegangen ist. Da ich nicht immer Zeit habe nachzuschauen ob jetzt ein logfile geschrieben wurde oder nicht...

    Es muss doch irgendwie möglich sein Dies zu versenden und anschlissend zu löschen...

    Bei Access kann ich ja auch aus einem bericht ein pdf schicken ohne das pdf zuerst zu speichern, daher denke ich es müsste in vb auch möglich sein mit .txt datieen
    Du sendest mit der .Send Methode die E-Mail nicht asyncron. Dh das Programm wartet solange bis das Mail gesendet wurde (oder nicht -> Fehler) und führt erst nachher die nächste Codezeile aus.
    Deine "Attach" Variable wird die Datei in Verwendung haben.

    Diese Klasse bietet jedoch eine .Dispose Methode an welche die Klasse "freigibt" und somit sollte die Datei nicht mehr im Zugriff sein.
    Aus deinem Code oben ergäbe sich dann:

    VB.NET-Quellcode

    1. Dim Attach As New System.Net.Mail.Attachment(Application.StartupPath & "\logfile.txt")
    2. Dim smtpServer As New SmtpClient()
    3. Dim mail As New MailMessage()
    4. smtpServer.Credentials = New Net.NetworkCredential("absender@gmail.com", "passwort")
    5. smtpServer.Port = 587
    6. smtpServer.Host = "smtp.gmail.com"
    7. smtpServer.EnableSsl = True
    8. mail.From = New MailAddress("absender@gmail.com")
    9. mail.To.Add("empfänger")
    10. mail.Subject = "Backup HD"
    11. mail.Body = "Backup von " & was & " abgeschlossen!"
    12. mail.Attachments.Add(Attach)
    13. smtpServer.Send(mail)
    14. Attach.Dispose 'Attach freigeben
    15. System.IO.File.Delete(Application.StartupPath & "\logfile.txt") 'datei löschen


    Dieser Code ist ungetestet aber sollte so in der Richtung funktionieren.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

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