2009-03-09 14 views
14

Próbuję programowo uzyskać dostęp do pliku app app.config aplikacji systemu Windows. W szczególności, Próbuję uzyskać dostęp do „system.net/mailSettings” następujący kodUstawienia systemowe.net z app.config programowo w C#

Configuration config = ConfigurationManager.OpenExeConfiguration(configFileName); 

MailSettingsSectionGroup settings = 
    (MailSettingsSectionGroup)config.GetSectionGroup(@"system.net/mailSettings"); 

Console.WriteLine(settings.Smtp.DeliveryMethod.ToString()); 

Console.WriteLine("host: " + settings.Smtp.Network.Host + ""); 
Console.WriteLine("port: " + settings.Smtp.Network.Port + ""); 
Console.WriteLine("Username: " + settings.Smtp.Network.UserName + ""); 
Console.WriteLine("Password: " + settings.Smtp.Network.Password + ""); 
Console.WriteLine("from: " + settings.Smtp.From + ""); 

nie dać hosta, z. dostaje tylko numer portu. Reszta jest zerowa;

+0

Pls opublikować fragment pliku konfiguracyjnego, który jest pytanie. – abhilash

+0

ustawienia smtp ... próbuję uzyskać dostęp do ustawień system.net .. –

Odpowiedz

11

Nie wiem, czy to pomaga, ale jeśli próbujesz utworzyć SmtpClient, to automatycznie użyje wartości w pliku konfiguracyjnym, jeśli użyjesz domyślnego konstruktora.

+1

+1 Użyj domyślnego konstruktora na SmtpClient i zrobi to za Ciebie. –

+0

to nie jest ten sam plik konfiguracyjny programu, który próbuję odczytać ... Inny program czyta informacje o konfiguracji ... –

18

To wydaje się działać ok dla mnie:

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

if (mailSettings != null) 
{ 
    string smtpServer = mailSettings.Smtp.Network.Host; 
} 

Oto mój plik app.config:

<configuration> 
    <system.net> 
    <mailSettings> 
     <smtp> 
     <network host="mail.mydomain.com" /> 
     </smtp> 
    </mailSettings> 
    </system.net> 
</configuration> 

Jednak, jak stwierdził Nathan, można korzystać z aplikacji lub plików konfiguracyjnych maszyna określ domyślne wartości hosta, portu i poświadczeń dla wszystkich obiektów SmtpClient. Aby uzyskać więcej informacji, zobacz <mailSettings> Element na MDSN.

+0

Używam tego samego kodu, ale zawsze mailSettings ma wartość null – kbvishnu

8

użyłem następujących czynności, aby uzyskać dostęp do mailSettings:

var config = ConfigurationManager.OpenExeConfiguration(
    ConfigurationUserLevel.None); 

var mailSettings = config.GetSectionGroup("system.net/mailSettings") 
    as MailSettingsSectionGroup; 
0
private void button1_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

     var mailSettings = config.GetSectionGroup("system.net/mailSettings") 
      as MailSettingsSectionGroup; 
     MailMessage msg = new MailMessage(); 
     msg.Subject = "Hi Raju"; 
     msg.To.Add("[email protected]"); 
     msg.From = new MailAddress("[email protected]"); 
     msg.Body = "Hello Raju here everything is fine."; 
     //MailSettingsSectionGroup msetting = null; 
     string mMailHost = mailSettings.Smtp.Network.Host; 

     SmtpClient mailClient = new SmtpClient(mMailHost); 
     mailClient.Send(msg); 
     MessageBox.Show("Mail Sent Succesfully..."); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
}