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?
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;
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.
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;
//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;
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)
);
assurez-vous que vous avez référence à System.Net dans votre application
Set defaultCredentials = "false", car lorsqu'il est défini sur true, aucune information d'identification n'est utilisée.