Bericht in Email Body anzeigen lassen?

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von carwashbuxtehude.

    Danke.
    Ich möchte gerne einen Report als Email versenden.
    Momentan versende ich im Body den Inhalt eines DGV im Email Body.
    Nun möchte ich aber Summen und ein besseres Aussehen hinbekommen und dieses direkt in der Email darstellen, also ohne Anhang den ich öffnen muss, sondern direkt in die MAil.




    Matthias
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Genau!
    Beim DGV habe ich es schon hinbekommen.
    Anhang, so sieht die Mail zur Zeit aus
    Aber da fehlt dann z.B.: eine Summenbildung/ die Einheiten Währung usw.


    Deshalb war meine Idee, einen Bericht zu erstellen der optisch besser aussieht und den als MAil zu versenden...

    Wenn es geht!!!


    Matthias
    Bilder
    • bild.JPG

      61,16 kB, 1.420×206, 192 mal angesehen

    carwashbuxtehude schrieb:

    Deshalb war meine Idee, einen Bericht zu erstellen der optisch besser aussieht

    Nee nee - mit HTML hast Du schon in der Mail die perfekten Gestaltungsmöglichkeiten inkl. CSS!
    Ich könnte Dir eine sehr umfangreiche, tabellarische Mail mit allem Schnackens zeigen, die ich jeden Tag verschicke - darf ich nur leider nicht.
    Aber es ist wirklich möglich.
    Du musst halt Deine Daten vorher aufarbeiten und solltest dann natürlich auch ein bisschen den Webdesigner aus Dir herauslassen - sofern vorhanden.
    Aber wie gesagt, ohne ganz viel Input von Dir, gibts halt nur oberflächliche Antworten - sorry.

    VG,
    Bruno
    OK!
    Also alles so lassen und nur verschönen?

    Also ich habe ein DGV mit den benötigten Daten für den Inhalt der Mail. (Siehe Anhang)

    So versende ich den Inhalt des DGV:

    VB.NET-Quellcode

    1. Try
    2. Msg.IsBodyHtml = True ' Im HTML-Format erstellen
    3. Msg.From = New MailAddress("") ' Von
    4. Msg.To.Add("") ' An
    5. Msg.Subject = "Test am: " & Date.Now.ToString ' Betreff
    6. ' Aus den DataGridView-Zeilen und Spalten eine HTML-Tabelle erstellen
    7. Msg.Body = TabelleStart & vbCrLf
    8. Zeile = "<TR>"
    9. For Each S As DataGridViewColumn In DataGridView1.Columns ' Die Spaltenüberschriften auslesen
    10. Zeile = Zeile & "<TH>" & S.HeaderText & "</TH>"
    11. Next
    12. Zeile = Zeile & "</TR>" & vbCrLf
    13. Msg.Body = Msg.Body & Zeile
    14. For Each Z As DataGridViewRow In DataGridView1.Rows ' Für jede Zeile ...
    15. Zeile = "<TR>"
    16. For I As Integer = 0 To DataGridView1.ColumnCount - 1 ' ... die einzelnen Felder auslesen
    17. Zeile = Zeile & ZelleStart & Z.Cells(I).Value & ZelleEnde
    18. Next
    19. Zeile = Zeile & "</TR>" & vbCrLf
    20. Msg.Body = Msg.Body & Zeile
    21. Next
    22. Msg.Body = Msg.Body & TabelleEnde
    23. 'MessageBox.Show(Msg.Body, Date.Now.ToString)
    24. PostausgangsServer.Send(Msg) ' Nachricht verschicken
    25. MessageBox.Show("E-Mail erfolgreich versandt.", "Information", _
    26. MessageBoxButtons.OK, MessageBoxIcon.Information)
    27. Catch ex As Exception
    28. MessageBox.Show(Err.Number & ex.Message & ex.StackTrace.ToString) ' Falls ein Fehler auftritt
    29. End Try
    30. End Sub



    Wie schon gesagt sieht es nicht gerade gut aus, da dort die Einheiten und Summen fehlen!
    Bilder
    • bild.JPG

      67,23 kB, 1.309×503, 190 mal angesehen
    Genau das was ich gesucht habe.
    Dankeschön!

    Jetzt erstelle ich einen Screenshot und speichere ihn auch.
    Versenden der Mail ist auch kein Problem.
    Wie gehe ich es jetzt an und bekomme den Pfad mit hinein?


    VB.NET-Quellcode

    1. Msg.Body = ("<html><body>test <img src=""test.gif""> importhtml</body></html>")




    Matthias

    carwashbuxtehude schrieb:

    Wie gehe ich es jetzt an und bekomme den Pfad mit hinein?

    Naja, ganz so funktioniert das nicht.
    Wenn man ein Bild in eine HTML-Mail einbetten will, geschieht dies über eine BASE64 Encodierung.
    Soll ich Dir mal ein Beispiel fertig machen?
    Könnte aber ein bisschen dauern, da ich es wie gesagt in diversen C# Projekten benutze.

    LG,
    Bruno

    carwashbuxtehude schrieb:

    DANKESCHÖN für die Unterstützung!

    Jo - gern.
    Habe trotzdem mal die Methode in VB.NET übersetzt (so leidlich :rolleyes: ).
    So ähnlich sollte es bei Dir auch aussehen, nehme ich an?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Sendet eine HTML-Mail mit eingebettetem Bild
    3. ''' </summary>
    4. ''' <param name="MailSender">Absender</param>
    5. ''' <param name="Recipient">Empfänger</param>
    6. ''' <param name="MailSubject">Betreff</param>
    7. ''' <param name="MailMessage">Mail-Text</param>
    8. ''' <param name="AttachImage">Bild als Stream</param>
    9. ''' <returns>gesendet/nicht gesendet</returns>
    10. ''' <remarks></remarks>
    11. Public Shared Function SendMail(MailSender As String, Recipient As String, MailSubject As String, MailMessage As String, AttachImage As Stream) As Boolean
    12. ' IP-Adresse des SMTP-Servers eintragen
    13. Dim mailClient As New SmtpClient("0.0.0.0")
    14. Dim msg As New MailMessage(MailSender, Recipient)
    15. msg.IsBodyHtml = True
    16. msg.Subject = MailSubject
    17. msg.Priority = MailPriority.Normal
    18. Dim A As New Attachment(AttachImage, "ScreenShot.png")
    19. Dim RGen As New Random()
    20. A.ContentId = RGen.[Next](100000, 9999999).ToString()
    21. msg.Attachments.Add(A)
    22. Dim sb As New StringBuilder()
    23. sb.Append("<!DOCTYPE HTML PUBLIC ""-/W3C/DTD HTML 4.01 Transitional/EN"" ""http://www.w3.org/TR/html4/loose.dtd"">")
    24. sb.Append("<html>")
    25. sb.Append("<head>")
    26. sb.Append("<meta http-equiv=""Content-Type"" content=""text/html; charset=iso-8859-1"">")
    27. sb.Append("<title>Test</title>")
    28. sb.Append("</head>")
    29. sb.Append("<body>")
    30. sb.Append("<p>")
    31. sb.Append(MailMessage.Replace(vbLf, "<br>"))
    32. sb.Append("<p>")
    33. sb.Append("<img src=""cid:")
    34. sb.Append(A.ContentId)
    35. sb.Append(""">")
    36. sb.Append("</body>")
    37. sb.Append("</html>")
    38. msg.Body = sb.ToString()
    39. Try
    40. mailClient.Send(msg)
    41. Return True
    42. Catch
    43. Return False
    44. End Try
    45. End Function


    LG,
    Bruno
    Super!


    Ist es so auch ok?
    Oder habe ich etwas übersehen?


    VB.NET-Quellcode

    1. Private Sub sendEmail()
    2. Try
    3. Dim mail As New MailMessage()
    4. Dim strMsg As String = Nothing
    5. Dim img1 As LinkedResource = New LinkedResource("c:\carwash\test.png", MediaTypeNames.Image.Jpeg)
    6. Dim img2 As LinkedResource = New LinkedResource("c:\carwash\test2.png", MediaTypeNames.Image.Jpeg)
    7. img1.ContentId = "Image1"
    8. img2.ContentId = "Image2"
    9. mail.From = New MailAddress("xxxxxxxx", "C")
    10. mail.CC.Add("xxxxxxxxx")
    11. mail.Subject = "Test am: " & Date.Now.ToString ' Betreff
    12. strMsg = ""
    13. strMsg = strMsg & "<html><body><p></p>"
    14. strMsg = strMsg & "<table width='70%' border='0'>"
    15. strMsg = strMsg & "<tr>"
    16. strMsg = strMsg & "<td><h2><center><span style='color:#1C8DFF'>Umsatzdaten</span></center></h2></td>"
    17. strMsg = strMsg & "</tr>"
    18. strMsg = strMsg & "<tr>"
    19. strMsg = strMsg & "<td>&nbsp;</td>"
    20. strMsg = strMsg & "</tr>"
    21. strMsg = strMsg & "<tr>"
    22. strMsg = strMsg & "<td><img src=cid:Image1></td>"
    23. strMsg = strMsg & "</tr>"
    24. strMsg = strMsg & "<tr>"
    25. strMsg = strMsg & "<td><img src=cid:Image2></td>"
    26. strMsg = strMsg & "</tr>"
    27. strMsg = strMsg & "</table></body></html>"
    28. Dim av1 As AlternateView = AlternateView.CreateAlternateViewFromString(strMsg, Nothing, MediaTypeNames.Text.Html)
    29. av1.LinkedResources.Add(img1)
    30. av1.LinkedResources.Add(img2)
    31. mail.AlternateViews.Add(av1)
    32. mail.IsBodyHtml = True
    33. Dim smtp As SmtpClient = New SmtpClient()
    34. Dim MeineZugangsdaten As New System.Net.NetworkCredential
    35. Dim PostausgangsServer As New SmtpClient()
    36. MeineZugangsdaten.UserName = "xxxxxxx" ' Email Adresse des Absenders
    37. MeineZugangsdaten.Password = "cxxxx" ' Passwort des Absenders
    38. PostausgangsServer.Host = "xxxxxxxxx" ' PostausgangsServer bei
    39. PostausgangsServer.Port = 25
    40. PostausgangsServer.UseDefaultCredentials = False ' Keine Standard-Zugangsdaten
    41. PostausgangsServer.Credentials = MeineZugangsdaten ' Zugangsdaten setzen
    42. PostausgangsServer.Send(mail) ' Nachricht verschicke
    43. MessageBox.Show("E-Mail erfolgreich versandt.", "Information", _
    44. MessageBoxButtons.OK, MessageBoxIcon.Information)
    45. Catch ex As Exception
    46. MessageBox.Show(Err.Number & ex.Message & ex.StackTrace.ToString) ' Falls ein Fehler auftritt
    47. End Try
    48. End Sub