C# socket 收邮件如何支持SSL服务器

damjmk2 2010-12-03 02:59:47
如题,我做了一个接收邮件的小工具
已经能接收110端口的,也就是没有SSL加密的邮件
问题是有些服务器只有SSL的端口 如Gmail,

那么请问如何实现与SSL服务器的通讯?

用 TcpClient 能连接上

然后我用的是Socket.BeginReceive() 与 Socket.BeginSend() 的方法通讯

但是服务器没有给我返回任何信息

因此请教各位大侠...最好能给点代码


另外我想问一下,所有的邮件服务器,SSL加密方式是统一的吗?
...全文
443 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不靠谱啊,如果在windows phone 上 SDK 中没有SslStream这个流怎么办,我郁闷了
Exaybachay 2010-12-03
  • 打赏
  • 举报
回复
..最后那个函数改为基于 .net 的类型的即可

贴成使用
openssl的了
Dobzhansky 2010-12-03
  • 打赏
  • 举报
回复
ssl 客户端验证比较简单,
用 gmail pop 时, 以下的就行了:

    static bool ValidateServerCertificate2(object sender,
OpenSSL.X509.X509Certificate cert,
OpenSSL.X509.X509Chain chain,
int depth,
OpenSSL.VerifyResult result)
{
if (result == OpenSSL.VerifyResult.X509_V_OK)
return true;
return false;
}
Dobzhansky 2010-12-03
  • 打赏
  • 举报
回复
关键的地方,
前置条件, 建立了 socket 连接, 后面用相应的流即可.

_networkStream = new NetworkStream(_socket, true);
if (_useSsl)
{
// Create an SSL stream that will close the client's stream.
SslStream sslStream = new SslStream(
_networkStream,
false,
new RemoteCertificateValidationCallback(ValidateServerCertificate),
null
);
try
{
//OpenSSL.X509.X509List cer = new OpenSSL.X509.X509List(OpenSSL.Core.BIO.File("gmail.pem", "r"));
//OpenSSL.X509.X509Chain cacer = new OpenSSL.X509.X509Chain(OpenSSL.Core.BIO.File("Equifax.pem", "r"));
//sslStream.AuthenticateAsClient(_proxy.TargetHost,
// cer, cacer, OpenSSL.SslProtocols.Default, OpenSSL.SslStrength.Medium, false);
sslStream.AuthenticateAsClient(_proxy.TargetHost);
}
catch (System.Security.Authentication.AuthenticationException e)
{
_lastError = e.Message;
if (e.InnerException != null)
{
_lastError += Environment.NewLine + e.InnerException.Message;
}
_networkStream.Close();
return -1;
}

_streamReader = new StreamReader(sslStream, System.Text.Encoding.ASCII);
_streamWriter = new StreamWriter(sslStream, System.Text.Encoding.ASCII);
_streamWriter.AutoFlush = true;
}//end of usessl
else
{
_streamReader = new StreamReader(_networkStream, System.Text.Encoding.ASCII);
_streamWriter = new StreamWriter(_networkStream, System.Text.Encoding.ASCII);
_streamWriter.AutoFlush = true;
}
Dobzhansky 2010-12-03
  • 打赏
  • 举报
回复
建立连接后, 你接收 stream 的方式变一下, 之后一切不变
damjmk2 2010-12-03
  • 打赏
  • 举报
回复
最后挣扎一次...再没人结贴了...
damjmk2 2010-12-03
  • 打赏
  • 举报
回复
没有人吗.....自己顶下
SuperSocket是一个轻量级的可扩展的Socket开发框架,可用来构建一个服务器Socket程序,而无需了解如何使用Socket,如何维护Socket连接,Socket是如何工作的。该项目使用纯C#开发,易于扩展和集成到已有的项目。只要你的已有系统是使用.NET开发的,你都能够使用SuperSocket来轻易的开发出你需要的Socket应用程序来集成到你的现有系统之中。 SuperSocket具有如下特点: 简单易用,只需要几个类就能创建出健壮的Socket服务器端程序 性能优良, 稳定可靠 支持各种协议, 内置的协议解析工具让你把实现通信协议这种复杂的工作变得很简单 自动支持SSL/TLS传输层加密 强大,灵活而且可扩展的配置让你开发Socket服务器省时省力 支持多个socket服务器实例运行, 而且支持多个服务器实例的隔离 SuperSocket能以控制台或者Windows服务形式运行。一个脚本就能将SuperSocket安装成服务 灵活的日志策略能够记录大部分socket活动 支持UDP 支持IPv6 支持Windows Azure 支持Linux/Unix操作系统(通过Mono 2.10或以上版本) 内置可直接使用的Flash/Silverlight Socket策略服务器 SuperSocket v1.6.5 更新日志: 修复NuGet包中错误的log4net引用版本号; 增加高版本TLS加密的支持; 增加配置热更新功能; 改进服务器实例停止顺序; 支持指定Active Connect本地端口的的功能; 支持Active Connect的本地端口复用; 改进进程级别隔离模式下的配置文件的读取,使其支持读取SuperSocket之外的配置节点,如appSetting和connectionString等等; 修复了性能计数器在bootstrap停止时抛出的异常; 修复了发送队列关于"索引超出范围"的异常; 为ServerManager做出一些改进;

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