SMTP Signaturproblem

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von razzzer530i.

    SMTP Signaturproblem

    Moin liebes Forum,

    hab da mal wieder eine Kleinigkeit bei der Ihr mir hoffentlich sehr schnell weiterhelfen könnt.
    Mein Programm hat ca 6.000 Zeilen und bewältigt dein gesamten Mailverkehr innerhlab meines Netzwerkes.

    Jettzt stehe ich an einem Punkt der mich echt nervt und ich finde keine richtige Lösung.

    // Der Part der mir Fragen aufwirft gilt der Signatur.

    Vorab alle nötigen Infos:

    //Das Mail versenden via SMTP:

    VB.NET-Quellcode

    1. Public Sub Mailsenden()
    2. Dim Emailantwort As New MailMessage
    3. Dim SmtP As New SmtpClient("mail.steinau.com")
    4. Try
    5. Emailantwort.From = New MailAddress("Absender") 'Absender
    6. Emailantwort.To.Add("Empfänger") 'Empfänger angeben
    7. Emailantwort.Subject = ("Betreff") 'Betreff
    8. Emailantwort.Body = ("Nachricht") 'Eigentlich Inhalt der Mail
    9. Emailantwort.Attachments.Add((New System.Net.Mail.Attachment(Anhangpfad))) 'Dateianhang
    10. Emailantwort.IsBodyHtml = True 'Text als html-text versenden
    11. SmtP.Port = "Dein Port" 'SMTP Port setzen
    12. SmtP.EnableSsl = False 'SSL Verschlüsselung
    13. SmtP.Credentials = New System.Net.NetworkCredential("Benutzer", "pw") 'Logins
    14. SmtP.Send(Emailantwort)
    15. MsgBox("Gesendet an:" & "Empfänger")
    16. Catch ex As Exception
    17. Throw ex
    18. End Try
    19. End Sub

    Natürlich sind alle Parameter wie "Absender", "Empfänger" oder "Nachricht" in String-Variablen eingelesen und so zu betrachten.

    Jetzt kommt mein Problem!!

    Ich lese die Nachricht ganz einfach ein. Darin enthalten ist meine Signatur.

    Meine Signatur enthält eine Verlinkung auf ein Bild (Ich verwende hier extra ein nicht existierendes)

    HTML-Quellcode

    1. Kennen Sie schon mein neues Logo?<br><br>
    2. <a href="http://www.meineseite.com/index.php?id=111" target="_blank"><img src="mfg.png" border="0"></A>
    3. </font>
    4. </p>
    5. </body>


    // Diese Signatur ist als Signatur.html auf meinem Server gespeichert. Verwende ich sie in Outlook wird in der Email beim Empfänger das Bild als solches angezeigt.
    // Schreibe ich die Signatur allerdings als Text in den html Body der Mail, sieht man folgendes:




    Da sollte eigentlich ein Bild zu sehen sein.

    Gibt es eventuell ein Argument von

    VB.NET-Quellcode

    1. MailMessage
    das ich noch nicht kenne und welches Signaturen anfügt?

    Oder hat jemand eine andere Idee?

    Hilfe :D
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    Signaturen sind ein Teil des Mailbody.
    Bei Outlook wird im Client einfach die gewählte Signatur eingefügt.
    Damit wird die Signatur Teil des Body.

    Was Outlook mit dem Bild macht?
    Es erzeugt ein Inline-Image.
    Das kannst du bei einem SmtpClient durch Zuweisung der Property MailMessage.Attachment.ContendId erreichen.
    Beispiel gibt's hier.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Soweit gut zu wissen. Allerdings verwirrt mich der Code etwas.
    Bin mir nicht sicher wir ich kurz und knapp damit arbeiten soll.

    Hast du einen Denkanstoß für mein Beispiel? Denke du verstehst das was da steht 1000 mal besser als ich.
    Will keinen ganzen Code möchte nur eine Idee auf mein Beispiel bezogen. Wäre super weil ich damit nicht zurecht komme.

    Verstehe ich richtig, dass das Bild in der Mail beim Empfänger extrahiert wird?
    Kann dem Beispiel nicht folgen.

    LG und danke schonmal
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    Woran liegt's?
    Dass der Beispiel-Code in C# ist?
    Lass ihn einfach durch den Code-Konverter durch.
    Vielleicht verstehst du ihn als VB.Net-Code besser.

    Wenn du schon einen eigenen Mail-Client schreiben willst, der mehr als nur das Übliche können soll, darfst du vor ein paar Hürden nicht zurückschrecken.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich verstehe nicht so ganz wieso so kompliziert hochgezählt wird. Mein Mailprogramm ist eigentlich recht simpel und soll einfach nur emails senden und Grafiken anzeigen können. Ist eine schnelle Lösung für ein internes Problem.

    Und diese Anzeige ist das letzte was spinnt.

    Verstehe nicht so genau was da an Attachments in den for-Schleifen gemacht wird bzw. was da wirklich passiert.
    Ist leider nicht kommentiert das würde mir sehr weiterhelfen. und in VB convertiert hab ich das schon.

    VB.NET-Quellcode

    1. Public Shared Sub SendEmail(from As String, [to] As String, cc As String, subject As String, body As String, attachedFiles As String)
    2. Try
    3. Dim mailMsg As New MailMessage()
    4. Dim mailObj As New SmtpClient(ConfigurationManager.AppSettings("SmtpClient"))
    5. '"192.168.1.145"
    6. mailMsg.From = New MailAddress(from)
    7. Dim temp As String() = [to].Split(";"C)
    8. For i As Integer = 0 To temp.Length - 1
    9. If temp(i).ToString().Length > 1 Then
    10. mailMsg.[To].Add(temp(i).ToString())
    11. End If
    12. Next
    13. temp = cc.Split(";"C)
    14. For i As Integer = 0 To temp.Length - 1
    15. If temp(i).ToString().Length > 1 Then
    16. mailMsg.CC.Add(temp(i).ToString())
    17. End If
    18. Next
    19. temp = attachedFiles.Split(";"C)
    20. For i As Integer = 0 To temp.Length - 1
    21. If temp(i).ToString().Length > 1 Then
    22. mailMsg.Attachments.Add(New Attachment(temp(i).ToString()))
    23. End If
    24. Next
    25. mailMsg.Subject = subject
    26. mailMsg.Body = body
    27. mailMsg.IsBodyHtml = True
    28. Dim count As Integer = 0
    29. Dim oldChar As String = ExtractImages(body, count)
    30. Dim RGen As New Random()
    31. While oldChar <> ""
    32. Dim imgPath As String = oldChar
    33. Dim startIndex As Integer = imgPath.ToLower().IndexOf("images/")
    34. If startIndex > 0 Then
    35. imgPath = imgPath.Substring(startIndex)
    36. imgPath = imgPath.Replace("/", "\")
    37. Dim A As System.Net.Mail.Attachment = New Attachment(Convert.ToString(HttpContext.Current.Request.PhysicalApplicationPath + "\") & imgPath)
    38. A.ContentId = RGen.[Next](100000, 9999999).ToString()
    39. body = body.Replace(oldChar, "cid:" + A.ContentId)
    40. mailMsg.Attachments.Add(A)
    41. oldChar = ExtractImages(body, count)
    42. Else
    43. oldChar = ExtractImages(body, count)
    44. End If
    45. End While
    46. mailMsg.Body = body
    47. mailObj.Send(mailMsg)
    48. Catch ex As Exception
    49. WriteLog(ex)
    50. End Try
    51. End Sub
    52. Private Shared Function ExtractImages(body As String, ByRef count As Integer) As String
    53. Dim startIndex As Integer = body.ToLower().IndexOf(" < img src=""", count)
    54. Dim endIndex As Integer
    55. If startIndex >= 0 Then
    56. endIndex = body.IndexOf("""", startIndex + 10)
    57. Else
    58. Return ""
    59. End If
    60. startIndex = startIndex + 10
    61. Dim imgurl As String = body.Substring(startIndex, (endIndex - (startIndex)))
    62. count = startIndex
    63. Return imgurl
    64. End Function


    Fehlt nur die Erklärung was da genau passiert.

    Geholfen hast du mir trotzdem schon sehr.
    Danke
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    Die For-Schleifen kannst du vergessen.
    Da werden nur die Empfänger-Strings geparst und mehrere durch Semikolon getrennte Empfänger als einzelne Empfänger hinzugefügt.

    Für dich relevant ist die Funktion ExtractImages und was zwischen den Zeilen 30 und 53 passiert.

    Einfach mal durchdebuggen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    VB.NET-Quellcode

    1. Dim A As System.Net.Mail.Attachment = New Attachment(Convert.ToString(HttpContext.Current.Request.PhysicalApplicationPath + "\") & imgPath)


    HttpContext kann ich nicht verwenden. Genauso wie das komplette Namespace "System.Net.Http".

    Weiß allerdings nicht warum. .Net Version stimmt, vb 2010 stimmt. Weiß nicht was das Problem ist.
    Ärgerlich wirklich das treibt mich in den Wahnsinn.

    Ich schreibe um lese teste und versuche alles. Hab mir jetzt die wichtigen Zeilen rausgeschrieben. Habe trotzdem keinen Schimmer wie ich damit arbeiten soll.

    Ich weiß es ist viel verlangt aber kann mir nicht jemand ein Beispiel für mich ohne all den Schnickschnack drum herum anfertigen?

    Wo ich sehe wie ich diese images richtig anzeige?
    Wäre ein Traum.
    Ich weiß echt nicht woran es liegt.

    Danke aber für jede Hilfe. Probiere es trotzdem weiter
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~

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