目前我的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。
答案 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.dll
(source)
添加此功能,我可以调用我在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;
像魅力一样工作。 :)