如何检查收件人电子邮件地址域是否已实施TLS?

时间:2019-06-01 03:15:15

标签: c# email ssl smtp

我们正在尝试检查收件人电子邮件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;

1 个答案:

答案 0 :(得分:0)

如果您使用MailKit之类的库,则可以执行以下操作:

bool supportsStartTls;

using (var client = new SmtpClient ()) {
    client.Connect ("smtp.host.com", 587, SecureSocketOptions.None);
    supportsStartTls = client.Capabilities.HasFlag (SmtpCapabilities.StartTls);
    client.Disconnect (true);
}

如果要使用MailKit发送邮件,则可以完全控制STARTTLS不可用时的情况。

例如,如果您希望它在不支持STARTTLS的情况下失败,请使用SecureSocketOptions.StartTls作为Connect方法的第三个参数。

如果希望MailKit在可用时使用STARTTLS,但在不可用时不失败,请改用SecureSocketOptions.StartTlsWhenAvailable