E-mails Empfangen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von trumpetboy.

    E-mails Empfangen

    Hi ich würde gerne etwas ein Programm schreiben mit dem ich E-mails empfangen kann.
    Ich möchte also einen Pop3 server abfragen.
    Mein Problem ist ich weis überhaupt nicht wie sowas geht ich hab die sufu benutzt und gegooglet aber nichts gefunden. was mir hilft nun bin ich hier.

    mfg trumpetboy :(
    So produktive Beiträge helfen hier keinem weiter.
    aber echt


    Zum Thema email abrufen:
    Im Prinzip musst du mit dem POP3 Server eine Verbindung aufbauen und ihm ein paar Befehle senden.
    Hier müsste sich was bezüglich der Befehle finden lassen: Link

    Hab nen code

    Hi ich hab hier jetzt n code der ist recht gut ich bekomme nur 2 Fehlermeldungen.
    ich weis nicht was mit Dim SBuilder As New Text.StringBuilder das mit dem Text.Stringbuilder macht mir Probleme könnt ihr mir da helfen ??


    Code


    Public Class Client

    Private Client As New Net.Sockets.TcpClient
    Private POP3Stream As Net.Sockets.NetworkStream
    Private Connected As Boolean = False

    '''<summary>
    '''Verbindungssatus abfragen.
    '''</summary>
    Public ReadOnly Property ConnectionEstablished() As Boolean

    Get
    Return Connected
    End Get

    End Property

    '''<summary>
    '''Nachrichten Klasse
    '''</summary>
    Public Class MessageList

    Public ID As Int64
    Public Size As Int64

    End Class

    '''<summary>
    '''Verfügbarer POP3 Befehlssatz.
    '''</summary>
    Private Class Commands

    Public Const Delete As String = "DELE "
    Public Const GetMessage As String = "RETR "
    Public Const List As String = "LIST"
    Public Const Password As String = "PASS "
    Public Const Quit As String = "QUIT"
    Public Const ServerConfirm As String = "+OK"
    Public Const ServerNoMoreData As String = "."
    Public Const User As String = "USER "

    End Class

    '''<summary>
    '''Stellt die Verbindung zum POP3-Server her.
    '''</summary>
    '''<param name="Server">Servername (subdomain.domain.tld)</param>
    '''<param name="User">Benutzername</param>
    '''<param name="Password">Passwort</param>
    Public Sub Connect(ByVal Server As String, ByVal User As String, ByVal Password As String)

    If Connected = True Then Me.Disconnect()
    Try
    Me.Client.Connect(Server, 110)
    Me.POP3Stream = Me.Client.GetStream
    Me.CheckResponse(Me.GetResponse)
    Me.Send(Commands.User + User)
    Me.CheckResponse(Me.GetResponse)
    Me.Send(Commands.Password + Password)
    Me.CheckResponse(Me.GetResponse)
    Me.Connected = True
    Catch ex As Exception
    Me.Disconnect()
    Throw New ApplicationException(ex.Message, ex)
    End Try

    End Sub

    '''<summary>
    '''Trennt die Verbindung zum POP3-Server her.
    '''</summary>
    Public Sub Disconnect()

    If Connected = True Then
    Me.Send(Commands.Quit)
    Me.CheckResponse(Me.GetResponse())
    Me.Connected = False
    Me.Client.Close()
    End If

    End Sub

    '''<summary>
    '''Sendet POP3 Befehl zum Server.
    '''</summary>
    '''<param name="Command">POP3 Befehl</param>
    Private Sub Send(ByVal Command As String)

    Dim data As [Byte]() = Text.Encoding.ASCII.GetBytes(Command & vbCrLf)
    Me.POP3Stream.Write(data, 0, data.Length)

    End Sub

    '''<summary>
    '''Empfängt Antwort auf Send-Befehl vom Server.
    '''</summary>
    Private Function GetResponse() As String

    Dim SR As New IO.StreamReader(Me.POP3Stream)
    Dim SBuilder As New Text.StringBuilder
    Do While SR.Peek > -1
    SBuilder.Append(SR.ReadLine + vbCr)
    Loop
    Return SBuilder.ToString

    End Function

    '''<summary>
    '''Prüft ob die erhalten Antwort von GetResponse gültig ist.
    '''</summary>
    '''<param name="Response">Antort von GetResponse</param>
    Private Sub CheckResponse(ByVal Response As String)

    If Not String.Compare(Response.Substring(0, 3), Commands.ServerConfirm, False, Globalization.CultureInfo.CurrentCulture) = 0 Then
    Me.Client.Close()
    Me.Connected = False
    Throw New ApplicationException("Response " + Response + " not expected.")
    End If

    End Sub

    '''<summary>
    '''Gibt eine List(of POP3Message) der verfügbaren Nachrichten zurück.
    '''</summary>
    Public Function GetMessageList() As List(Of MessageList)

    If Me.Connected = False Then
    Throw New InvalidOperationException("Not connected!")
    End If
    Dim Pop3l As New List(Of MessageList)
    Me.Send(Commands.List)
    Dim Response() As String = Me.GetResponse.Split(vbCrLf)
    CheckResponse(Response(0))

    For i As Integer = 1 To Response.Length - 3
    Dim POP3m As New MessageList
    POP3m.ID = i
    POP3m.Size = Convert.ToInt64(Response(i).Split(" ")(1))
    Pop3l.Add(POP3m)
    Next

    Return Pop3l

    End Function

    '''<summary>
    '''Nachricht mit angebener Nummer vom Server lesen
    '''</summary>
    '''<param name="MessageID">MessageID</param>
    Public Function GetMessage(ByVal MessageID As Integer) As String

    If Me.Connected = False Then
    Throw New InvalidOperationException("Not connected!")
    End If
    Me.Send(Commands.GetMessage & MessageID)
    Me.CheckResponse(Me.GetResponse)
    Dim Response As String = Me.GetResponse
    Return Response

    End Function

    End Class

    Das Problem

    Mein Problem ist

    VB.NET-Quellcode

    1. Dim SBuilder As New Text.StringBuilder


    und

    VB.NET-Quellcode

    1. Dim data As [Byte]() = Text.Encoding.ASCII.GetBytes(Command & vbCrLf)


    er hat bei mir mit dem text Probleme und ich weis nicht wie ich das beheben kann
    hallo rumpetboy,

    mit tags meine ich, setzt am anfang und am ende deines codes die tags damit es nach code aussieht.
    macht das ganze übersichtlicher.

    im letzten post hast du es ja.

    nun zum code
    setzt mal

    VB.NET-Quellcode

    1. Imports System.Text.Encoding

    und

    VB.NET-Quellcode

    1. Dim data As [Byte]() = ASCII.GetBytes(Command() & vbCrLf)

    dann sollte die fehlermeldung weg sein.

    gruss

    mikeb69

    KLappt net

    NE jetzt hab ich leider 3 Fehler ich weis auch wenn ich das eine Dimulierte mit dem hier

    VB.NET-Quellcode

    1. Dim data As [Byte]() = ASCII.GetBytes(Command() & vbCrLf)
    ersetze tritt ein anderer Fehler auf das er Command nicht kennt.



    Code

    VB.NET-Quellcode

    1. Imports System.Text.Encoding
    2. Public Class Client
    3. Private Client As New Net.Sockets.TcpClient
    4. Private POP3Stream As Net.Sockets.NetworkStream
    5. Private Connected As Boolean = False
    6. '''<summary>
    7. '''Verbindungssatus abfragen.
    8. '''</summary>
    9. Public ReadOnly Property ConnectionEstablished() As Boolean
    10. Get
    11. Return Connected
    12. End Get
    13. End Property
    14. '''<summary>
    15. '''Nachrichten Klasse
    16. '''</summary>
    17. Public Class MessageList
    18. Public ID As Int64
    19. Public Size As Int64
    20. End Class
    21. '''<summary>
    22. '''Verfügbarer POP3 Befehlssatz.
    23. '''</summary>
    24. Private Class Commands
    25. Public Const Delete As String = "DELE "
    26. Public Const GetMessage As String = "RETR "
    27. Public Const List As String = "LIST"
    28. Public Const Password As String = "PASS "
    29. Public Const Quit As String = "QUIT"
    30. Public Const ServerConfirm As String = "+OK"
    31. Public Const ServerNoMoreData As String = "."
    32. Public Const User As String = "USER "
    33. End Class
    34. '''<summary>
    35. '''Stellt die Verbindung zum POP3-Server her.
    36. '''</summary>
    37. '''<param name="Server">Servername (subdomain.domain.tld)</param>
    38. '''<param name="User">Benutzername</param>
    39. '''<param name="Password">Passwort</param>
    40. Public Sub Connect(ByVal Server As String, ByVal User As String, ByVal Password As String)
    41. If Connected = True Then Me.Disconnect()
    42. Try
    43. Me.Client.Connect(Server, 110)
    44. Me.POP3Stream = Me.Client.GetStream
    45. Me.CheckResponse(Me.GetResponse)
    46. Me.Send(Commands.User + User)
    47. Me.CheckResponse(Me.GetResponse)
    48. Me.Send(Commands.Password + Password)
    49. Me.CheckResponse(Me.GetResponse)
    50. Me.Connected = True
    51. Catch ex As Exception
    52. Me.Disconnect()
    53. Throw New ApplicationException(ex.Message, ex)
    54. End Try
    55. End Sub
    56. '''<summary>
    57. '''Trennt die Verbindung zum POP3-Server her.
    58. '''</summary>
    59. Public Sub Disconnect()
    60. If Connected = True Then
    61. Me.Send(Commands.Quit)
    62. Me.CheckResponse(Me.GetResponse())
    63. Me.Connected = False
    64. Me.Client.Close()
    65. End If
    66. End Sub
    67. '''<summary>
    68. '''Sendet POP3 Befehl zum Server.
    69. '''</summary>
    70. '''<param name="Command">POP3 Befehl</param>
    71. Private Sub Send(ByVal Command As String)
    72. Dim data As [Byte]() = Text.Encoding.ASCII.GetBytes(Command & vbCrLf)
    73. Me.POP3Stream.Write(data, 0, data.Length)
    74. End Sub
    75. '''<summary>
    76. '''Empfängt Antwort auf Send-Befehl vom Server.
    77. '''</summary>
    78. Private Function GetResponse() As String
    79. Dim SR As New IO.StreamReader(Me.POP3Stream)
    80. Dim SBuilder As New Text.StringBuilder
    81. Do While SR.Peek > -1
    82. SBuilder.Append(SR.ReadLine + vbCr)
    83. Loop
    84. Return SBuilder.ToString
    85. End Function
    86. '''<summary>
    87. '''Prüft ob die erhalten Antwort von GetResponse gültig ist.
    88. '''</summary>
    89. '''<param name="Response">Antort von GetResponse</param>
    90. Private Sub CheckResponse(ByVal Response As String)
    91. If Not String.Compare(Response.Substring(0, 3), Commands.ServerConfirm, False, Globalization.CultureInfo.CurrentCulture) = 0 Then
    92. Me.Client.Close()
    93. Me.Connected = False
    94. Throw New ApplicationException("Response " + Response + " not expected.")
    95. End If
    96. End Sub
    97. '''<summary>
    98. '''Gibt eine List(of POP3Message) der verfügbaren Nachrichten zurück.
    99. '''</summary>
    100. Public Function GetMessageList() As List(Of MessageList)
    101. If Me.Connected = False Then
    102. Throw New InvalidOperationException("Not connected!")
    103. End If
    104. Dim Pop3l As New List(Of MessageList)
    105. Me.Send(Commands.List)
    106. Dim Response() As String = Me.GetResponse.Split(vbCrLf)
    107. CheckResponse(Response(0))
    108. For i As Integer = 1 To Response.Length - 3
    109. Dim POP3m As New MessageList
    110. POP3m.ID = i
    111. POP3m.Size = Convert.ToInt64(Response(i).Split(" ")(1))
    112. Pop3l.Add(POP3m)
    113. Next
    114. Return Pop3l
    115. End Function
    116. '''<summary>
    117. '''Nachricht mit angebener Nummer vom Server lesen
    118. '''</summary>
    119. '''<param name="MessageID">MessageID</param>
    120. Public Function GetMessage(ByVal MessageID As Integer) As String
    121. If Me.Connected = False Then
    122. Throw New InvalidOperationException("Not connected!")
    123. End If
    124. Me.Send(Commands.GetMessage & MessageID)
    125. Me.CheckResponse(Me.GetResponse)
    126. Dim Response As String = Me.GetResponse
    127. Return Response
    128. End Function
    129. End Class