zoukankan      html  css  js  c++  java
  • C#POP3协议实现SSL验证登陆GMAIL

    最近在折腾POP3协议,登陆pop.qq.com和pop.163.com没有什么问题,于是就想着登陆pop.gmail.com,结果失败了。经查,发现gmail的pop3端口不是110,而是995。于是改了端口,但是登陆还是失败了。后面查了资料,发现原来是gmail采用的是ssl验证,不能直接连接。那C#要如何实现SSL连接呢?查了很多资料后,发现可以通过SslStream来实现。

    下面是SslStream实现连接的代码

      private StreamReader pop3StreamReader_ = null;
            private SslStream pop3Stream_ = null;
    
          
            public void connect(string host, int port)
            {
                try
                {
    
                    TcpClient popServer = new TcpClient(host, port);
    
                    pop3Stream_ = new SslStream(popServer.GetStream(), false);
                    pop3Stream_.AuthenticateAsClient(host);
                    isConnected_pro = true;
                    pop3StreamReader_ = new StreamReader(pop3Stream_, encoding_pro);
                    
                }
                catch (System.Exception ex)
                {
                    exception_pro = ex;
                    isConnected_pro = false;
                }
            }


    其中pop3StreamReader_ 是用来接收响应的数据的。

    那SSL连接成功后,要如何发送数据呢?可以利用SslStream的write方法。下面是发送数据的实现

       public bool send(string sendStr)
            {
                try
                {
                    exception_pro = null;
                    pop3Stream_.Write(encoding_pro.GetBytes(sendStr));
                    return true;
                }
                catch (System.Exception ex)
                {
                    exception_pro = ex;
                    return false;
                }
            }
    


    那发了数据之后,又要如何接收呢?可以利用pop3StreamReader_的ReadLine方法。
    下面是接收数据的实现

    /// <summary>
            /// Receive one line data.
            /// </summary>
            /// <returns></returns>
            public string receive()
            {
                string receiveStr = "";
                receiveStr = pop3StreamReader_.ReadLine();
                return receiveStr;
            }


    下面是对于上面方法的一个简单调用

      private void buttonSsl_Click(object sender, EventArgs e)
            {
    
                SslSp sslSp = new SslSp();
                sslSp.connect("pop.gmail.com", 995);
                string receiveStr = sslSp.receive();
                MessageBox.Show(receiveStr);
    
                sslSp.send("user mysuer
    ");
                receiveStr = sslSp.receive();
                MessageBox.Show(receiveStr);
    
                sslSp.send("pass mypassword
    ");
                receiveStr = sslSp.receive();
                MessageBox.Show(receiveStr);
    }


    在实际应用时,建议对SSL连接增加一个disconnect的断开连接函数,以方便管理。

    
    
    
  • 相关阅读:
    js append()和appendChild()和insertBefore()的区别
    webpack打包工具简单案例
    Vue $ref 的用法
    Vue学习笔记-作用域插槽
    Vue学习笔记-插槽基本使用
    Vue学习笔记-父子通信案例
    Echarts案例-折线图
    Echarts案例-柱状图
    软件构造实验三-递归下降分析分析法
    软件构造实验二-拷贝一个c文件 将其中的关键字int替换成float
  • 原文地址:https://www.cnblogs.com/riskyer/p/3225797.html
Copyright © 2011-2022 走看看