【发布时间】:2019-10-17 14:32:22
【问题描述】:
我们正在尝试检查收件人电子邮件 ID(给定电子邮件 ID 的域)是否已实施 TLS。如果未实施,我们将无法发送电子邮件。在 C# 中有什么方法可以检查它吗?例如以下是一项服务,我们可以在其中输入任何电子邮件 ID,它会告诉我们该电子邮件域是否实施了 TLS。 https://www.checktls.com/TestReceiver 如何在 C# 中做到这一点? C# 电子邮件客户端带有属性 smtpClient.EnableSsl = true;问题是如果在接收方没有实施 TLS 会发生什么?它会失败还是会通过?如果它失败了,这就是我们想要的。我们的 SMTP 服务器实现了 TLS。
我从 telnet 尝试了 STARTTLS 命令和 EHLO。它给出了 250 个 STARTTLS,它告诉我目标服务器已实现 TLS。如何以编程方式进行?
smtpClient.EnableSsl = true;
【问题讨论】:
-
邮件不是从您的客户端端到端传递到收件人邮箱,而是从您的客户端到您域的邮件服务器,然后可能通过多个跃点将其发送到收件人的邮件服务器领域。虽然收件人域中缺少对 TLS 的支持意味着在交付的某些部分中肯定不会使用 TLS,但这并不意味着收件人域中对 TLS 的支持可以保证通过 TLS 交付。即使所有传递都使用 TLS 完成,途中的每个跃点都可以读取邮件,因为 TLS 仅在跃点之间使用,而不是端到端。
-
感谢您的回复。如果我理解正确,您所说的是,当 smtpClient.EnableSsl = true;已设置,我的域服务器将检查是否所有跃点,直到收件人服务器启用 TLS 并且任何希望不安全的人交付将失败,对吗?那么我的 c# 代码会生成异常吗?我可以使用这个异常作为信号来确认 TLS 是否在某处未启用?我了解 TLS 不是端到端的,它仅从我的域服务器到接收服务器。我们只是在寻找服务器到服务器的 TLS,而不是端到端,所以这不是问题。谢谢
-
不,如果您设置
smtpClient.EnableSsl = true,它只会确保从您的客户端到第一个邮件跃点的连接受到 TLS 的保护。与您所指的站点类似,仅检查收件人域是否可以接受使用 TLS 的连接,但它并没有说与它的每个连接实际上都会受到 TLS 的保护。这些方法都不能确保完整路径受到 TLS 保护,即使您同时使用这两种方法也是如此。 -
谢谢。我们知道我们的 SMTP 服务器实现了 TLS。所以我们要做的是,我们只想向那些实施了 TLS 的域发送电子邮件。这样我们就可以确保当我们从我们的服务器向目的地发送电子邮件时,它会从我们的服务器一直加密到收件人的 SMTP 服务器。正确的?为此,我们需要检查收件人的域服务器是否实施了 TLS。再次感谢..
-
“这样我们就可以保证当我们从我们的服务器向目的地发送电子邮件时,它会从我们的服务器一直加密到收件人的 SMTP 服务器。对吗?” i> - 错误。确保从客户端到第一跳的传递将使用 TLS 并且最后一跳支持 TLS 是不够的。首先,它没有说明中间的所有其他跃点。此外,仅在一个跃点中支持 TLS 并不能保证 TLS 将被提交到该跃点的邮件服务器实际使用。