简体   繁体   中英

Trying to access App.config file for mail settings but fails to work

Hello we have a Business Logic Layer which has an Email Services Class. In this class we have a method which will create an email(This part works and compiles fine). However when we try to access the app config file in order to test the method we get an error saying - Can't retrieve the app config mail settings and says all values are null when they are not. Here is the app config section for our code:


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

Here is there code we use to connect to the app.config:


private System.Net.Configuration.MailSettingsSectionGroup mailSettings;

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

What are we doing wrong here?

Your mailSettings variable isn't initialised to anything - it won't magically contain your configuration.

You need to use the ConfigurationManager class to access it (remember to add a reference to System.Configuration if not already done so.) You will also need to add using System.Net.Configuration for the following code.

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

if (smtpSection != null)
{
    SmtpClient client = new SmtpClient(smtpSection.Network.Host, smtpSection.Network.Port);
}
SmtpSection smtpSection = ConfigurationManager.GetSection("system.net/mailSettings/smtp") as SmtpSection;
if (smtpSection != null) {
    SmtpClient client = new SmtpClient(smtpSection.Network.Host, smtpSection.Network.Port);
} 

<mailSettings>

  <smtp>

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

  </smtp>

</mailSettings>

Then public static bool SendEmail(string sender, string recipient, string subject, string body)

    {

        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;

        }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM