Email Empfang über POP3

    • VB.NET

    Es gibt 74 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

      (neue stimmt nur, wenn du die anderen vom Server löschst :P)
      da wusste ich etwas auch noch nich, bin jetzt aber schlauer ;)
      Diese Möglichkeit bieten POP Server nicht, du müsstest die E-Mails temporär speichern und somit überprüfen, was ungelesen ist und was nicht...
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---
      Hm... Gibt es irgendeine Möglichkeit, is irgendwie ohne temporäres Speichern zu lösen? :S - Eigentlich möchte ich das in den Autostart an unterschiedlichen PCs legen und dann wär das problematisch, wenn ich die E-Mail an PC1 lese wird sie an PC2 ja immer noch als ungelesen angezeigt...
      Eigentlich holen alle E-Mail Programme die Mails vom Server und lagern sie Temporär im Client ab. Wenn man nicht eingestellt hat dass sie gleich gelöscht werden, werden jedesmal alle Mails neu geholt und dann überprüft ob es die Mail schon gibt. So müsstest du das auch machen. Da gibts diverse Möglichkeiten. Absender und Datum überprüfen und vom Mail Body ein Hash erzeugen. Dies kann man nun einfach überprüfen und somit feststellen ob eine Mail schon heruntergeladen wurde.
      Bei mir kommt die ganze Zeit bei Connect das hier: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
      Mein Code:

      VB.NET-Quellcode

      1. Dim pop3 As New POPClient
      2. pop3.Disconnect()
      3. pop3.Connect("pop.googlemail.com", 995)
      4. pop3.Authenticate("***********", "******")
      5. ListBox1.Items.Clear()
      6. For i As Integer = 1 To pop3.GetMessageCount
      7. Dim m As MIMEParser.Message = pop3.GetMessage(i, False)
      8. ListBox1.Items.Add("From: " & m.From & " <" & m.FromEmail & "> - " & m.Subject)
      9. If m.MessageBody.Count > 0 Then
      10. Dim Attach As New List(Of MIMEParser.Attachment)
      11. Messages.Add(m.MessageBody(m.MessageBody.Count - 1))
      12. For ii As Integer = 1 To m.AttachmentCount - 1
      13. Attach.Add(m.GetAttachment(ii))
      14. Next
      15. AttachArray.Add(Attach)
      16. End If
      17. ' pop3.DeleteMessage(i) ' Wenn die Message nach abholung gelöscht werden soll
      18. Next
      19. pop3.Disconnect()


      Weiß jemand wie ich den Fehler behebe
      mfg henny
      Ich habe den Fehler : {"Eine Ausnahme vom Typ "OpenPOP.POP3.PopServerNotFoundException" wurde ausgelöst."}
      Mein Code (Für WEb) :

      VB.NET-Quellcode

      1. Imports System.IO
      2. Imports OpenPOP
      3. Imports OpenPOP.POP3
      4. Public Class Form1
      5. Dim Messages As New List(Of String)
      6. Dim AttachArray As New ArrayList
      7. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      8. Dim pop3 As New POPClient
      9. pop3.Disconnect()
      10. pop3.Connect("smtp.web.de", 110)
      11. pop3.Authenticate("Benutzername", "Passwort")
      12. ListBox1.Items.Clear()
      13. For i As Integer = 1 To pop3.GetMessageCount
      14. Dim m As MIMEParser.Message = pop3.GetMessage(i, False)
      15. ListBox1.Items.Add("From: " & m.From & " <" & m.FromEmail & "> - " & m.Subject)
      16. If m.MessageBody.Count > 0 Then
      17. Dim Attach As New List(Of MIMEParser.Attachment)
      18. Messages.Add(m.MessageBody(m.MessageBody.Count - 1))
      19. For ii As Integer = 1 To m.AttachmentCount - 1
      20. Attach.Add(m.GetAttachment(ii))
      21. Next
      22. AttachArray.Add(Attach)
      23. End If
      24. ' pop3.DeleteMessage(i) ' Wenn die Message nach abholung gelöscht werden soll
      25. Next
      26. pop3.Disconnect()
      27. End Sub
      28. Private Sub ListBox1_SelectedIndexChanged(ByVal sender As ListBox, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
      29. TextBox1.Text = Messages(sender.SelectedIndex)
      30. ListBox2.Items.Clear()
      31. For Each att As MIMEParser.Attachment In AttachArray(sender.SelectedIndex)
      32. ListBox2.Items.Add(att.ContentFileName & " " & att.ContentLength & " Byte")
      33. Next
      34. End Sub
      35. Private Sub ListBox2_SelectedIndexChanged(ByVal sender As ListBox, ByVal e As System.EventArgs) Handles ListBox2.SelectedIndexChanged
      36. Dim att As MIMEParser.Attachment = AttachArray(ListBox1.SelectedIndex)(sender.SelectedIndex)
      37. Dim fs As FileStream = File.Create(Application.StartupPath & "/attach/" & att.ContentFileName)
      38. Dim da() As Byte
      39. da = att.DecodedAttachment
      40. fs.Write(da, 0, da.Length)
      41. MsgBox("'" & att.ContentFileName & "' wurde gespeichert!")
      42. fs.Close()
      43. End Sub
      44. End Class



      *EDIT
      pop3.Disconnect()
      pop3.Connect("pop3.web.de", 110)
      pop3.Authenticate("Benutzername", "Passwort")


      aber nun kommt der Fehler, dass da irrgendwas mit
      OpenPOP.POP3.InvalidPasswordException

      ist
      KA was das ist...
      Bitte um hife

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

      Vollzitat eines Vorposts an dieser Stelle durch Username ersetzt ~VaporiZed
      @ Myrax: Ja ja , aber das ist das richtige passwort, denn ich komme ja auf web.de auch mit dem passwort rein...

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

      Vollzitat eines Vorposts an dieser Stelle durch Username ersetzt ~VaporiZed
      @ henny: Das stimmt nicht,

      jvbsl schrieb:

      Eine Antwort wird höchstwahrscheinlich kommen, jedoch wohl nicht die erwartete...

      Das trifft schon eher zu.
      Der Server meldet nämlich, dass er ssl braucht.(port 995=ssl)
      Bei allen Servern von google und web.de ist das der fall.
      es gibt ein openpop-ssl auf googlecode, aber ich kann nicht darauf zugreifen?!

      doemeb
      mailer:
      90%: 0%

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

      Hey,
      ich habe ein Problem:
      Ich habe den E-Mail-Empfang in einen Backgroundworker gepackt, damit die Form nicht einfriert... Jedoch erscheint bei mir jetzt immer der Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

      Mein Code:

      VB.NET-Quellcode

      1. Structure EmailList
      2. Dim von As String
      3. Dim vonEmail As String
      4. Dim betreff As String
      5. End Structure
      6. Dim EmailLb() As EmailList
      7. Private Sub BackgroundWorkerEmail_DoWork() Handles BackgroundWorkerEmail.DoWork
      8. Dim pop3 As New POPClient
      9. Dim subj As String = Nothing
      10. Dim fromn As String = Nothing
      11. 'Try
      12. pop3.Connect("pop3.web.de", 110)
      13. pop3.Authenticate("***", "***")
      14. Dim max As Integer = 0
      15. If pop3.GetMessageCount > 5 Then max = 5 Else max = pop3.GetMessageCount
      16. For i As Integer = 1 To max
      17. Dim m As MIMEParser.Message = pop3.GetMessage(i, False)
      18. fromn = m.From
      19. fromn = fromn.Replace("ä", "ä")
      20. fromn = fromn.Replace("Ä", "Ä")
      21. fromn = fromn.Replace("ö", "ö")
      22. fromn = fromn.Replace("Ö", "Ö")
      23. fromn = fromn.Replace("ü", "ü")
      24. fromn = fromn.Replace("Ãoe", "Ü")
      25. fromn = fromn.Replace("ß", "ß")
      26. subj = m.Subject
      27. subj = subj.Replace("ä", "ä")
      28. subj = subj.Replace("Ä", "Ä")
      29. subj = subj.Replace("ö", "ö")
      30. subj = subj.Replace("Ö", "Ö")
      31. subj = subj.Replace("ü", "ü")
      32. subj = subj.Replace("Ãoe", "Ü")
      33. subj = subj.Replace("ß", "ß")
      34. EmailLb(i).von = fromn ' Hier erscheint der Fehler
      35. EmailLb(i).vonEmail = m.FromEmail
      36. EmailLb(i).betreff = subj
      37. If m.MessageBody.Count > 0 Then
      38. Dim Attach As New List(Of MIMEParser.Attachment)
      39. Messages.Add(m.MessageBody(m.MessageBody.Count - 1))
      40. For ii As Integer = 0 To m.AttachmentCount - 1
      41. Attach.Add(m.GetAttachment(ii))
      42. Next
      43. End If
      44. Next
      45. pop3.Disconnect()
      46. Me.Invoke(New EventHandler(AddressOf setControlsTrue))
      47. 'Catch ex As Exception
      48. ' MessageBox.Show("Die Verbindung zum E-Mail-Konto konnte leider nicht hergestellt werden." & ex.Message)
      49. ' Me.Invoke(New EventHandler(AddressOf setControlsFalse))
      50. 'End Try
      51. End Sub


      Über eine Antwort würde ich mich sehr freuen...

      Gruß tybae
      Und wir würden uns über eine genauere Fehlerbeschreibung freuen, wie z.B. WO tritt der Fehler auf? In welcher Zeile.

      Zudem wieso machste da so viel Replace?? Ich denke du hast da nur die falschen Encoding Einstellungen, die kann man aber sicher irgendwo auswählen.

      VB.NET-Quellcode

      1. EmailLb(i).von = fromn


      Früher sollte das Array auch mal Dimensioniert werden.... ob es bei .Net nötig ist kann ich nicht sagen aber unter VB6 wäre es

      VB.NET-Quellcode

      1. If pop3.GetMessageCount > 5 Then max = 5 Else max = pop3.GetMessageCount
      2. Redim EmailLb(max)


      gewesen.

      LG

      Pixel
      Hey,

      ich hab das auchmal mit einem Backgroundworker versucht, allerdings bekomme ich immer einen Fehler:

      Additional information: Cross-thread operation not valid: Control 'ListView1' accessed from a thread other than the thread it was created on.


      mein Code:

      Spoiler anzeigen

      VB.NET-Quellcode

      1. Imports System.IO
      2. Imports OpenPOP
      3. Imports OpenPOP.POP3
      4. Public Class Form1
      5. Dim Messages As New List(Of String)
      6. Dim AttachArray As New ArrayList
      7. Dim password = ""
      8. Dim user = ""
      9. Dim pop = ""
      10. Private Sub CheckMails()
      11. Dim pop3 As New POPClient
      12. pop3.Disconnect()
      13. pop3.Connect("pop.gmx.net", 110)
      14. pop3.Authenticate("hans@gmx.net", "blauebergesindschöndasistnichtdasrichtigepasswort")
      15. ListView1.Items.Clear()
      16. For i As Integer = 1 To pop3.GetMessageCount
      17. Dim m As MIMEParser.Message = pop3.GetMessage(i, False)
      18. Dim lst As New ListViewItem
      19. lst.SubItems.Add(m.From)
      20. lst.SubItems.Add(m.Subject)
      21. lst.SubItems.Add(m.DateTimeInfo)
      22. lst.SubItems.Add("")
      23. If m.HasAttachment = True Then
      24. lst.SubItems.Add("•")
      25. End If
      26. ListView1.Items.Add(lst)
      27. If m.MessageBody.Count > 0 Then
      28. Dim Attach As New List(Of MIMEParser.Attachment)
      29. Messages.Add(m.MessageBody(m.MessageBody.Count - 1))
      30. For ii As Integer = 1 To m.AttachmentCount - 1
      31. Attach.Add(m.GetAttachment(ii))
      32. Next
      33. AttachArray.Add(Attach)
      34. End If
      35. ' pop3.DeleteMessage(i) ' Wenn die Message nach abholung gelöscht werden soll
      36. Next
      37. pop3.Disconnect()
      38. End Sub
      39. Private Sub Splitter1_SplitterMoved(ByVal sender As System.Object, ByVal e As System.Windows.Forms.SplitterEventArgs)
      40. End Sub
      41. Private Sub ToolStrip2_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles ToolStrip2.ItemClicked
      42. End Sub
      43. Private Sub ListBox2_SelectedIndexChanged(ByVal sender As ListBox, ByVal e As System.EventArgs) Handles ListBox2.SelectedIndexChanged
      44. Dim att As MIMEParser.Attachment = AttachArray(ListView1.FocusedItem.Index)(sender.SelectedIndex)
      45. Dim fs As FileStream = File.Create(Application.StartupPath & "/attach/" & att.ContentFileName)
      46. Dim da() As Byte
      47. da = att.DecodedAttachment
      48. fs.Write(da, 0, da.Length)
      49. MsgBox("'" & att.ContentFileName & "' wurde gespeichert!")
      50. fs.Close()
      51. End Sub
      52. Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged
      53. 'Dim slc = ListView1.FocusedItem.SubItems.Item(4)
      54. ' Dim cnt = slc.ToString
      55. 'cnt = cnt.Replace("ListViewSubItem: {", "")
      56. 'cnt = cnt.Replace("}", "")
      57. 'WebBrowser1.DocumentText = cnt
      58. WebBrowser1.DocumentText = Messages(sender.SelectedIndex)
      59. ListBox2.Items.Clear()
      60. For Each att As MIMEParser.Attachment In AttachArray(sender.SelectedIndex)
      61. ListBox2.Items.Add(att.ContentFileName & " " & att.ContentLength & " Byte")
      62. Next
      63. End Sub
      64. Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
      65. End Sub
      66. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      67. End Sub
      68. Private Sub NachrichtAbrufenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NachrichtAbrufenToolStripMenuItem.Click
      69. BackgroundWorker1.RunWorkerAsync()
      70. End Sub
      71. Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
      72. CheckMails()
      73. ToolStripProgressBar1.Value += 1
      74. End Sub
      75. Private Sub StatusStrip1_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles StatusStrip1.ItemClicked
      76. End Sub
      77. End Class


      Hat jemand eine Idee?
      Überleg mal in CheckMails greifs du auf die Listview zu (dort kommt der Fehler). Und ein Backgroundworker hat nen 2. Thread. Dein BGW ruft CheckMails auf und tada da haben wir wieder die Sachen mit dem Multithreading ;)
      Hi,

      ich gehe mal davon aus das der Fehler in der Sub CheckMails kommt...versuch mal abzufragen ob ein Invoke nötig ist und ruf es dann mit MethodInvoker auf:

      Hier mal der Source:

      VB.NET-Quellcode

      1. Imports System.IO
      2. Imports OpenPOP
      3. Imports OpenPOP.POP3
      4. Public Class Form1
      5. Dim Messages As New List(Of String)
      6. Dim AttachArray As New ArrayList
      7. Dim password = ""
      8. Dim user = ""
      9. Dim pop = ""
      10. Private Sub CheckMails()
      11. If InvokeRequired Then
      12. Invoke(New MethodInvoker(CheckMails))
      13. Return
      14. End If
      15. Dim pop3 As New POPClient
      16. pop3.Disconnect()
      17. pop3.Connect("pop.gmx.net", 110)
      18. pop3.Authenticate("hans@gmx.net", "blauebergesindschöndasistnichtdasrichtigepasswort")
      19. ListView1.Items.Clear()
      20. For i As Integer = 1 To pop3.GetMessageCount
      21. Dim m As MIMEParser.Message = pop3.GetMessage(i, False)
      22. Dim lst As New ListViewItem
      23. lst.SubItems.Add(m.From)
      24. lst.SubItems.Add(m.Subject)
      25. lst.SubItems.Add(m.DateTimeInfo)
      26. lst.SubItems.Add("")
      27. If m.HasAttachment = True Then
      28. lst.SubItems.Add("•")
      29. End If
      30. ListView1.Items.Add(lst)
      31. If m.MessageBody.Count > 0 Then
      32. Dim Attach As New List(Of MIMEParser.Attachment)
      33. Messages.Add(m.MessageBody(m.MessageBody.Count - 1))
      34. For ii As Integer = 1 To m.AttachmentCount - 1
      35. Attach.Add(m.GetAttachment(ii))
      36. Next
      37. AttachArray.Add(Attach)
      38. End If
      39. ' pop3.DeleteMessage(i) ' Wenn die Message nach abholung gelöscht werden soll
      40. Next
      41. pop3.Disconnect()
      42. End Sub
      43. Private Sub Splitter1_SplitterMoved(ByVal sender As System.Object, ByVal e As System.Windows.Forms.SplitterEventArgs)
      44. End Sub
      45. Private Sub ToolStrip2_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles ToolStrip2.ItemClicked
      46. End Sub
      47. Private Sub ListBox2_SelectedIndexChanged(ByVal sender As ListBox, ByVal e As System.EventArgs) Handles ListBox2.SelectedIndexChanged
      48. Dim att As MIMEParser.Attachment = AttachArray(ListView1.FocusedItem.Index)(sender.SelectedIndex)
      49. Dim fs As FileStream = File.Create(Application.StartupPath & "/attach/" & att.ContentFileName)
      50. Dim da() As Byte
      51. da = att.DecodedAttachment
      52. fs.Write(da, 0, da.Length)
      53. MsgBox("'" & att.ContentFileName & "' wurde gespeichert!")
      54. fs.Close()
      55. End Sub
      56. Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged
      57. 'Dim slc = ListView1.FocusedItem.SubItems.Item(4)
      58. ' Dim cnt = slc.ToString
      59. 'cnt = cnt.Replace("ListViewSubItem: {", "")
      60. 'cnt = cnt.Replace("}", "")
      61. 'WebBrowser1.DocumentText = cnt
      62. WebBrowser1.DocumentText = Messages(sender.SelectedIndex)
      63. ListBox2.Items.Clear()
      64. For Each att As MIMEParser.Attachment In AttachArray(sender.SelectedIndex)
      65. ListBox2.Items.Add(att.ContentFileName & " " & att.ContentLength & " Byte")
      66. Next
      67. End Sub
      68. Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
      69. End Sub
      70. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      71. End Sub
      72. Private Sub NachrichtAbrufenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NachrichtAbrufenToolStripMenuItem.Click
      73. BackgroundWorker1.RunWorkerAsync()
      74. End Sub
      75. Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
      76. CheckMails()
      77. ToolStripProgressBar1.Value += 1
      78. End Sub
      79. Private Sub StatusStrip1_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles StatusStrip1.ItemClicked
      80. End Sub
      81. End Class


      Aber ohne Gewähr das es funktioniert!