wake-up-neo.net

Wie man system.net/mailSettings/smtp aus der Web.config liest

Dies ist meine web.config-Maileinstellungen:

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

und so versuche ich, die Werte von web.config zu lesen

 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;

Die Anmeldeinformationen sind jedoch immer null. Wie kann ich auf diese Werte zugreifen?

50
nermik

Da keine Antwort akzeptiert wurde und keiner der anderen für mich gearbeitet hat:

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

Es ist nicht erforderlich, die Variable ConfigurationManager zu verwenden und die Werte manuell abzurufen. Es genügt, eine SmtpClient einfach zu instantiieren.

SmtpClient client = new SmtpClient();

Das sagt MSDN :

Dieser Konstruktor initialisiert die Host-, Berechtigungsnachweise und Port-Eigenschaften für den neuen SmtpClient mithilfe der Einstellungen in den Konfigurationsdateien der Anwendung oder des Computers.

Scott Guthrie hat vor einiger Zeit ein kleines Post geschrieben.

33
bertl

Verwenden Sie die Konfiguration, folgende Zeile:

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

Verwendet die konfigurierten Werte - Sie müssen nicht erneut auf sie zugreifen und sie zuweisen.


Bei den null-Werten versuchen Sie, auf die Konfigurationswerte falsch zuzugreifen. Sie erstellen lediglich eine leere SmtpSection, anstatt sie aus der Konfiguration zu lesen.

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

Ich denke, wenn Sie defaultCredentials = "true" gesetzt haben, werden die Anmeldeinformationen = null sein, da Sie sie nicht verwenden.

Wird die E-Mail gesendet, wenn Sie die .Send-Methode aufrufen?

So

Dies sind meine E-Mail-Einstellungen für die Webkonfiguration:

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

und das ist 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

stellen Sie sicher, dass Sie in Ihrer Anwendung auf System.Net verweisen

0
Amr Elgarhy

Setzen Sie defaultCredentials = "false", da bei Angabe von true keine Berechtigungsnachweise verwendet werden.

0
Mattis