C# 如何检索/协商SMTP服务器支持的安全方法和身份验证方法

C# 如何检索/协商SMTP服务器支持的安全方法和身份验证方法,c#,smtp,C#,Smtp,我正在使用C#(.NET 4.0)和System.NET.Mail.SmtpClient类向SMTP服务器发送电子邮件。 现在,我能够向SMTP服务器发送一封电子邮件,并立即在我的Thunderbird收件箱文件夹中看到它 此测试未指定任何身份验证方法或安全方法。 但我认为,通常SMTP服务器需要某种身份验证 我想知道,是否可以询问SMTP服务器,它支持什么身份验证方法,然后协商使用所需的方法。 我正在考虑向SMTP服务器询问支持的身份验证方法,并获取一个列表,例如: 无身份验证 密码,明文

我正在使用C#(.NET 4.0)和System.NET.Mail.SmtpClient类向SMTP服务器发送电子邮件。 现在,我能够向SMTP服务器发送一封电子邮件,并立即在我的Thunderbird收件箱文件夹中看到它

此测试未指定任何身份验证方法或安全方法。 但我认为,通常SMTP服务器需要某种身份验证

我想知道,是否可以询问SMTP服务器,它支持什么身份验证方法,然后协商使用所需的方法。 我正在考虑向SMTP服务器询问支持的身份验证方法,并获取一个列表,例如:

  • 无身份验证
  • 密码,明文
  • 密码,加密的
  • Kerberos
  • NTLM
因此,对于连接的安全方法:

  • 连接上没有安全性
  • STARTTLS
  • SSL/TLS

有没有一种方法可以通过编程方式从SMTP服务器检索受支持的方法?

有可能,但不能通过.NET类;相反,您需要使用套接字级别的连接将适当的EHLO请求发送到服务器,然后解析响应

您需要的套接字编程的详细信息如下:

您需要解析来自服务器的响应。SMTP AUTH上的Wikipedia条目有一个有用的示例对话框:


Wireshark()等实用程序可以方便地调试此类工作。

谢谢,这对我帮助很大。我能够通过所提到的套接字级别连接获得支持的方法。:)