View Categories

Setting Multiple SMTP Settings in web.config?

2 min read

Setting Multiple SMTP Settings in web.config? #

I am building an app that needs to dynamically/programatically know of and use different SMTP settings when sending email.

I’m used to using the system.net/mailSettings approach, but as I understand it, that only allows one SMTP connection definition at a time, used by SmtpClient().

However, I need more of a connectionStrings-like approach, where I can pull a set of settings based on a key/name.

Any recommendations? I’m open to skipping the tradintional SmtpClient/mailSettings approach.

Here is Some Solutions :

Solution 1: #

I needed to have different smtp configurations in the web.config depending on the environment: dev, staging and production.

Here’s what I ended up using:

In web.config:

<configuration>
<configSections>
<sectionGroup name=”mailSettings”>
<section name=”smtp_1″ type=”System.Net.Configuration.SmtpSection”/>
<section name=”smtp_2″ type=”System.Net.Configuration.SmtpSection”/>
<section name=”smtp_3″ type=”System.Net.Configuration.SmtpSection”/>
</sectionGroup>
</configSections>
<mailSettings>
<smtp_1 deliveryMethod=”Network” from=”mail1@temp.uri”>
<network host=”…” defaultCredentials=”false”/>
</smtp_1>
<smtp_2 deliveryMethod=”Network” from=”mail2@temp.uri”>
<network host=”1…” defaultCredentials=”false”/>
</smtp_2>
<smtp_3 deliveryMethod=”Network” from=”mail3@temp.uri”>
<network host=”…” defaultCredentials=”false”/>
</smtp_3>
</mailSettings>
</configuration>
Then in code:

return (SmtpSection)ConfigurationManager.GetSection(“mailSettings/smtp_1”);
return (SmtpSection)ConfigurationManager.GetSection(“mailSettings/smtp_2”);
return (SmtpSection)ConfigurationManager.GetSection(“mailSettings/smtp_3”);

Solution 2: #

System.Net.Mail.MailMessage mail = null;
System.Net.Mail.SmtpClient smtp = null;

mail = new System.Net.Mail.MailMessage();

//set the addresses
mail.From = new System.Net.Mail.MailAddress(System.Configuration.ConfigurationManager.AppSettings[“Email1”]);
mail.To.Add(“someone@example.com”);

mail.Subject = “The secret to the universe”;
mail.Body = “42”;

//send the message
smtp = new System.Net.Mail.SmtpClient(System.Configuration.ConfigurationManager.AppSettings[“YourSMTPServer”]);

//to authenticate, set the username and password properites on the SmtpClient
smtp.Credentials = new System.Net.NetworkCredential(System.Configuration.ConfigurationManager.AppSettings[“EmailUsername1”], System.Configuration.ConfigurationManager.AppSettings[“EmailPassword1”]);
smtp.UseDefaultCredentials = false;
smtp.Port = System.Configuration.ConfigurationManager.AppSettings[“EmailSMTPPort”];
smtp.EnableSsl = false;

smtp.Send(mail);

Solution 3: #

First set up config sections:

<configuration>
<configSections>
<sectionGroup name=”mailSettings”>
<section name=”default” type=”System.Net.Configuration.SmtpSection” />
<section name=”mailings” type=”System.Net.Configuration.SmtpSection” />
<section name=”partners” type=”System.Net.Configuration.SmtpSection” />
</sectionGroup>
</configSections>
<mailSettings>
<default deliveryMethod=”Network”>
<network host=”smtp1.test.org” port=”587″ enableSsl=”true”
userName=”test” password=”test”/>
</default>
<mailings deliveryMethod=”Network”>
<network host=”smtp2.test.org” port=”587″ enableSsl=”true”
userName=”test” password=”test”/>
</mailings>
<partners deliveryMethod=”Network”>
<network host=”smtp3.test.org” port=”587″ enableSsl=”true”
userName=”test” password=”test”/>
</partners>

Then it would be the best to create a some sort of wrapper. Note that most of code below was taken from .NET source code for SmtpClient here

public class CustomSmtpClient
{
private readonly SmtpClient _smtpClient;

public CustomSmtpClient(string sectionName = “default”)
{
SmtpSection section = (SmtpSection)ConfigurationManager.GetSection(“mailSettings/” + sectionName);

_smtpClient = new SmtpClient();

if (section != null)
{
if (section.Network != null)
{
_smtpClient.Host = section.Network.Host;
_smtpClient.Port = section.Network.Port;
_smtpClient.UseDefaultCredentials = section.Network.DefaultCredentials;

_smtpClient.Credentials = new NetworkCredential(section.Network.UserName, section.Network.Password, section.Network.ClientDomain);
_smtpClient.EnableSsl = section.Network.EnableSsl;

if (section.Network.TargetName != null)
_smtpClient.TargetName = section.Network.TargetName;
}

_smtpClient.DeliveryMethod = section.DeliveryMethod;
if (section.SpecifiedPickupDirectory != null && section.SpecifiedPickupDirectory.PickupDirectoryLocation != null)
_smtpClient.PickupDirectoryLocation = section.SpecifiedPickupDirectory.PickupDirectoryLocation;
}
}

public void Send(MailMessage message)
{
_smtpClient.Send(message);
}
}

#

Powered by BetterDocs

Leave a Reply

Your email address will not be published. Required fields are marked *

Privacy Settings
We use cookies to enhance your experience while using our website. If you are using our Services via a browser you can restrict, block or remove cookies through your web browser settings. We also use content and scripts from third parties that may use tracking technologies. You can selectively provide your consent below to allow such third party embeds. For complete information about the cookies we use, data we collect and how we process them, please check our Privacy Policy
Youtube
Consent to display content from Youtube
Vimeo
Consent to display content from Vimeo
Google Maps
Consent to display content from Google
Spotify
Consent to display content from Spotify
Sound Cloud
Consent to display content from Sound