2013-05-31 26 views
0

我们有一个可以使用TLS发送电子邮件的系统。但是,如果目标支持TLS,我们只想发送完整的电子邮件附件。如果它不支持TLS,我们会发送不带附件的其他消息。在发送电子邮件之前确定TLS支持

我们以前只是尝试使用TLS发送并等待接收方“失败”返回给我们,然后发送备份消息。最近,我们转而通过Frontbridge中继所有传出的消息。但是,如果可能的话,Frontbridge将使用TLS发送消息,或者如果不可行,则不会。我们已经失去了基于TLS支持来定制我们的消息的能力。

问题是这样的:在.NET C#web应用程序中,如何知道目标是否支持TLS在发送任何内容之前?这样,我们可以在通过Frontbridge转发它之前自定义消息。

我需要能够以编程方式执行此操作,但我不希望将整个库添加到我们的解决方案(如Minimalistic Telnet),因为我们不需要完整的telnet功能......我只是需要ping到服务器并询问它支持什么!

这可以简单地使用System.Net.Sockets的东西?

感谢, 凯文

回答

0

是的,你需要写SMTP协议的一部分。

对于显式TLS模式:您可以连接,接收和发送数据,然后发送STARTTLS命令并查看响应是否为220.然后您应该关闭连接。

对于隐式TLS,您需要模拟或使用SSL/TLS客户端:发送初始请求,检查响应并断开连接。

当你不想使用外部库,我不能建议你我们的SecureBlackbox,它的SMTP组件让你做你的代码行十几所需要的。

+0

如果服务器支持“STARTTLS”命令,它将通过客户端EHLO命令通告该事实。这将允许客户决定是否可以使用显式TLS。隐式TLS要求在连接时立即打开TLS,因此您可以根据TLS握手是成功还是失败来确定TLS是否可用。 –

+0

@RemyLebeau有些情况下,服务器做广告但不支持它。我们偶尔会遇到这种情况,使用不同的软件。在这个特定的问题中,有必要确保TLS的建立。当然,首先建立TLS然后决定是个好主意,但如果不使用库,实现起来太复杂了。 –

+0

你有没有遇到那个做广告没有实际支持它'STARTTLS'支持的服务器?我遇到过不支持广告的服务器(例如'AUTH LOGIN'),但从来没有。 –

相关问题