Click here to Skip to main content
13,198,482 members (64,670 online)
Click here to Skip to main content
Add your own
alternative version


140 bookmarked
Posted 12 Jan 2002

Retrieve Mail From a POP3 Server Using C#

, 19 Jan 2002
Rate this:
Please Sign up or sign in to vote.
A simple program for retrieving mails from a POP3 server, based on RFC 1725.

Sample Image - GUI.gif


In this article, I'll show you how to retrieve mail from POP server based on RFC 1725.

Algorithm for Retrieving Mail

To retrieve mail from POP server, I just follow rule of RFC 1725. You also can download that paper (RFC 1725). 

Here's the algorithm:   

 Client   : +OK Server POP  Ready!!
 Client   : USER xxx
 Server   : +OK
 Client   : PASS yyy
 Server   : +OK user successfully logged on
 Client   : STAT
 Server   : +OK n m
 Client   : RETR 1
 Server   : +OK
               ---{ data }-----
 Client   : QUIT
 Server   : +OK Server POP signing off


It's easy to implement an application if we know the algorithm to retrieve mail from a POP server. In this article, I use the TcpClient and NetworkStream classes. Firstly, declare public variables:

public TcpClient Server;
public NetworkStream NetStrm;
public StreamReader  RdStrm;
public string Data;
public byte[] szData;
public string CRLF = "\r\n";

Here's the code for when the Connect Button is clicked:

private void ConnectBtn_Click(object sender, System.EventArgs e)
    // change cursor into wait cursor
    Cursor cr = Cursor.Current;
    Cursor.Current = Cursors.WaitCursor;

    // create server POP3 with port 110
    Server = new TcpClient(POPServ.Text,110);

        // initialization
        NetStrm = Server.GetStream();
        RdStrm= new StreamReader(Server.GetStream());

        // Login Process
        Data = "USER "+ User.Text+CRLF;
        szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());

        Data = "PASS "+ Passw.Text+CRLF;
        szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());

        // Send STAT command to get information ie: number of mail and size
        Data = "STAT"+CRLF;
        szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());

        // change enabled - disabled button
        ConnectBtn.Enabled = false;
        DisconnectBtn.Enabled = true;
        RetrieveBtn.Enabled = true;

        // back to normal cursor
        Cursor.Current = cr;

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

Here's the code for when the Disconnect Button is clicked:

private void DisconnectBtn_Click(object sender, System.EventArgs e)
    // change cursor into wait cursor
    Cursor cr = Cursor.Current;
    Cursor.Current = Cursors.WaitCursor;

    // Send QUIT command to close session from POP server
    Data = "QUIT"+CRLF;
    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());

    //close connection

    // change enabled - disabled button
    ConnectBtn.Enabled = true;
    DisconnectBtn.Enabled = false;
    RetrieveBtn.Enabled = false;

    // back to normal cursor
    Cursor.Current = cr;

Here's code when Retrieve Button clicked:

private void RetrieveBtn_Click(object sender, System.EventArgs e)
    // change cursor into wait cursor
    Cursor cr = Cursor.Current;
    Cursor.Current = Cursors.WaitCursor;
    string szTemp;
        // retrieve mail with number mail parameter
        Data = "RETR "+ Number.Text+CRLF;
        szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());

        szTemp = RdStrm.ReadLine();
                Message.Text += szTemp;
                szTemp = RdStrm.ReadLine();
        // back to normal cursor
        Cursor.Current = cr;

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



Build and run this project. Set the POP server, user and password. After that you'll get a response message from the POP server (you can see on status box) ie: +OK 2 624 if success or -ERR if fail. The words "+OK 2 624" mean you have two emails and total size 624.

Now, you can set the mail message number and then click Retrieve button. Then you'll get the mail according to the mail number that you wrote on Mail Number Box.


  • MSDN for .NET framework
  • RFC 1725


