POP3-Abruf?! Nur Wie?

punisher86

Mitglied
Hallo Leute, ich programmiere zur Zeit an einem E-Mail-Client. Momentan läuft auch alles soweit gut und ich kann auch über authentifizierten SMTP-Servern Mails verschicken, sogar mit Datei-Anhang etc. Nun gehts um den POP-Abruf von E-Mails. Ich kann mich zwar schon mit dem POP-Server verbinden, das sieht wie folgt aus:

Code:
public void POPConnect()
{
	if (File.Exists("data.dat") == false)
	{
		MessageBox.Show("Bitte legen Sie ein Konto an oder korregieren Sie Ihre Eingaben!");
		Konto creKonto	= new Konto();
		creKonto.Show();
	}
	else
	{
		// Login-Data
		string[] lines = System.IO.File.ReadAllLines("data.dat");
		string POPServ = lines[2];
		string User = lines[4];
		string Passw = lines[5];
			
		// change cursor into wait cursor
		Cursor cr = Cursor.Current;
		Cursor.Current = Cursors.WaitCursor;
	
		// create server POP3 with port 110
		Server = new TcpClient(POPServ,110);								
		Status.Items.Clear();
	
		try
		{
			string welcome = "------------ Welcome to PrimeMail ------------";
			string stat = "--------------------LOAD Status--------------------";
			string end =  "----------------- Status FINISHED -----------------";
			Status.Items.Add(welcome.ToString());
			Status.Items.Add(stat.ToString());
			// initialization
			NetStrm = Server.GetStream();
			RdStrm= new StreamReader(Server.GetStream());
			Status.Items.Add(RdStrm.ReadLine());
	
			// Login Process
			Data = "USER "+ User+CRLF;				
			szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
			NetStrm.Write(szData,0,szData.Length);
			Status.Items.Add(RdStrm.ReadLine());
	
			Data = "PASS "+ Passw+CRLF;				
			szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
			NetStrm.Write(szData,0,szData.Length);
			Status.Items.Add(RdStrm.ReadLine());
	
			// Send STAT command to get information ie: number of mail and size
			Data = "STAT"+CRLF;				
			szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
			NetStrm.Write(szData,0,szData.Length);
			Status.Items.Add(RdStrm.ReadLine());
			Status.Items.Add(end.ToString());
			// back to normal cursor
			Cursor.Current = cr;
	
		}
		catch(InvalidOperationException err)
		{
			Status.Items.Add("Error: "+err.ToString());
		}
                   }
}

Soweit so gut, Ich habe auch schon was um zu empfangen. Ich muss im quasi einen Wert geben welche E-mail er abrufen soll. Diese zeigt er dann im richtextBox1 an. Diese lautet wie folgt:

Code:
public void POPReceive()
{
	// change cursor into wait cursor
	Cursor cr = Cursor.Current;
	Cursor.Current = Cursors.WaitCursor;	
	string szTemp;						
	richTextBox1.Clear();
	try
	{
		// retrieve mail with number mail parameter
		Data = "RETR "+ textBox1.Text+CRLF;				
		szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
		NetStrm.Write(szData,0,szData.Length);				

		szTemp = RdStrm.ReadLine();
		if(szTemp[0]!='-') 
		{
				
			while(szTemp!=".")
			{
				richTextBox1.Text += szTemp+CRLF;
				szTemp = RdStrm.ReadLine();
			}
		}
		else
		{
			Status.Items.Add(szTemp);
		}
							
		// back to normal cursor
		Cursor.Current = cr;

	}
	catch(InvalidOperationException err)
	{
		Status.Items.Add("Error: "+err.ToString());
	}
}

Nun wollte ich es gern so haben der der alle Mails abholt, ohne einen bestimmten Wert anzugeben. Hatte vielleicht überlegt erst alle in einem String-Array zu laden und dann weiterzuverarbeiten. Aber ich weiß net genau wie :-( Wollte halt letztendlich die Mails in einer ListBox angezeigt bekommen und dann per klick die Nachricht lesen. Nur weiß ich da nicht wie ich es nu weiter verwirkliche :-( Hat jemand mit dem POP-Abruf erfahrung gemacht?

Liebe Grüße

Punisher86
 
Hallo punisher86,

mit welchem Framework arbeitest du denn ?
Selbst unter Net 1.1 gab es glaube ich schon Klassen dafür
im System.Net Namespace und ab Net 2 gibt es auf jeden Fall
einen fertigen SMTP Mailclient in System.Net.Mail.
Warum also das Rad mit TcpClient neu erfinden ?

Gruß
Jens
 
Hi Jens,

Ich arbeite mit dem .NET 2....
In System.Net.Mail beinhaltet smtp, das stimmt :) Soweit habe ich das mit smtp gelöst :) Ich arbeite jetzt daran POP hinzubekommen :) Nur dafür gibt es glaub ich keine fertige klasse im .net oder? wüsste ich jedenfalls nicht :)

Gruß
 
Hi ?,

ja du jast Recht, da waren meine Finger wieder schneller als der
Kopf.
Ich habe aber eine Assembly die nicht von mir stammt sondern die ich mal
auf Codeproject.com gefunden habe.
Da sind ein SMTP und POP Client enthalten. Beides funktioniert tadellos und
ist bei mir schon lange im Einsatz.
Ich hänge das Projekt mal als Zip Datei an und bin sicher das hilft dir weiter.
Das meiste ist einfach und selbsterklärend.

Gruß
Jens
 

Anhänge

  • POP3SMTP.zip
    211 KB · Aufrufe: 30

Neue Beiträge

Zurück