最近在折腾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的断开连接函数,以方便管理。

												

C#POP3协议实现SSL验证登陆GMAIL的更多相关文章

  1. 一个基于POP3协议进行邮箱账号验证的类

    最近老陈要针对企业邮箱做一些开发,以对接企业OA神马的,但企业邮箱唯独没有开放账号密码验证功能,很恼火!不得已,翻出早些年的Asp代码改编成了C#类,实现了一个C#下的通过POP3协议进行邮箱账号验证 ...

  2. C#基础--基于POP3协议的邮件接收和基于STMP的邮件发送

    最近在用outlook同步邮件.对邮件协议有一点兴趣.于是就去收集了一些资料,学习了一下如何通过.net来实现邮件的收发.    一:SMTP协议  1.什么是SMTP协议:       SMTP目前 ...

  3. 使用smtp和pop3 协议收发qq邮箱实验

    email系统组件:MTA 消息传输代理,负责邮件的路由,队列和发送SMTP 简单邮件传输协议1 连接到服务器2 登陆3 发出服务请求4 退出POP:邮局协议RFC918 "邮局协议的目的是 ...

  4. Smtp协议与Pop3协议的简单实现

    前言 本文主要介绍smtp与pop3协议的原理,后面会附上对其的简单封装与实现. smtp协议对应的RFC文档为:RFC821 smtp协议 SMTP(Simple Mail Transfer Pro ...

  5. 邮件实现详解(二)------手工体验smtp和pop3协议

    上篇博客我们简单介绍了电子邮件的发送和接收过程,对参与其中的邮件服务器,邮件客户端软件,邮件传输协议也有简单的介绍.我们知道电子邮件需要在邮件客户端和邮件服务器之间,以及两个邮件服务器之间进行传递必须 ...

  6. 使用ssh keys实现免验证登陆远程服务

    使用ssh keys实现免验证登陆远程服务========================Created 星期四 10 五月 2018 引言------------------程序员或者服务器运维人员 ...

  7. 配置Tomcat使用https协议(配置SSL协议)

    配置Tomcat使用https协议(配置SSL协议) 2014-01-20 16:38 58915人阅读 评论(3) 收藏 举报 转载地址:http://ln-ydc.iteye.com/blog/1 ...

  8. POP3协议分析

    http://m.blog.csdn.net/bripengandre/article/details/2192111 POP3协议分析 第1章.     POP3概述 POP3全称为Post Off ...

  9. android客户端向服务器端验证登陆方法的实现2

    一.在上一篇文章中,我只是提到了其中一种方法来实现登陆 大家可以参见: http://www.apkbus.com/android-45004-1-1.html      android获取web服务 ...

随机推荐

  1. Js内置对象的应用

    Boolean.Number.Objectfunction对象    另一种写法:        var add=new Function("x","y",&q ...

  2. xunsearch迅搜体验

    安装与启动 http://www.xunsearch.com/doc/php/guide/start.installation 编写配置文件 http://www.xunsearch.com/doc/ ...

  3. UVa11582 Colossal Fibonacci Numbers!

    #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> us ...

  4. omDialog设计造成控件无法后台取值

    http://ui.operamasks.org/website/homepage.html 使用服务端控件,前台进行赋值,但后台确无法取值. 不仅如此,如果里面放置了一个ASp:Button同样无法 ...

  5. T-SQL备忘(5):查看执行计划

    先理解几个概念:表扫描.聚集索引扫描.聚集索引查找.索引扫描.书签查找. [查看执行计划] 在理解概念之前先得知道如何查看执行计划—Ctrl+L.如下图: 注:SQL Server的执行计划是从右向左 ...

  6. OpenGL学习之路(四)

    1 引子 上次读书笔记主要是学习了应用三维坐标变换矩阵对二维的图形进行变换,并附带介绍了GLSL语言的编译.链接相关的知识,之后介绍了GLSL中变量的修饰符,着重介绍了uniform修饰符,来向着色器 ...

  7. 手动编译Spring4.2源码,以及把源码导入myEclipse中

    前提条件,先在本地配置好JDK1.8, 安装好Git 执行下面命令: 1,双击Git Bash, 进入源码存放路径 cd E:\Foler 2,git clone git@github.com:spr ...

  8. 通过文件流stream下载文件

    public ActionResult ShowLocalizedXML(int id) { string orderName = ""; string xmlString = G ...

  9. 类库从自带的配置文件中获取信息(DLL文件 获取 DLL文件自带的配置信息) z

    http://blog.csdn.net/shuaishifu/article/details/19602059 类库调用自身所带的配置文件中的配置信息,而不是读取应用程序所带的配置信息.代码如下: ...

  10. [转]LoadRunner参数化详解

    http://www.cnblogs.com/fnng/archive/2012/06/22/2558900.html 距离上次使用loadrunner 已经有一年多的时间了.初做测试时在项目中用过, ...