在 AppSetting 中存储 SMTP 属性

Storing a SMTP property in AppSetting

我正在处理 Azure 网站,其中门户可用于覆盖 web.config 的 AppSetting 和 ConnectionString 部分中的值。但是其他部分仍然需要 web.config 的转换或硬编码。我需要对在 /configuration/system.net/mailSettings/smtp

处找到的值应用相同的控制

理想情况下,我想在 AppSetting 值中存储一个字符串,然后,当站点启动时,它会解析该字符串并使用在 AppSettings 中找到的已解析值覆盖我的 SMTP 部分的初始内容。

大局objective:消除对 web.config 的硬编码 smtp 值的依赖,而是从门户的 AppSettings 列表中应用这些值。可能吗?

感谢

我不太熟悉 System.Net.Mail,但您可以随时阅读并初始化您自己的配置。您可以在门户中设置以下 AppSettings

smtp.host = <hostName>
smtp.port = <port>
smtp.userName = <userName>
smtp.password = <password>
smtp.defaultCredentials = <true | false>

然后在你的代码中加入类似的东西。

public SmtpClient GetSmtpClient()
{
    Func<string, string> config = s => ConfigurationManager.AppSettings[s] ?? System.Environment.GetEnvironmentVariable(s);
    return new SmtpClient
    {
        Host = config("smtp.host"),
        Port = int.Parse(config("smtp.port")), // handle parsing errors
        Credentials = new NetworkCredential(config("smtp.userName"), config("smtp.userName")),
        UseDefaultCredentials = bool.Parse(config("smtp.defaultCredentials")), //handle parsing errors
    };
}

然后在本地调试时,您可以依赖环境变量,而在部署到 Azure 时,您可以使用 AppSettings。