ConfigurationManager.AppSettings [ “SMTP”]; null异常

时间:2011-05-10 08:04:25

标签: c# asp.net smtp

我用这段代码发送电子邮件。但我不明白配置管理器做了什么,以及为什么它给了我例外。这是完整的代码:

        MailMessage mail = new MailMessage();

    mail.To.Add("makovetskiyd@yahoo.co.uk");

    mail.From = new MailAddress("makovetskiyd@yahoo.co.uk");

    mail.Subject = "Test Email";

    string Body = "Welcome to CodeDigest.Com!!";

    mail.Body = Body;

    SmtpClient smtp = new SmtpClient();

    smtp.Host = ConfigurationManager.AppSettings["SMTP"];

    smtp.Send(mail);

我还将最后一行更改为:    smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;

        smtp.Send(mail);

但它仍会显示错误,说它没有找到IIS服务器......或类似的东西

3 个答案:

答案 0 :(得分:3)

您不应将AppSettings用作ConfigurationManager for SMTP配置。首选方法是通过web.config中的<mailSettings>部分configure SMTP。例如,小型网站的配置可能如下所示:

<system.net>
  <mailSettings>
     <smtp from="info@example.com">
        <network host="localhost" port="25" defaultCredentials="false">
     </smtp>
  </mailSettings>
</system.net>

这将允许您新建SmtpClient并只发送消息而无需进一步配置。

答案 1 :(得分:2)

ConfigurationManager提供对客户端应用程序配置文件的访问。

我猜错误的原因是应用程序的配置文件在应用程序设置部分没有SMTP密钥。

<appSettings>
    <add key="SMTP" value="..." />
</appSettings>

答案 2 :(得分:1)

原因是配置文件中没有这样的SMTP配置。我想你最好检查一下web.config。为了使您的应用程序更强大,您需要在配置文件不正确的情况下添加默认主机。

string defaultHost = "www.foo.com";
smtp.Host = ConfigurationManager.AppSettings["SMTP"] ?? defaultHost;