2012-11-19 12 views
40

Questo è il mio web.config impostazioni e-mail:Come leggere system.net/mailSettings/smtp da web.config

<system.net> 
    <mailSettings> 
     <smtp deliveryMethod="Network" from="[email protected]"> 
     <network defaultCredentials="true" host="localhost" port="587" userName="[email protected]" password="123456"/> 
     </smtp> 
    </mailSettings> 
    </system.net> 

ed ecco come provo a leggere i valori da web.config

var smtp = new System.Net.Mail.SmtpClient(); 
var credential = new System.Net.Configuration.SmtpSection().Network; 

string strHost = smtp.Host; 
int port = smtp.Port; 
string strUserName = credential.UserName; 
string strFromPass = credential.Password; 

Ma le credenziali sono sempre nulle. Come posso accedere a questi valori?

+1

Si prega di [scorrere verso il basso] (http://stackoverflow.com/questions/13452530/reading-system-net-mailsettings-smtp-from-web-config/19960769#19960769) per vedere la mia risposta. Sembra funzionare meglio per la maggior parte delle persone. –

risposta

6

Utilizzando la configurazione, la seguente riga:

var smtp = new System.Net.Mail.SmtpClient(); 

utilizzerà i valori configurati - che non è necessario per accedere e assegnare di nuovo.


Per quanto riguarda i valori null - si sta tentando di accedere ai valori di configurazione in modo non corretto. Stai solo creando uno SmtpSection vuoto invece di leggerlo dalla configurazione.

var smtpSection = (SmtpSection)ConfigurationManager.GetSection("<the section name>"); 
var credentials == smtpSection.Network; 
+0

Se volessi dirlo; var smtp = new System.Net.Mail.SmtpClient(); string strUserName = smtp .UserName; string strFromPass = smtp .Password; Non riesco ad accedere in questo modo. – nermik

+0

@nermik - Non so cosa intendi. – Oded

+0

Voglio solo accedere a UserName e Password da web.config come Host e port. – nermik

2

Penso che se si dispone di DefaultCredentials = "true" set si avrà le credenziali = null a quando non sono in uso.

L'e-mail invia quando si chiama il metodo .Send?

Così

Questo è il mio web di configurazione delle impostazioni di posta elettronica:

<system.net> 
    <mailSettings> 
     <smtp deliveryMethod="Network" from="[email protected]"> 
     <network defaultCredentials="false" host="localhost" port="587" 
      userName="[email protected]" password="123456"/> 
     </smtp> 
    </mailSettings> 
</system.net> 

e questo è cs

SmtpClient smtpClient = new SmtpClient(); 

string smtpDetails = 
    @" 
    DeliveryMethod = {0}, 
    Host = {1}, 
    PickupDirectoryLocation = {2}, 
    Port = {3}, 
    TargetName = {4}, 
    UseDefaultCredentials = {5}"; 

Console.WriteLine(smtpDetails, 
    smtpClient.DeliveryMethod.ToString(), 
    smtpClient.Host, 
    smtpClient.PickupDirectoryLocation == null 
     ? "Not Set" 
     : smtpClient.PickupDirectoryLocation.ToString(), 
    smtpClient.Port, 
    smtpClient.TargetName, 
    smtpClient.UseDefaultCredentials.ToString) 
); 
+0

No, non è questo il problema qui. L'OP sta creando un nuovo 'SmtpSection' invece di leggerlo dalla configurazione. – Oded

+0

Emmh l'ha appena visto .. quindi se chiami SmtpClient smtpClient = new SmtpClient(); dovrebbe leggere le impostazioni del condig per te ma sono quasi sicuro che ricordo anche che qualcosa attorno ai credenzial predefiniti è vero ... Lo controllerò – Doiremik

+0

Sì, se usi le credenziali di default, il nome utente e pwd dovrebbero essere vuoti. Come diceva Oded ... ora crea una nuova credenziale ... basta istanziare SmtpClient come SmtpClient smtpClient = new SmtpClient(); e controlla le impostazioni – Doiremik

0

assicurarsi di avere riferimento a System.Net nell'applicazione

75

Poiché nessuna risposta è stata accettata e nessuno degli altri ha funzionato per me:

using System.Configuration; 
using System.Net.Configuration; 
// snip... 
var smtpSection = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp"); 
string username = smtpSection.Network.UserName; 
+1

Questa è la risposta migliore – JsonStatham

+1

Grazie per la condivisione! –

+0

Questo non funziona per me. Ogni volta che ottengo null .. Il codice è lo stesso di qui .. Cosa mi manca? – ruud

2
  //You can access the network credentials in the following way. 
      //Read the SmtpClient section from the config file  
      var smtp = new System.Net.Mail.SmtpClient(); 
      //Cast the newtwork credentials in to the NetworkCredential class and use it . 
      var credential = (System.Net.NetworkCredential)smtp.Credentials; 
      string strHost = smtp.Host; 
      int port = smtp.Port; 
      string strUserName = credential.UserName; 
      string strFromPass = credential.Password; 
26

Non è necessario usare il ConfigurationManager e ottenere i valori manualmente. È sufficiente creare un'istanza di SmtpClient.

SmtpClient client = new SmtpClient(); 

Questo è quello che dice MSDN:

Questo costruttore inizializza il padrone di casa, le credenziali e le proprietà delle porte per il nuovo SmtpClient utilizzando le impostazioni nei file di configurazione dell'applicazione o della macchina.

Scott Guthrie ha scritto un piccolo post su quello qualche tempo fa.

0

Imposta defaultCredentials = "false", perché quando è impostato su true, non vengono utilizzate credenziali.

Problemi correlati