将“SmtpClient.EnableSsl”设置为 true 时,“System.Net.Mail.SmtpClient”需要哪些端口?

Posted

技术标签:

【中文标题】将“SmtpClient.EnableSsl”设置为 true 时,“System.Net.Mail.SmtpClient”需要哪些端口?【英文标题】:What ports does a 'System.Net.Mail.SmtpClient' need with 'SmtpClient.EnableSsl' set to true? 【发布时间】:2014-03-03 06:14:39 【问题描述】:

正如标题所说,当 'SmtpClient::EnableSsl' 设置为 true 时,'System::Net::Mail::SmtpClient' 需要哪些端口?

documentation on the EnableSsl property 表示替代连接方法的默认端口是 465,但没有提及它确实支持的连接类型所使用的端口。

编辑 - 如果有影响,我会在这种情况下连接到 Gmail,但欢迎提供通用答案。

【问题讨论】:

【参考方案1】:

要使用 System::Net::Mail::SmtpClient 和 SSL 向 Gmail 发送邮件,您必须使用端口 587,如 GMail API 中所述。

GMail 上的端口 25 和 587 都可用,但 Port 587 will require a SMTP authentication before sending a mail,而端口 25 不可用。鉴于端口 25 不需要发件人身份验证,GMail 将更积极地过滤来自不是正确邮件服务器的 IP 地址的连接,以减少垃圾邮件。

GMail API 也允许使用端口 465,但不能将它与 System::Net::Mail::SmtpClient、as documented by Microsoft 一起使用。端口 465 用于 SMTP over SSL:首先建立 SSL 连接,然后执行 SMTP 事务。使用端口 25 和 587,首先打开未加密的 SMTP 会话,然后使用 STARTTLS 切换到 SSL 并完成 SMTP 事务。后者是.Net SMTP客户端实现的方法。

【讨论】:

所以首选端口 587 但端口 25 也可以?当您说“通常 25 岁”时,您是什么意思? 我的错,GMail 上打开了 25 和 587 端口。我的意思是端口 25 在邮件服务器上总是可用的,587 并不总是可用的。【参考方案2】:

使用 Wireshark 进行的快速测试表明答案默认为 25 端口

客户端使用 STARTTLS 重新使用最初未加密的链接以随后发送加密数据。

【讨论】:

我有类似的问题有人可以帮助我***.com/questions/25543233/…【参考方案3】:

SMTPClient .NET Framework 中未实现基于 SSL 的 SMTP。

您必须使用端口:587。

另一种连接方法是在发送任何协议命令之前预先建立 SSL 会话。这种连接方法有时称为 SMTP/SSL、SMTP over SSL 或 SMTPS,默认使用端口 465。目前不支持这种使用 SSL 的替代连接方法。

MSDN SMTPClient doc

【讨论】:

【参考方案4】:

除端口 25 外,端口 587 是 SMTP 客户端的常用端口,可与 SSL 配合使用。您可能会发现this answer 很有用。

编辑 - 如果您尝试连接到 Gmail,请参阅 here 和 here。

【讨论】:

但显然不是我在问题中提到的客户。还是有可能在某些情况下使用其中任何一个端口? 我在我的生产代码中使用System.Net.Mail.SmtpClient 通过我们的 Microsoft Exchange 服务器在端口 587 上发送邮件,它绝对有效,SSL 和所有。我还用它通过 Gmail 发送邮件(请参阅 here)。如果您无法连接,可能是您的 SMTP 服务器没有启用该端口,或者它可能被某处的防火墙阻止。 您是否明确设置了该端口?我使用的是默认值,所以也许这就是区别? 是的,你需要明确设置587端口。

以上是关于将“SmtpClient.EnableSsl”设置为 true 时,“System.Net.Mail.SmtpClient”需要哪些端口?的主要内容,如果未能解决你的问题,请参考以下文章

C4D如何将图片设置为文件背景?

怎样将对象引用设置到对象的实例?

未将对象引用设置到对象的实例如何解决

未将对象设置引用到实例

未将对象引用设置到对象的实例怎么解决啊?

将文件设置为755,将目录设置为644