VisualBasic E-Mails empfangen in VB2010

Irgendwie

Cadet 3rd Year
Registriert
Jan. 2012
Beiträge
40
Hey Leute,

Ich schreib gerade ein Programm, dass unter anderem E-Mails versenden soll und E-Mails von einer bestimmten E-Mailadr. empfangen soll.

Die Funktion zum Senden ist bereits fertig und funktioniert vollkommen.

Mit der Funktion zum Empfangen bin ich allerdings überfordert, da ich im Internet nichts passendes gefunden habe.
Entweder für VB2005, dass in der 2010 Version nicht funktioniert oder erklärungen, dass dies nicht funktioniere und man müsse sehr komplizierte umwege machen, um eine E-Mail zu bekommen (was ich mir aber nicht vorstellen kann) usw.

Meine Frage: Kann mir jemand von euch bei der Empfangsfunktion helfen bzw. den Code senden (evt. mit Kommentaren), falls es schon jemand von euch Programmiert hat?

Danke schon mal :D

---
Falls es jemanden weiterhilft, hier ist meine Sende-Funktion:
PHP:
Imports System.Windows
Imports System.IO
Imports System.Web
Imports System.Net.Mail

Private Sub send(ByVal Text As String, ByVal Betreff As String)
        Dim Mymailmessage As New MailMessage()
        Try
            Mymailmessage.From = New MailAddress("****@hotmail.com")
            Mymailmessage.To.Add("****@gmx.at")
            Mymailmessage.Subject = ("Betreff")
            Mymailmessage.Body = Text
            Dim SMTP As New SmtpClient("smtp.live.com")
            SMTP.Port = 587
            SMTP.EnableSsl = True
            SMTP.Credentials = New System.Net.NetworkCredential("****@hotmail.com", "PW")
            SMTP.Send(Mymailmessage)
        Catch ex As Exception
            MsgBox("Fehler!")
        End Try
    End Sub
 
Das .NET Framework bietet keine Klassen für POP oder IMAP.
Irgendwo habe ich mal eine IMAP-Lib gesehen, weiß aber nicht mehr wo. Google hilft dir hier weiter. Ansonsten einfach mal bei Codeplex schauen.
Falls auch da nichts zu finden ist, bleibt dir wohl nur die Möglichkeit sich ein wenig mit POP oder IMAP zu beschäftigen und den kram über einen Socket selber zu implementieren. POP kenn ich nicht genau, aber IMAP ist eigentlich ziemlich simpel.
 
Ich bin mal auf das hier gestoßen:

PHP:
Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.IO
Imports System.Threading
Public Class Form1
    Inherits System.Windows.Forms.Form
    Public stream As NetworkStream
    Public sr As StreamReader

    Private Function sendCommand(ByVal send As String) As String
        send += vbCrLf
        Dim data As [Byte]() = Encoding.ASCII.GetBytes(send)
        stream.Write(data, 0, data.Length)
        sr = New StreamReader(stream)
        Dim buffer As New StringBuilder
        Do While sr.Peek() > 0
            Thread.Sleep(100)
            buffer.Append(sr.ReadLine + vbCrLf)
        Loop
        Return buffer.ToString
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim server As String = "mx.freenet.de"
        Dim user As String = "****@freenet.de"
        Dim password As String = "****"
        Dim message As String
        Dim send As String
        Dim client As New TcpClient(server, 587)
        stream = client.GetStream()
        sr = New StreamReader(stream)
        Dim txtResponse As String = ""
        txtResponse += sendCommand("?")
        txtResponse += sendCommand("USER " + user)
        txtResponse += sendCommand("PASS " + password)
        txtResponse += sendCommand("STAT" + vbCrLf)
        txtResponse += sendCommand("RETR 1" + vbCrLf) 'hole erstes Mail
        txtResponse += sendCommand("QUIT" + vbCrLf)
        MsgBox(txtResponse) 'Die ist leer
    End Sub
End Class

Allerdings steht in txtResponse danach "554 SMTP synchronization error"

Hat jemand vl. eine Erklärung (mit evt. Lösung) ?
 
Zuletzt bearbeitet: (Zitat statt PHP Code verwendet)
Ich schätz, dass er der Server nicht mag, wenn du Username und Passwort sendest, bevor er dich danach fragt:
Fehlerzeilen:
18-21:
while sr.Peek>0 kann nicht gut gehen, da der Server gar nihct so schnell antworten kann-> leere Ausgabe->sofort neue Anfrage->Server meckert, weil du die Antwort nicht abgewartet hast->Fehlermeldung

Vorschlag:
POP3 Spezifikation lesen.
Warte bei sendCommand auf das CRLF und gebe erst dann die Antwort zurück. (Funktioniert nicht bei RETR, da musst du auf "CRLF.CRLF" warten).
Du weißt, dass 587 der SSL-Port ist?
Auf Fehlermeldung Prüfen ("-XXX Fehlermeldung")
 
Zuletzt bearbeitet:
Ah, danke :D

Wegen den Ports: Ich weiß nicht welcher Port für was zuständig ist, ich hab das mit den Verbindungen mal gegoogelt und kam auf folgende Seite: http://www.patshaping.de/hilfen_ta/pop3_smtp.htm#mailer
Nachdem man ja zum Verbinden einen Port benötigt, hab ich ohne viel nachdenken diesen einen angegebenen Port verwendet :S
Gibt es für diesen Zweck, den ich benötige, einen Standart-Port?
(Ich bitte um Entschuldigung für nicht vorhandenes Wissen in diesem Bereich, da ich normal nur lokale Anwendungen programmiere)
 
Danke :D

Ich hätte nur noch eine Frage, dann wüste ich alles was ich brauch:
Also ich kann mir jetzt alle Nachrichten vom Server hollen, aber die Nachrichten werden nicht als gelesen makiert. Also holl ich mir immer wieder die Selben Mails runter.
Wie kann ich dies realisieren? (zum Notfall wäre löschen auch ok)
 
danke an alle :D
Mein Programm funktioniert jetzt ganz (:

Von mir aus kann das Thema geschlossen werden (:
 
Zurück
Oben