我刚好写了一个,参考一下吧!
[STAThread]
static void Main(string[] args)
{
TcpClient tcpClient = new TcpClient();
try
{
tcpClient.Connect("email.com", 110);
NetworkStream networkStream = tcpClient.GetStream(); if(networkStream.CanWrite && networkStream.CanRead)
{ string returndata;
// Does a simple write.
//Write2Net(networkStream,"hello");
      
// Reads the NetworkStream into a byte buffer.
returndata = ReadNet(tcpClient,networkStream); Write2Net(networkStream,"USER xxx");
returndata = ReadNet(tcpClient,networkStream); Write2Net(networkStream,"PASS ***");
returndata = ReadNet(tcpClient,networkStream); //Write2Net(networkStream,"STAT");
//returndata = ReadNet(tcpClient,networkStream);

int mailCount = 0;
string[] s = returndata.Split(new char[]{' '});
if (s.Length > 1) mailCount = int.Parse(s[1]); for (int i=1;i<=mailCount;i++)
{
                        Write2Net(networkStream,"RETR " + i);
returndata = ReadNet(tcpClient,networkStream);
} Write2Net(networkStream,"QUIT");
returndata = ReadNet(tcpClient,networkStream);
}
else if (!networkStream.CanRead)
{
Console.WriteLine("You can not write data to this stream");
tcpClient.Close();
}
else if (!networkStream.CanWrite)
{             
Console.WriteLine("You can not read data from this stream");
tcpClient.Close();
}
}
catch (Exception e ) 
{
Console.WriteLine(e.ToString());
}
finally
{
tcpClient.Close();
} Console.ReadLine();
} static void Write2Net(NetworkStream ns, string sendString)
{
Byte[] sendBytes = Encoding.ASCII.GetBytes(sendString+"\n\r");
ns.Write(sendBytes,0,sendBytes.Length);
Console.WriteLine("C->S: " + sendString);
} static string ReadNet(TcpClient tcpClient, NetworkStream networkStream)
{
byte[] bytes = new byte[1024];
int count = 0;
string returndata = ""; do
{
count = networkStream.Read(bytes, 0, 1024);
returndata += Encoding.ASCII.GetString(bytes,0,count);
}while (count == 1024);
  

Console.WriteLine("S->C: " + returndata); return returndata;
}
}