用C#从POP3服务器取得邮件

王朝c#·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

Introduction

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

Implementation

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);

Status.Items.Clear();

try

{

// initialization

NetStrm = Server.GetStream();

RdStrm= new StreamReader(Server.GetStream());

Status.Items.Add(RdStrm.ReadLine());

// Login Process

Data = "USER "+ User.Text+CRLF;

szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());

NetStrm.Write(szData,0,szData.Length);

Status.Items.Add(RdStrm.ReadLine());

Data = "PASS "+ Passw.Text+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());

// 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());

NetStrm.Write(szData,0,szData.Length);

Status.Items.Add(RdStrm.ReadLine());

//close connection

NetStrm.Close();

RdStrm.Close();

// 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;

Message.Clear();

try

{

// retrieve mail with number mail parameter

Data = "RETR "+ Number.Text+CRLF;

szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());

NetStrm.Write(szData,0,szData.Length);

szTemp = RdStrm.ReadLine();

if(szTemp[0]!='-')

{

while(szTemp!=".")

{

Message.Text += szTemp;

szTemp = RdStrm.ReadLine();

}

}

else

{

Status.Items.Add(szTemp);

}

// back to normal cursor

Cursor.Current = cr;

}

catch(InvalidOperationException err)

{

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

}

}

Testing

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.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航