web-dev-qa-db-fra.com

Comment lire system.net/mailSettings/smtp depuis Web.config

Voici mes paramètres de messagerie 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>

et voici comment j'essaie de lire les valeurs de 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;

Mais les identifiants sont toujours nuls. Comment puis-je accéder à ces valeurs?

50
nermik

Depuis aucune réponse n'a été acceptée, et aucun des autres n'a fonctionné pour moi:

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

Il n'est pas nécessaire d'utiliser ConfigurationManager et d'obtenir les valeurs manuellement. Instancier simplement un SmtpClient suffit.

SmtpClient client = new SmtpClient();

C'est ce que MSDN dit:

Ce constructeur initialise les propriétés Host, Credentials et Port du nouveau SmtpClient à l'aide des paramètres des fichiers de configuration de l'application ou de la machine.

Scott Guthrie a écrit un petit post à ce sujet il y a quelque temps.

33
bertl

En utilisant la configuration, la ligne suivante:

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

Utilisera les valeurs configurées - vous n'avez pas besoin d'y accéder et de les affecter à nouveau.


En ce qui concerne les valeurs null - vous essayez d'accéder aux valeurs de configuration de manière incorrecte. Vous créez simplement une SmtpSection vide au lieu de le lire à partir de la configuration.

var smtpSection = (SmtpSection)ConfigurationManager.GetSection("<the section name>");
var credentials == smtpSection.Network;
8
Oded
            //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;
3
Kiran Masal

Je pense que si vous avez defaultCredentials = "true", vous aurez les informations d'identification = null car vous ne les utilisez pas.

L'e-mail est-il envoyé lorsque vous appelez la méthode .Send?

Alors

Voici les paramètres de messagerie de ma configuration Web:

<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>

et c'est 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)
);
2
Doiremik

assurez-vous que vous avez référence à System.Net dans votre application

0
Amr Elgarhy

Set defaultCredentials = "false", car lorsqu'il est défini sur true, aucune information d'identification n'est utilisée.

0
Mattis