20 Jan 2002 - fixed non-critical GUI problem


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Agus Kurniawan
Founder PE College
Indonesia Indonesia
He gradueted from Sepuluh Nopember Institute of Technology (ITS) in Department of Electrical Engineering, Indonesia. His programming interest is VC++, C#, VB, VB.NET, .NET, VBScript, Delphi, C++ Builder, Assembly,and ASP/ASP.NET. He's founder for PE College(, free video tutorial about programming, infrastructure, and computer science. He's currently based in Depok, Indonesia. His blog is and

You may also be interested in...


Comments and Discussions

Questiontrouble with checked as not read emails on server Pin
ice_ok3-Apr-14 4:56
memberice_ok3-Apr-14 4:56 
Generalexception Pin
hammadsalik8-Mar-14 21:41
memberhammadsalik8-Mar-14 21:41 
QuestionSocketException Pin
Antz41127-Feb-14 23:17
memberAntz41127-Feb-14 23:17 
QuestionGet the total number of emails in Inbox Pin
viragdesai30-Apr-13 20:15
memberviragdesai30-Apr-13 20:15 
QuestionI connect but I see no emails Pin
muslera4-Nov-12 12:09
membermuslera4-Nov-12 12:09 
Questiononly get a part of mails Pin
sbmzhcn21-Sep-12 22:54
membersbmzhcn21-Sep-12 22:54 
QuestionConnection problems! Pin
Member 376860924-Jul-12 0:11
memberMember 376860924-Jul-12 0:11 

I'm relatively new to network programming was skimming through the article and tried the code but it didn't work. Then, with some surfing through MSDN documentation and the Internet resources other than MSDN, I found about SslStream and decided to use it instead of NetworkStream class. I replaced the SslStream in place of NetworkStream and Viola! It started working like it never stopped! So anyone trying the code please use SslStream in System.Net.Security namespace instead of NetworkStream. Enjoy!


