Search code examples
c#web-configsmtpmailsettings

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


Solution

  • 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");