更改SMTP设置以使用配置而不是在.cs中设置它时出错

时间:2014-06-11 15:27:38

标签: c# wpf smtp

目前我的WPF应用程序的SMTP设置如下:

            string MailTo = txtBoxEmail.Text;
            string MailFrom = "datfakeemaildoe@gmail.com "; 
            string Subject = "Cool Subject";
            string Password = "*******";

            SmtpClient smtpmail = new SmtpClient();
            smtpmail.Host = "smtp.gmail.com"; 
            smtpmail.Port = 587; 
            smtpmail.EnableSsl = true;
            smtpmail.DeliveryMethod = SmtpDeliveryMethod.Network;
            smtpmail.UseDefaultCredentials = false;
            smtpmail.Credentials = new NetworkCredential(MailFrom, Password); 

            MailMessage message = new MailMessage(MailFrom, MailTo, Subject, MessageTosend);
            message.IsBodyHtml = true;

然而,如果可能的话,我想在config而不是.cs管理所有这些内容。

目前,我设置了 App.Config ,如下所示:

<configuration>  
  <appSettings>
   <add key="host" value="smtp.gmail.com" />
   <add key="port" value="587" />
   <add key="MailFrom" value="datfakeemaildoe@gmail.com" />
   <add key="Password" value="*******" />
  </appSettings>
</configuration>

问题是,如何在 .cs

中正确实现它

我试过了:

using System.Configuration;
using System.Net.Configuration;
using System.Net;
using System.Net.Mail;

...

private void btnSubmit_Click(object sender, RoutedEventArgs e)
    {
        ...
            string MessageTosend = @"there is html in here, trust me";
            MailAddress Sender = new MailAddress(ConfigurationManager.AppSettings["MailFrom"]);
            string MailTo = txtBoxEmail.Text;
            string Subject = "Cool Subject";
            SmtpClient smtp = new SmtpClient()
            {
                host = ConfigurationManager.AppSettings["host"],
                port = Convert.ToInt32(ConfigurationManager.AppSettings["port"]),
                EnableSsl = true,    
                DeliveryMethod = SmtpDeliveryMethod.Network;
                UseDefaultCredentials = false;

                Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["MailFrom"], ConfigurationManager.AppSettings["Password"])

            };

            MailMessage message = new MailMessage(ConfigurationManager.AppSettings["MailFrom, MailTo, Subject, MessageTosend);
            message.IsBodyHtml = true;

...

但是 ConfigurationManager正在生成错误,指出当前上下文中不存在,即使我有......

using System.Configuration;
using System.Net.Configuration;
using System.Net;
using System.Net.Mail;

...已经。我只是希望能够在配置中更改SMTP设置,而不是必须更新我的应用程序后面的代码,以防万一事情发生变化。

不确定我做错了还是我完全错过了什么。我引用this来了解如何使用app.config。

2 个答案:

答案 0 :(得分:0)

Scott Gu's blog所述,.config中已经有专门用于这些设置的部分,无需在应用设置中执行此操作。 .NET框架自动读取这些设置,而无需编写C#来执行此操作。 Here's the MSDN documentation

示例:

<system.net>
    <mailSettings>
      <smtp from="test@foo.com">
        <network host="smtpserver1" port="25" userName="username" password="secret" defaultCredentials="true" />
      </smtp>
    </mailSettings>
  </system.net>

无需指定任何加载配置的代码。

答案 1 :(得分:0)

找出ConfigurationManager问题。

虽然<system.net><mailSettings> ...有效,但我原来的<appSettings>也是如此。 ConfigurationManager遇到问题的原因是我的参考文献中遗漏了System.Configuration.dllsource

添加此功能,我可以调用我在App.config

中添加的密钥

然后我改变了 .cs

中的使用方式
                SmtpClient smtpmail = new SmtpClient();

                smtpmail.Host = ConfigurationManager.AppSettings["host"];
                smtpmail.Port = Convert.ToInt32(ConfigurationManager.AppSettings["port"]);
                smtpmail.EnableSsl = true;    
                smtpmail.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtpmail.UseDefaultCredentials = false;

                smtpmail.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["MailFrom"], ConfigurationManager.AppSettings["Password"]);

                MailMessage message = new MailMessage(ConfigurationManager.AppSettings["MailFrom"], MailTo, Subject, MessageTosend);
                message.IsBodyHtml = true;

像魅力一样工作。 :)