QuestionI am getting the error Pin
T. Abdul Rahman9-Dec-11 19:38
memberT. Abdul Rahman9-Dec-11 19:38 
Generalvalue cannot be null ;parameter name : item Pin
yoga arista8-Feb-11 23:24
memberyoga arista8-Feb-11 23:24 
Generalmail folders Pin
stijnn_1713-Dec-10 8:57
memberstijnn_1713-Dec-10 8:57 
GeneralRe: mail folders Pin
kirnyk25-Apr-11 4:37
memberkirnyk25-Apr-11 4:37 
Generalvalue can not be null... Pin
lsb_safari16-Sep-10 8:53
memberlsb_safari16-Sep-10 8:53 
QuestionHow to Read folder lik "junk" or any customized folder on mailserver? Pin
jymitra19-Jul-10 21:46
memberjymitra19-Jul-10 21:46 
GeneralDecode uft-8, iso-8859-1, ... Pin
João Batista Carvalho23-Mar-10 8:30
memberJoão Batista Carvalho23-Mar-10 8:30 
Questiongetting _ERRbad login Pin
Meena.G17-Jul-09 19:42
memberMeena.G17-Jul-09 19:42 
AnswerRe: getting _ERRbad login Pin
Manesh.C.S24-Feb-11 4:39
memberManesh.C.S24-Feb-11 4:39 
Generaldon't work with Pin
kyo0071023-May-09 21:17
memberkyo0071023-May-09 21:17 
GeneralRe: don't work with Pin
Meetu Choudhary19-Aug-09 2:08
memberMeetu Choudhary19-Aug-09 2:08 
GeneralRe: don't work with Pin
Ram Prasad29-Nov-09 22:27
memberRam Prasad29-Nov-09 22:27 
GeneralRe: don't work with [modified] Pin
kyo007101-Dec-09 3:14
memberkyo007101-Dec-09 3:14 
GeneralRe: don't work with Pin
pratapraju5-Aug-10 6:24
memberpratapraju5-Aug-10 6:24 
GeneralRe: don't work with Pin
muslera4-Nov-12 12:03
membermuslera4-Nov-12 12:03 
GeneralRe: don't work with Pin
tyni8-Apr-10 11:34
membertyni8-Apr-10 11:34 
GeneralRe: don't work with Pin
Danie de Kock7-Jun-10 8:53
memberDanie de Kock7-Jun-10 8:53 
GeneralRe: don't work with Pin
T. Abdul Rahman9-Dec-11 20:01
memberT. Abdul Rahman9-Dec-11 20:01 
Generalreceive mail from hotmail Pin
fatz1213-Apr-09 12:27
memberfatz1213-Apr-09 12:27 
GeneralRe: receive mail from hotmail Pin
Member 890050230-Apr-12 7:11
memberMember 890050230-Apr-12 7:11 
Generalfrom hotmail Pin
fatz1213-Apr-09 12:07
memberfatz1213-Apr-09 12:07 
QuestionPOP3 Pin
Shu-Wen8-Mar-09 21:17
memberShu-Wen8-Mar-09 21:17 
QuestionWhat is the "Mail Number"? Pin
ONeil Tomlinson17-Dec-08 0:51
memberONeil Tomlinson17-Dec-08 0:51 
AnswerRe: What is the "Mail Number"? Pin
juanocen8-Jan-09 1:39
memberjuanocen8-Jan-09 1:39 
QuestionHow do I save the message in the Inbox\new foder Pin
nirmalamari11-Aug-08 9:00
membernirmalamari11-Aug-08 9:00 
AnswerRe: How do I save the message in the Inbox\new foder Pin
ONeil Tomlinson17-Dec-08 0:49
memberONeil Tomlinson17-Dec-08 0:49 
Generalim using pop3mimeclient Pin
jayas22-Mar-08 2:31
memberjayas22-Mar-08 2:31 
Questionhi Good pls help me Pin
yogarajan ganesan14-Mar-08 2:32
memberyogarajan ganesan14-Mar-08 2:32 
GeneralError In This Code Pin
~V~18-Feb-08 0:56
member~V~18-Feb-08 0:56 
GeneralRe: Error In This Code Pin
Yesugey3-Aug-09 4:28
memberYesugey3-Aug-09 4:28 
GeneralValue can not be null [modified] Pin
npipaliya29-Nov-07 18:57
membernpipaliya29-Nov-07 18:57 
Generalconnection attempts failed Pin
jain_abhishek_siet12-Sep-07 22:15
memberjain_abhishek_siet12-Sep-07 22:15 
QuestionNeed the help Pin
minpeng200610-Sep-07 7:08
memberminpeng200610-Sep-07 7:08 
Generalhelp me!!! Pin
saobangtn2231-Aug-07 17:01
membersaobangtn2231-Aug-07 17:01 
QuestionNeed help Pin
kanzz7-Aug-07 22:03
memberkanzz7-Aug-07 22:03 
Generalproblem with retreiving mail Pin
Mostafa_Ismail22-Jul-07 2:41
memberMostafa_Ismail22-Jul-07 2:41 
QuestionHow To read Attached doc file from pop3 [modified] Pin
u3033827-Apr-07 21:31
memberu3033827-Apr-07 21:31 
QuestionCan it be stored in outlook? Pin
zjkida25-May-06 8:19
memberzjkida25-May-06 8:19 
GeneralProblem in POP3 Server Pin
SR Ranjini19-Apr-06 19:24
memberSR Ranjini19-Apr-06 19:24 
GeneralRe: Problem in POP3 Server Pin
gohil7715-Jun-06 23:09
membergohil7715-Jun-06 23:09 
GeneralQuestion Pin
kraster19-Apr-06 1:41
memberkraster19-Apr-06 1:41 
GeneralThanks for the code Pin
Lalitha V19-Oct-05 5:17
sussLalitha V19-Oct-05 5:17 
GeneralConnect to SSL POP3 Pin
Anonymous23-Aug-05 7:08
sussAnonymous23-Aug-05 7:08 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.171020.1 | Last Updated 20 Jan 2002
Article Copyright 2002 by Agus Kurniawan
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid