您的位置:首页 > 编程语言 > C#

C#POP3协议实现SSL验证登陆GMAIL

2013-07-30 18:22 357 查看
最近在折腾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\r\n");
receiveStr = sslSp.receive();
MessageBox.Show(receiveStr);

sslSp.send("pass mypassword\r\n");
receiveStr = sslSp.receive();
MessageBox.Show(receiveStr);
}


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


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: