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\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的更多相关文章
- 一个基于POP3协议进行邮箱账号验证的类
最近老陈要针对企业邮箱做一些开发,以对接企业OA神马的,但企业邮箱唯独没有开放账号密码验证功能,很恼火!不得已,翻出早些年的Asp代码改编成了C#类,实现了一个C#下的通过POP3协议进行邮箱账号验证 ...
- C#基础--基于POP3协议的邮件接收和基于STMP的邮件发送
最近在用outlook同步邮件.对邮件协议有一点兴趣.于是就去收集了一些资料,学习了一下如何通过.net来实现邮件的收发. 一:SMTP协议 1.什么是SMTP协议: SMTP目前 ...
- 使用smtp和pop3 协议收发qq邮箱实验
email系统组件:MTA 消息传输代理,负责邮件的路由,队列和发送SMTP 简单邮件传输协议1 连接到服务器2 登陆3 发出服务请求4 退出POP:邮局协议RFC918 "邮局协议的目的是 ...
- Smtp协议与Pop3协议的简单实现
前言 本文主要介绍smtp与pop3协议的原理,后面会附上对其的简单封装与实现. smtp协议对应的RFC文档为:RFC821 smtp协议 SMTP(Simple Mail Transfer Pro ...
- 邮件实现详解(二)------手工体验smtp和pop3协议
上篇博客我们简单介绍了电子邮件的发送和接收过程,对参与其中的邮件服务器,邮件客户端软件,邮件传输协议也有简单的介绍.我们知道电子邮件需要在邮件客户端和邮件服务器之间,以及两个邮件服务器之间进行传递必须 ...
- 使用ssh keys实现免验证登陆远程服务
使用ssh keys实现免验证登陆远程服务========================Created 星期四 10 五月 2018 引言------------------程序员或者服务器运维人员 ...
- 配置Tomcat使用https协议(配置SSL协议)
配置Tomcat使用https协议(配置SSL协议) 2014-01-20 16:38 58915人阅读 评论(3) 收藏 举报 转载地址:http://ln-ydc.iteye.com/blog/1 ...
- POP3协议分析
http://m.blog.csdn.net/bripengandre/article/details/2192111 POP3协议分析 第1章. POP3概述 POP3全称为Post Off ...
- android客户端向服务器端验证登陆方法的实现2
一.在上一篇文章中,我只是提到了其中一种方法来实现登陆 大家可以参见: http://www.apkbus.com/android-45004-1-1.html android获取web服务 ...
随机推荐
- C语言之字节对齐
在C语言编程中,有时为了达到减少运行的时间的目的,需要浪费一些空间:而有时为了节省空间,使它的运行时间增长.而字节对齐则是为了访问效率,用空间换取时间. 要掌握字节对齐,首先得明确一下四个概念: 1. ...
- Amazium源码分析:(1)基本介绍
前言 Amazium是一个网格系统的框架,分析该源码的目的是了解网格系统的实现. 网格系统 定义:设计美观页面布局的方式,上图能够很直观的了解什么是网格系统. 基本概念 column: 列. gutt ...
- 决策树之 CART
继上篇文章决策树之 ID3 与 C4.5,本文继续讨论另一种二分决策树 Classification And Regression Tree,CART 是 Breiman 等人在 1984 年提出的, ...
- HDU3232 Crossing rivers
思路:这题关键一点就是根据题目的描述和测试数据得到启发,船都是 从对岸划过来的.心中有具体场景,就可以很简单了. #include<cstdio> int main() { ; ; whi ...
- zoj 2105 Lifting the Stone
题意 裸的计算几何 求多边形重心: #include<iostream> #include<stdio.h> #include<cstring> #inclu ...
- lseek()函数
lseek()有个特殊的用途,确定文件是常规文件还是设备.<pre lang="c" escaped="true">off_t currpos;ou ...
- 統計分析dbms_stats包与analyze 的区别
Analyze StatementThe ANALYZE statement can be used to gather statistics for a specific table, index ...
- Oracle数据库备份手册
1 故障类型 l 实例故障 由ORACLE内部异常.操作系统故障或其它相关软件引起,导致ORACLE实例中的进程或内存区出现故障或数据库无法正常关闭,这种故障称为实例故障.实例故障没 ...
- hdu 1969(二分)
题意:给了你n个蛋糕,然后分给m+1个人,问每个人所能得到的最大体积的蛋糕,每个人的蛋糕必须是属于同一块蛋糕的! 分析:浮点型二分,二分最后的结果即可,这里要注意圆周率的精度问题! #include& ...
- mybatis注解详解
首 先当然得下载mybatis-3.0.5.jar和mybatis-spring-1.0.1.jar两个JAR包,并放在WEB-INF的lib目录下 (如果你使用maven,则jar会根据你的pom配 ...