调用 SmtpClient(host,0) 等同于调用 SmtpClient(host)

Is calling SmtpClient(host,0) equivalent to calling SmtpClient(host)

我们正在开发一个使用 SMTP 的应用程序;主机在我们的数据库中配置,我们希望允许指定一个可选端口(以便将来可以使用 SSL)。

最简单的方法似乎是在从数据库读取数据时设置 port==0,但我需要确认 .NET 会将其视为与根本不指定端口完全相同的方式吗?

https://msdn.microsoft.com/en-us/library/67w4as51(v=vs.110).aspx

根据 SmtpClient(string, int) constructor documentation:

If port is zero, Port is initialized using the settings in the application or machine configuration files.

正如您从 SmtpNetworkElement configuration element documentation 中看到的,这默认为端口 25,与仅使用 host 参数调用构造函数时完全相同。

如果您不想这样,很简单:

SmtpClient smtpClient;

if (yourConfiguration.SmtpPort.HasValue)
{
    smtpClient = new SmtpClient(yourConfiguration.SmtpHost, yourConfiguration.SmtpPort.Value);
}
else
{
    smtpClient = new SmtpClient(yourConfiguration.SmtpHost);
}

另一种确认方法是在link (SmtpClient source code)(第 160 行)

if(port == 0)
  port = defaultPort;//25