How to read system.net/mailSettings/smtp from Web.config

C#Web ConfigSmtpSendmail

C# Problem Overview


This is my web.config mail settings:

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

and here's how I try to read the values from 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;

But credentials are always null. How can i access these values?

C# Solutions


Solution 1 - C#

Since no answer has been accepted, and none of the others worked for me:

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

Solution 2 - C#

It is not necessary to use the ConfigurationManagerand get the values manually. Simply instantiating an SmtpClient is sufficient.

SmtpClient client = new SmtpClient();

This is what MSDN says: > This constructor initializes the Host, Credentials, and Port properties for the new SmtpClient by using the settings in the application or machine configuration files.

Scott Guthrie wrote a small post on that some time ago.

Solution 3 - C#

By using the configuration, the following line:

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

Will use the configured values - you don't need to access and assign them again.


As for the null values - you are trying accessing the configuration values incorrectly. You are just creating an empty SmtpSection instead of reading it from configuration.

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

Solution 4 - C#

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

Solution 5 - C#

I think if you have defaultCredentials="true" set you will have the credentials = null as you are not using them.

Does the email Send when you call the .Send method?

So

This is my web config mail settings:

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

and this is 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)
);

Solution 6 - C#

make sure you have reference to System.Net in your application

Solution 7 - C#

Set defaultCredentials="false", because when it's set to true, no credentials are used.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionnermikView Question on Stackoverflow
Solution 1 - C#Darren GriffithView Answer on Stackoverflow
Solution 2 - C#bertlView Answer on Stackoverflow
Solution 3 - C#OdedView Answer on Stackoverflow
Solution 4 - C#Kiran MasalView Answer on Stackoverflow
Solution 5 - C#DoiremikView Answer on Stackoverflow
Solution 6 - C#Amr ElgarhyView Answer on Stackoverflow
Solution 7 - C#MattisView Answer on Stackoverflow