Between the calls to Connect
and Disconnect
,
the client may call three other methods, List
, Retrieve
and Delete
,
any number of times. The client will usually begin by calling our List
method
to retrieve an array of messages that are queued on the POP3 server.
public ArrayList List()
{
string message;
string response;
ArrayList retval = new ArrayList();
message = "LIST\r\n";
Write(message);
response = Response();
if (response.Substring(0, 3) != "+OK")
{
throw new Pop3Exception(response);
}
while (true)
{
response = Response();
if (response == ".\r\n")
{
return retval;
}
else
{
Pop3Message msg = new Pop3Message();
char[] seps = { ' ' };
string[] values = response.Split(seps);
msg.number = Int32.Parse(values[0]);
msg.bytes = Int32.Parse(values[1]);
msg.retrieved = false;
retval.Add(msg);
continue;
}
}
}
After sending the LIST
message to the POP3 server, the server
will respond with a +OK
acknowledgement, followed by several lines
representing one message each and finally by a line with a single period indicating
the end of the messages. Each message line has two numbers, the first indicating
the unique number of the message and the second indicating the message size
in bytes.
Our List
method will return a list of Pop3Message
objects.
The objects will only contain the message number and size of each message.
In order to retrieve the full message, you can pass the message object to the Retrieve
method.
The Retrieve
method will then respond with another Pop3Message
containing
the message content.
public Pop3Message Retrieve(Pop3Message rhs)
{
string message;
string response;
Pop3Message msg = new Pop3Message();
msg.bytes = rhs.bytes;
msg.number = rhs.number;
message = "RETR " + rhs.number + "\r\n";
Write(message);
response = Response();
if (response.Substring(0, 3) != "+OK")
{
throw new Pop3Exception(response);
}
msg.retrieved = true;
while (true)
{
response = Response();
if (response == ".\r\n")
{
break;
}
else
{
msg.message += response;
}
}
return msg;
}
To retrieve a message from a POP3 server, we send a RETR
message
with the unique message number. The server then responds with the +OK
acknowledgement,
the message content and finally the single period terminating line.
Comments