See if the following helps.
- Reads email settings
- Reads connection string
- Reads one AppSetting value
![enter image description here]()
app.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="mailSettings">
<section name="smtp_1" type="System.Net.Configuration.SmtpSection"/>
<section name="smtp_2" type="System.Net.Configuration.SmtpSection"/>
</sectionGroup>
</configSections>
<appSettings>
<add key="filePath" value="C:\Users\gertl\Source\Repos\TournamentTracker\TextData"/>
<add key="greaterWins" value="1"/>
<add key="senderEmail" value="me@outlook.com "/>
<add key="senderDisplayName" value="TournamentTracker "/>
</appSettings>
<connectionStrings>
<add name="Tournaments" connectionString="Server=xxx;Database=Tournaments;Trusted_Connection=True;" providerName="System.Data.SqlClient"/>
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<mailSettings>
<smtp_1 from="someone@gmail.com">
<network
host="smtp.gmail.com"
port="587"
enableSsl="true"
userName="MssGMail"
password="!@45cow"
defaultCredentials="false" />
<specifiedPickupDirectory pickupDirectoryLocation="MailDrop"/>
</smtp_1>
<smtp_2 from="karenpayneoregon@gmail.com">
<network
host="smtp.gmail.com"
port="587"
enableSsl="true"
userName="oregon@gmail.com"
password="password"
defaultCredentials="false" />
<specifiedPickupDirectory pickupDirectoryLocation="MailDrop"/>
</smtp_2>
</mailSettings>
<system.net>
<mailSettings>
<smtp from="Someone@comcast.net">
<network
host="smtp.comcast.net"
port="587"
enableSsl="true"
userName="MissComcast"
password="d@45cat"
defaultCredentials="true" />
<specifiedPickupDirectory pickupDirectoryLocation="MailDrop"/>
</smtp>
</mailSettings>
</system.net>
</configuration>
Class for getting email settings
using System;
using System.Configuration;
using System.IO;
using System.Net.Configuration;
namespace SmtpConfigurationExample.Classes
{
public class MailConfiguration
{
private readonly SmtpSection _smtpSection;
public MailConfiguration(string section = "system.net/mailSettings/smtp")
{
_smtpSection = (ConfigurationManager.GetSection(section) as SmtpSection);
}
public string FromAddress => _smtpSection.From;
public string UserName => _smtpSection.Network.UserName;
public string Password => _smtpSection.Network.Password;
public bool DefaultCredentials => _smtpSection.Network.DefaultCredentials;
public bool EnableSsl => _smtpSection.Network.EnableSsl;
public string PickupFolder
{
get
{
var mailDrop = _smtpSection.SpecifiedPickupDirectory.PickupDirectoryLocation;
if (mailDrop != null)
{
mailDrop = Path.Combine(
AppDomain.CurrentDomain.BaseDirectory,
_smtpSection.SpecifiedPickupDirectory.PickupDirectoryLocation);
}
return mailDrop;
}
}
/// <summary>
/// Determine if pickup folder exists
/// </summary>
/// <returns></returns>
public bool PickupFolderExists() => Directory.Exists(PickupFolder);
/// <summary>
/// Gets the name or IP address of the host used for SMTP transactions.
/// </summary>
public string Host => _smtpSection.Network.Host;
/// <summary>
/// Gets the port used for SMTP transactions
/// </summary>
public int Port => _smtpSection.Network.Port;
/// <summary>
/// Gets a value that specifies the amount of time after
/// which a synchronous Send call times out.
/// </summary>
public int TimeOut => 2000;
public override string ToString() => $"From: [ {FromAddress} ]" +
$"Host: [{Host}] Port: [{Port}] " +
$"Pickup: {Directory.Exists(PickupFolder)}";
}
}
Form code
using System;
using System.Text;
using System.Windows.Forms;
using SmtpConfigurationExample.Classes;
using static System.Configuration.ConfigurationManager;
namespace SmtpConfigurationExample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void GetEmailSettingsButton_Click(object sender, EventArgs e)
{
var mc = new MailConfiguration();
var builder = new StringBuilder();
builder.AppendLine($"User name: {mc.UserName}");
builder.AppendLine($"From: {mc.FromAddress}");
builder.AppendLine($"Host: {mc.Host}");
builder.AppendLine($"Port: {mc.Port}");
ResultsTextBox.Text = builder.ToString();
}
private void GetConnectionButton_Click(object sender, EventArgs e)
{
ResultsTextBox.Text = ConnectionStrings["Tournaments"].ConnectionString;
}
private void FilePathButton_Click(object sender, EventArgs e)
{
ResultsTextBox.Text = AppSettings["filePath"];
}
}
}