将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.
正如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
中添加的键
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;
效果很好。:)