Попытка получить доступ к файлу App.config для настроек почты, но не работает - PullRequest
3 голосов
/ 13 апреля 2010

Здравствуйте, у нас есть уровень бизнес-логики, который имеет класс почтовых сервисов. В этом классе у нас есть метод, который создаст письмо (эта часть работает и прекрасно компилируется). Однако, когда мы пытаемся получить доступ к файлу конфигурации приложения, чтобы протестировать метод, мы получаем сообщение об ошибке: «Не удается получить настройки почты конфигурации приложения, и он говорит, что все значения равны нулю, когда их нет. Вот раздел конфигурации приложения для нашего кода:


<mailSettings>
  <smtp deliveryMethod="Network" from="info@example.com">
    <network host="localhost" port="25" defaultCredentials="true"/>
  </smtp>
</mailSettings>

Вот код, который мы используем для подключения к app.config:


private System.Net.Configuration.MailSettingsSectionGroup mailSettings;

SmtpClient client = new SmtpClient(mailSettings.Smtp.Network.Host, mailSettings.Smtp.Network.Port);

Что мы здесь делаем не так?

Ответы [ 3 ]

5 голосов
/ 13 апреля 2010

Ваша переменная mailSettings ни к чему не инициализирована - она ​​не будет волшебным образом содержать вашу конфигурацию.

Вам необходимо использовать класс ConfigurationManager для доступа к нему (не забудьте добавить ссылку на System.Configuration, если это еще не сделано.) Вам также необходимо добавить using System.Net.Configuration для следующего кода.

SmtpSection smtpSection = ConfigurationManager.GetSection("system.net/mailSettings/smtp") as SmtpSection;

if (smtpSection != null)
{
    SmtpClient client = new SmtpClient(smtpSection.Network.Host, smtpSection.Network.Port);
}
1 голос
/ 07 мая 2012

<mailSettings>

  <smtp>

    <network host="smtp.mailserver.com" password="password" userName="username"/>

  </smtp>

</mailSettings>

затем public static bool SendEmail (отправитель строки, получатель строки, тема строки, тело строки)

    {

        try

        {

            Configuration mConfigurationFile = ConfigurationManager.OpenExeConfiguration("D:\\Projects\\EmailSolution\\Email\\App.config");

            MailSettingsSectionGroup mMailSettings = mConfigurationFile.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup;



            string mHost = string.Empty;



            if (mMailSettings != null)

            {

                //int mPort = mMailSettings.Smtp.Network.Port;

                mHost = mMailSettings.Smtp.Network.Host;

                //string mPassword = mMailSettings.Smtp.Network.Password;

                //string mUsername = mMailSettings.Smtp.Network.UserName;

            }

            //Allows applications to send e-mail by using the Simple Mail Transfer Protocol (SMTP).

            SmtpClient mailClient = new SmtpClient(mHost);



            //Sends an e-mail message to an SMTP server for delivery.

            mailClient.Send(EmailMessage.CreateEmailMessage(sender, recipient, subject, body));



            return true;

        }
1 голос
/ 07 мая 2012
SmtpSection smtpSection = ConfigurationManager.GetSection("system.net/mailSettings/smtp") as SmtpSection;
if (smtpSection != null) {
    SmtpClient client = new SmtpClient(smtpSection.Network.Host, smtpSection.Network.Port);
} 
...