System.Text.Encoding.Default
改成
System.Text.Encoding..GetEncoding("gb2312")
试试

解决方案 »

  1.   

    好像是不行呀。
    public class POP3
    {
    string POPServer;
    string user;
    string pwd;
    NetworkStream ns;
    StreamReader sr; public POP3(){} public POP3(string server, string _user, string _pwd)
    {
    POPServer = server;
    user = _user;
    pwd = _pwd;
    } private void Connect()
    {
    TcpClient sender = new TcpClient(POPServer,110);

    byte[] outbytes;
    string input; try
    {
    ns = sender.GetStream();
    //sr = new StreamReader(ns);
    sr = new StreamReader(ns,System.Text.Encoding.GetEncoding("gb2312"));//好像光这样不行。能不能全部用ascii读出来后转成gb sr.ReadLine();
    //Console.WriteLine(sr.ReadLine() ); input = "user " + user + "\r\n";
    outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
    ns.Write(outbytes,0,outbytes.Length) ;
    sr.ReadLine();
    //Console.WriteLine(sr.ReadLine() ); input = "pass " + pwd + "\r\n";
    outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
    ns.Write(outbytes,0,outbytes.Length) ;
    sr.ReadLine();
    //Console.WriteLine(sr.ReadLine() );

    }
    catch(InvalidOperationException ioe)
    {
    Console.WriteLine("Could not connect to mail server");
    }
    } private void Disconnect()
    {
    string input = "quit" + "\r\n";
    byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
    ns.Write(outbytes,0,outbytes.Length);
    //Console.WriteLine(sr.ReadLine() );
    ns.Close();
    } public int GetNumberOfNewMessages()
    {
    byte[] outbytes;
    string input; try
    {
    Connect(); input = "stat" + "\r\n";
    outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
    ns.Write(outbytes,0,outbytes.Length);
    string resp = sr.ReadLine();
    //Console.WriteLine(resp);
    string[] tokens = resp.Split(new Char[] {' '}); Disconnect(); return Convert.ToInt32(tokens[1]);
    }
    catch(InvalidOperationException ioe)
    {
    Console.WriteLine("Could not connect to mail server");
    return 0;
    }
    } public ArrayList GetNewsMessageSubject()
    {
    int newcount;
    ArrayList sub=new ArrayList();
    try
    {
    newcount = GetNumberOfNewMessages();
    Connect();
    for(int n=1; n<newcount+1; n++)
    {
    ArrayList msglines = GetRawMessage(n);
    string msgsubj = GetMessageSubject(msglines);
    sub.Add(msgsubj);
    }
    Disconnect();
    return sub;
    }
    catch(Exception e)
    {
    Console.WriteLine(e.ToString() );
    Console.ReadLine();
    return sub;
    }
    } private ArrayList GetRawMessage (int messagenumber)
    {
    byte[] outbytes;
    string input;
    string line = ""; input = "retr " + messagenumber.ToString() + "\r\n";
    outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
    ns.Write(outbytes,0,outbytes.Length); ArrayList msglines = new ArrayList();
    do
    {
    line = sr.ReadLine();
    msglines.Add(line);
    } while (line != ".");
    msglines.RemoveAt(msglines.Count-1); return msglines;
    }
    private string GetMessageSubject(ArrayList msglines)
    {
    string[] tokens;
    IEnumerator msgenum = msglines.GetEnumerator();
    while (msgenum.MoveNext() )
    {
    string line = (string)msgenum.Current;
    if(line.StartsWith("Subject:") )
    {
    tokens = line.Split(new Char[] {' '});
    return tokens[1].Trim();
    }
    }
    return "None";
    }
    private string GetMessageFrom (ArrayList msglines)
    {
    string[] tokens;
    IEnumerator msgenum = msglines.GetEnumerator();
    while (msgenum.MoveNext() )
    {
    string line = (string)msgenum.Current;
    if(line.StartsWith("Return-Path:") )
    {
    tokens = line.Split(new Char[] {'<'});
    return tokens[1].Trim(new Char[] {'<','>'});
    }
    }
    return "None";
    }
    }