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

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

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

用 TcpClient 能连接上

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

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

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


另外我想问一下,所有的邮件服务器,SSL加密方式是统一的吗?
...全文
451 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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
  • 打赏
  • 举报
回复
没有人吗.....自己顶下

62,243

社区成员

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

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

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

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