将SMTP设置更改为使用Config而不是在.cs中设置时出错

本文关键字:设置 cs 出错 Config SMTP | 更新日期: 2023-09-27 18:08:05

目前我的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中管理所有这些。

目前,我设置了我的应用程序。配置如下:

<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;
...

BUT ConfigurationManager生成一个错误,说不存在于当前上下文中,即使我有…

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

…了。我只是希望能够在配置中更改SMTP设置,而不是为了以防以后发生变化而更新应用程序的代码。

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

将SMTP设置更改为使用Config而不是在.cs中设置时出错

正如Scott Gu的博客所述,.config中已经有专门针对这些设置的一节,不需要在App settings中做。. net框架会自动读取这些设置,而不需要编写c#。这是MSDN文档。

的例子:

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

不需要指定任何代码来加载配置

解决了ConfigurationManager问题。

<system.net><mailSettings> ...工作时,我原来的<appSettings>也是如此。ConfigurationManager遇到问题的原因是因为System.Configuration.dll在我的参考文献(源)中缺失

添加这个,我可以调用我在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;

效果很好。:)