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...
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");
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With