eMail-Versand (Problme mit Anhang)

  • VB.NET
  • .NET (FX) 4.0

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Westerwälder.

    eMail-Versand (Problme mit Anhang)

    Guten Morgen,

    habe mir ein kleines email-Programm (nach dem Beispiel hier im Forum) erstellt.
    Funktioniert alles, bis auf das Versenden von Anlagen an eine eMail.

    Das seltsame ist nun:

    Sende ich von Outlook eine eMail mit Anlage an meine Adresse, erhalte ich die eMail mit Anlage.

    Sende ich von meinem Programm eine eMail mit Anlage, wird angzeigt, dass eine Anlage dabei ist, sie hat aber keinen Namen und eine Größe von 0 Byte.
    Öffne ich aber nun diese eMail mit Outlook, ist die Anlage korrekt dabei.

    Verstehe das ganze nun nicht mehr. Habe es mit verschiedenen Dateien versucht, pdf txt , immer das gleiche Ergebnis.
    Bin bei Vodaphone, ehemals Kabel Deutschland.

    Hat jemand von Euch schon mal eine ähnliche Erfahrung gemacht?
    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()

    @Westerwälder Wenn Du Deinen Code posten würdest, könnten wir versuchen, Deinen Effekt zu reproduzieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sicher doch

    Visual Basic-Quellcode

    1. Private Sub BGW_Email_DoWork(sender As Object, e As DoWorkEventArgs) Handles BGW_Email.DoWork
    2. If Me.EmailServerInBetrieb Then Exit Sub
    3. Me.EmailServerInBetrieb = True
    4. Dim POP3 = New POPClient
    5. With Anwender.Email
    6. .AnzahlEmpfangene = 0
    7. .Fehlertext = Nothing
    8. .Tab_Mails.Rows.Clear()
    9. .Tab_Mailsanlagen.Rows.Clear()
    10. End With
    11. Try
    12. Dim EMailAnzahl As Integer = 0
    13. Dim EMailrow As DataRow = Nothing
    14. Dim EAnlagerow As DataRow = Nothing
    15. Dim AnzAnlagen As Integer = 0
    16. POP3.Disconnect()
    17. POP3.Connect(Anwender.Email.POP3, Anwender.Email.Port_Empfang)
    18. POP3.Authenticate(Anwender.Email.Adresse, Anwender.Email.Passwort)
    19. For i As Integer = 1 To POP3.GetMessageCount
    20. Dim m As MIMEParser.Message = POP3.GetMessage(i, False)
    21. If m.From <> Nothing Then EMailAnzahl = EMailAnzahl + 1
    22. 'Email - Grunddaten erfassen
    23. EMailrow = Anwender.Email.Tab_Mails.NewRow
    24. EMailrow("Nummer") = i
    25. EMailrow("Datum") = m.Date.ToString
    26. EMailrow("Sender") = Me.HieroglypheToUmlaut(m.From.ToString) & " <" & m.FromEmail & ">"
    27. EMailrow("Betreff") = Me.HieroglypheToUmlaut(m.Subject)
    28. EMailrow("EText") = Me.HieroglypheToUmlaut(m.MessageBody(0).ToString)
    29. 'Email - Anlagen erfassen
    30. AnzAnlagen = 0
    31. For Each EmailAttach As MIMEParser.Attachment In m.Attachments
    32. If Not EmailAttach.NotAttachment Then
    33. AnzAnlagen += 1
    34. EAnlagerow = Anwender.Email.Tab_Mailsanlagen.NewRow
    35. EAnlagerow("Nummer") = i
    36. EAnlagerow("Anlage") = EmailAttach
    37. Anwender.Email.Tab_Mailsanlagen.Rows.Add(EAnlagerow)
    38. End If
    39. Next
    40. EMailrow("Anlagen") = AnzAnlagen
    41. Anwender.Email.Tab_Mails.Rows.Add(EMailrow)
    42. Next
    43. POP3.Disconnect()
    44. Anwender.Email.AnzahlEmpfangene = EMailAnzahl
    45. Anwender.Email.LetzteAktion = Now
    46. Catch ex As Exception
    47. POP3.Disconnect()
    48. Fehlermeldung.Schreiben("eMail-Prüfung-Fehler: " & ex.Message)
    49. With Anwender.Email
    50. .AnzahlEmpfangene = -1
    51. .Fehlertext = ex.Message
    52. .LetzteAktion = Now
    53. .NaechsteAktion = Now.AddMinutes(10)
    54. End With
    55. End Try
    56. End Sub
    57. Public Sub EMail_Senden(ByVal Nummer As Integer)
    58. If Me.EmailServerInBetrieb Then
    59. MessageBox.Show("Der Mailserver ist momentan ausgelastet." & vbNewLine &
    60. "Bitte wiederholen Sie den Vorgang", "eMail-Server" & Programm.Copyright_Messagebox,
    61. MessageBoxButtons.OK, MessageBoxIcon.Hand)
    62. Exit Sub
    63. End If
    64. Me.EmailServerInBetrieb = True
    65. Me.EmailVersendung_Erfolgt = False
    66. Try
    67. Dim Msg As New MailMessage
    68. Dim myCredentials As New System.Net.NetworkCredential
    69. Dim Anhang As System.Net.Mail.Attachment
    70. myCredentials.UserName = Anwender.Email.Adresse
    71. myCredentials.Password = Anwender.Email.Passwort
    72. Msg.IsBodyHtml = False
    73. Dim mySmtpsvr As New SmtpClient()
    74. mySmtpsvr.Host = Anwender.Email.SMTP
    75. mySmtpsvr.Port = Anwender.Email.Port_Senden
    76. mySmtpsvr.EnableSsl = True
    77. mySmtpsvr.UseDefaultCredentials = False
    78. mySmtpsvr.Credentials = myCredentials
    79. 'Email - Grunddaten übergeben
    80. Msg.From = New MailAddress(EMailausgang.TextBox_Sender.Text)
    81. Msg.To.Add(EMailausgang.TextBox_Empfaenger.Text)
    82. Msg.Subject = EMailausgang.TextBox_Betreff.Text
    83. Msg.Body = EMailausgang.TextBox_Text.Text
    84. 'Email - Anlagen übergeben
    85. If Not EMailausgang.MailAnhang.Count = 0 Then
    86. For I As Integer = 0 To EMailausgang.MailAnhang.Count - 1
    87. Anhang = New Attachment(EMailausgang.MailAnhang(I))
    88. Msg.Attachments.Add((Anhang))
    89. Next
    90. End If
    91. mySmtpsvr.Send(Msg)
    92. Me.EmailVersendung_Erfolgt = True
    93. MessageBox.Show("Die eMail Nummer " & Nummer.ToString & " wurde versendet.", "eMail-Center" & Programm.Copyright_Messagebox, MessageBoxButtons.OK,
    94. MessageBoxIcon.Information)
    95. Catch ex As Exception
    96. Me.EmailVersendung_Erfolgt = False
    97. MessageBox.Show("Die eMail Nummer " & Nummer.ToString & " konnte nicht versendet werden." & vbNewLine & vbNewLine &
    98. "Fehler: " & ex.Message & vbNewLine, "eMail-Center" & Programm.Copyright_Messagebox, MessageBoxButtons.OK,
    99. MessageBoxIcon.Error)
    100. End Try
    101. ' EMail Speichern
    102. Try
    103. ' Email Anlagen auf Email übergeben
    104. If Not EMailausgang.MailAnhang.Count = 0 Then
    105. Dim EmailText As String = EMailausgang.TextBox_Text.Text & vbNewLine & vbNewLine &
    106. "Interner Vermerk gesendeter Anlagen:" & vbNewLine
    107. For I As Integer = 0 To EMailausgang.MailAnhang.Count - 1
    108. EmailText = EmailText & EMailausgang.MailAnhang(I) & vbNewLine
    109. Next
    110. EMailausgang.TextBox_Text.Text = EmailText
    111. End If
    112. ' File.WriteAllText(Pfade.Dokumente.Pfad & "1.txt", EMailausgang.TextBox_Text.Text)
    113. Catch ex As Exception
    114. MessageBox.Show("Die eMail Nummer " & Nummer.ToString & " konnte nicht gespeichert werden." & vbNewLine & vbNewLine &
    115. "Fehler: " & ex.Message & vbNewLine, "eMail-Center" & Programm.Copyright_Messagebox, MessageBoxButtons.OK,
    116. MessageBoxIcon.Error)
    117. End Try
    118. Me.EmailServerInBetrieb = False
    119. End Sub




    Gruß Markus

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Westerwälder“ ()

    Hallo Westerwälder (komme auch ausm Westerwald :) )
    ich hab hier auch einen Code zum Mailversand, der funktioniert bei mir einwndfrei (im lokalen Netz mit Exchange Server).

    VB.NET-Quellcode

    1. Public Sub Mailsenden()
    2. Dim Emailantwort As New MailMessage
    3. Dim SmtP As New SmtpClient("smtpServer")
    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")
    9. Emailantwort.Attachments.Add((New System.Net.Mail.Attachment(Anhangpfad)))
    10. Emailantwort.IsBodyHtml = True
    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


    lässt sich bestimmt auch mit Vodafone SMTP-Server verwenden.
    "Hier könnte Ihre Werbung stehen..."
    Guten Morgen Landsmann, danke für die Antwort.

    Anbei nochmals mein Sendepart:

    VB.NET-Quellcode

    1. Dim Msg As New MailMessage
    2. Dim myCredentials As New System.Net.NetworkCredential
    3. Dim Anhang As System.Net.Mail.Attachment
    4. ' Server - Verbindungsdaten übergeben
    5. myCredentials.UserName = EMail.Adresse
    6. myCredentials.Password = EMail.Passwort
    7. Dim mySmtpsvr As New SmtpClient()
    8. mySmtpsvr.Host = EMail.SMTP
    9. mySmtpsvr.Port = EMail.Port_Senden
    10. mySmtpsvr.EnableSsl = True
    11. mySmtpsvr.UseDefaultCredentials = False
    12. mySmtpsvr.Credentials = myCredentials
    13. 'Email - Grunddaten übergeben
    14. Msg.From = New MailAddress(EMailausgang.TextBox_Sender.Text)
    15. Msg.IsBodyHtml = False
    16. Msg.To.Add(EMailausgang.TextBox_Empfaenger.Text)
    17. Msg.Subject = EMailausgang.TextBox_Betreff.Text
    18. Msg.Body = EMailausgang.TextBox_Text.Text
    19. 'Email - Anlagen übergeben
    20. If Not EMail.Ausgang.ListAnhang.Count = 0 Then
    21. For I As Integer = 0 To EMail.Ausgang.ListAnhang.Count - 1
    22. Anhang = New Attachment(EMail.Ausgang.ListAnhang(I)) ' List of String (Pfad und Dateiname der Anhangdatei (können ja mehrere sein))
    23. Msg.Attachments.Add((Anhang))
    24. Next
    25. End If
    26. mySmtpsvr.Send(Msg)


    Sehe da nun keine große Abweichung von deinem Code.

    Wie schon in meiner ersten Mitteilung beschrieben, wird die Mail korrekt mit Anhang gesendet. Öffne ich sie mit Outlook ist die Anlage auch dabei.

    Hole ich die Mail aber hiermit ab:

    Visual Basic-Quellcode

    1. Dim EMailDatum As Date = Now
    2. Dim EMailAnzahl As Integer = 0
    3. Dim EMailrow As DataRow = Nothing
    4. Dim EAnlagerow As DataRow = Nothing
    5. Dim AnzAnlagen As Integer = 0
    6. POP3.Disconnect()
    7. POP3.Connect(EMail.POP3, EMail.Port_Empfang, useSSL:=False)
    8. POP3.Authenticate(EMail.Adresse, EMail.Passwort)
    9. For i As Integer = 1 To POP3.GetMessageCount
    10. Dim m As MIMEParser.Message = POP3.GetMessage(i, False)
    11. If m.From <> Nothing Then EMailAnzahl += 1
    12. 'Email - Grunddaten erfassen
    13. EMailDatum = (CDate(m.Date.ToString))
    14. EMailrow = EMail.Eingang.Tab_Mails.NewRow
    15. EMailrow("Nummer") = i
    16. EMailrow("Datum") = EMailDatum
    17. EMailrow("Sender") = Me.HieroglypheToUmlaut(m.From.ToString) & " <" & m.FromEmail & ">"
    18. EMailrow("Betreff") = Me.HieroglypheToUmlaut(m.Subject)
    19. EMailrow("EText") = Me.HieroglypheToUmlaut(m.GetTextBody(m.MessageBody(0).ToString))
    20. 'Email - Anlagen erfassen
    21. AnzAnlagen = 0
    22. If m.MessageBody.Count > 0 Then
    23. For Each EmailAttach As MIMEParser.Attachment In m.Attachments
    24. If Not EmailAttach.NotAttachment Then
    25. AnzAnlagen += 1
    26. EAnlagerow = EMail.Eingang.Tab_Mailsanlagen.NewRow
    27. EAnlagerow("Nummer") = i
    28. EAnlagerow("Anlage") = EmailAttach
    29. EMail.Eingang.Tab_Mailsanlagen.Rows.Add(EAnlagerow)
    30. End If
    31. Next
    32. End If
    33. EMailrow("Anlagen") = AnzAnlagen
    34. EMail.Eingang.Tab_Mails.Rows.Add(EMailrow)
    35. Next
    36. POP3.Disconnect()


    wird erkannt, dass eine Anlage dabei ist.
    Diese hat aber keinen Namen und eine Größe von 0 Byte.

    Dies betrifft aber nur Mail's die ich mit meinem Programm gesendet habe.
    Sende ich mir selbst eine Mail via Outlook mit Anlage, wird sie von meinem Programm korrekt empfangen.
    Ich weis, klingt seltsam.
    Gruß Markus

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Westerwälder“ ()

    Hi,
    hab den Code jetzt nicht nachgebaut, aber hast Du mal geprüft, wie groß die Anlage ist (haltepunkt).
    Weis nicht genau, aber eventuell hat es etwas damit zu tun, das du die Anlage in ein Dataset schieben willst.
    "Hier könnte Ihre Werbung stehen..."
    Überschneidung:
    Dies betrifft aber nur Mail's die ich mit meinem Programm gesendet habe.
    Sende ich mir selbst eine Mail via Outlook mit Anlage, wird sie von meinem Programm korrekt empfangen.
    Ich weis, klingt seltsam.

    Nein ich arbeite hier nicht mit einem Dataset. Nur mit einer List of string
    Gruß Markus