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:
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:
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
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