string strServerName = "";//邮件服务器名
                string strUserName = "";//用户名
                string strPassWord = ""; //密码
                StringBuilder strBuildeMailMessage = new StringBuilder();
                int numberOfBytesRead = 0;
                int length = 1024 * 10;
                byte[] buttfer = new byte[length];
                TcpClient tp = new TcpClient(strServerName, 110);
                tp.ReceiveTimeout = 1000 * 300;
                NetworkStream ns = tp.GetStream();
                ns.ReadTimeout = 1000 * 300;
                ns.Read(buttfer, 0, buttfer.Length);                byte[] outbytes = System.Text.Encoding.ASCII.GetBytes("user " + strUserName + "\r\n");
                ns.Write(outbytes, 0, outbytes.Length);
                numberOfBytesRead = ns.Read(buttfer, 0, buttfer.Length);
                strBuildeMailMessage.Append(System.Text.Encoding.ASCII.GetString(buttfer, 0, numberOfBytesRead));                strBuildeMailMessage = new StringBuilder();
                outbytes = System.Text.Encoding.ASCII.GetBytes("pass " + strPassWord + "\r\n");
                ns.Write(outbytes, 0, outbytes.Length);
                numberOfBytesRead = ns.Read(buttfer, 0, buttfer.Length);
                strBuildeMailMessage.Append(System.Text.Encoding.ASCII.GetString(buttfer, 0, numberOfBytesRead));
                Regex re = new Regex(@"(?<=has\s+)[\d]+(?=\s+messages)");
                int num = int.Parse(re.Match(strBuildeMailMessage.ToString()).Value.Trim());
                List<string> emailList = new List<string>();
                for (int i = 1; i <= num; i++)
                {
                    strBuildeMailMessage = new StringBuilder();
                    outbytes = System.Text.Encoding.ASCII.GetBytes("retr " + i.ToString() + "\r\n");
                    ns.Write(outbytes, 0, outbytes.Length);
                    Thread.Sleep(800);
                    while (ns.DataAvailable)
                    {
                        numberOfBytesRead = ns.Read(buttfer, 0, buttfer.Length);
                        strBuildeMailMessage.Append(System.Text.Encoding.ASCII.GetString(buttfer, 0, numberOfBytesRead));
                    }
                    emailList.Add(strBuildeMailMessage.ToString());
                }
                outbytes = System.Text.Encoding.ASCII.GetBytes("quit\r\n");
                ns.Write(outbytes, 0, outbytes.Length);

解决方案 »

  1.   

    服务器名称应该怎么写才对啊,我用的是gmail,110端口默认是开启的
    TcpClient tcp=new TcpClient("pop.gmail.com",110);//这句异常
    异常内容:(我哪里是不是写错了)
    由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 74.125.155.109:110
      

  2.   

    看看端口号是否正常,没有使用过gmail,看网上的资料貌似是995
      

  3.   

    tcp.GetStream();//异常"不允许对非连接的套接字执行此操作。"
    tcp.Connected的值是false,没有连接上啊...该怎么解决啊
      

  4.   

    string strServerName = "pop.gmail.com";//邮件服务器名
                    string strUserName = "";//用户名
                    string strPassWord = ""; //密码
                    StringBuilder strBuildeMailMessage = new StringBuilder();
                    int numberOfBytesRead = 0;
                    int length = 1024 * 10;
                    byte[] buttfer = new byte[length];
                    TcpClient tp = new TcpClient(strServerName, 995);
                    tp.ReceiveTimeout = 1000 * 300;
                    NetworkStream ns = tp.GetStream();
                    ns.ReadTimeout = 1000 * 300;
                    ns.Read(buttfer, 0, buttfer.Length);将端口修改为995,测试连接状态为true你试试
      

  5.   

    Connected=true,但是
    NetWorkStream nwStream=tcp.GetStream();//这一句有异常
    异常内容是:
    不允许对非连接的套接字执行此操作。
    请赐教!
      

  6.   

    tcp.Client....
    EnableBroadcast “tcp.Client.EnableBroadcast”引发了“System.Net.Sockets.SocketException”类型的异常 bool {System.Net.Sockets.SocketException}
      

  7.   

    你想读取信息直接读取buttfer就行了
      

  8.   

    刚学.net
    能不能写些代码看看啊,
      

  9.   

    int num = int.Parse(re.Match(strBuildeMailMessage.ToString()).Value.Trim());
    strBuilderMailMessage.ToString()  的值是""空啊
      

  10.   

    gmail 
    smtp/pop3/imap 都是用 ssl 协议的,端口分别为:465
    995
    993建立 tcp 连接后, 要立马进行 ssl 协商, 获得一个 ssl stream, 才开始正常通讯
      

  11.   

    差不多样子:        NetworkStream networkStream = new NetworkStream(_socket, true);
            if (m_useSSL)
            {
              // Create an SSL stream that will close the client's stream.
              SslStream sslStream = new SslStream(
                  networkStream,
                  false,
                  new RemoteCertificateValidationCallback(ValidateServerCertificate),
                  null
                  );
              try
              {
                if (null != _proxy)
                  sslStream.AuthenticateAsClient(_proxy.TargetHost);
                else
                  sslStream.AuthenticateAsClient(sHost);
              }
              catch (System.Security.Authentication.AuthenticationException e)
              {
                string lastError = e.Message;
                if (e.InnerException != null)
                {
                  lastError += Environment.NewLine + e.InnerException.Message;
                }
                OnLog(LogType.ERROR, lastError);
                _networkStream.Close();
                return ImapResponseEnum.IMAP_FAILURE_RESPONSE;
              }          _networkStream = sslStream;
            }//end of usessl