Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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, and I think will have to...

like image 583
alphadogg Avatar asked Dec 06 '10 03:12

alphadogg


2 Answers

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="[email protected]">       <network host="..." defaultCredentials="false"/>     </smtp_1>     <smtp_2 deliveryMethod="Network" from="[email protected]">       <network host="1..." defaultCredentials="false"/>     </smtp_2>     <smtp_3 deliveryMethod="Network" from="[email protected]">       <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"); 
like image 139
Mikko Rasinkangas Avatar answered Sep 23 '22 08:09

Mikko Rasinkangas


SmtpSection smtpSection =  (SmtpSection)ConfigurationManager.GetSection("mailSettings/smtp_1");  SmtpClient smtpClient = new SmtpClient(smtpSection.Network.Host, smtpSection.Network.Port); smtpClient.Credentials = new NetworkCredential(smtpSection.Network.UserName, smtpSection.Network.Password); 
like image 43
Behruz Tolibov Avatar answered Sep 20 '22 08:09

Behruz Tolibov