Настройка нескольких параметров SMTP в web.config?

Я создаю приложение, которое необходимо динамически / программно знать и использовать различные настройки SMTP при отправке электронной почты.

Я привык использовать подход system.net/mailSettings, но, насколько я понимаю, это позволяет только одно определение соединения SMTP за раз, используемое SmtpClient ().

Тем не менее, мне нужно больше похожего на connectionStrings подхода, где я могу выбрать набор параметров на основе ключа / имени.

Любые рекомендации? Я открыт, чтобы пропустить традиционный подход SmtpClient / mailSettings, и я думаю, вам придется …

Мне нужно было иметь разные smtp-конфигурации в web.config в зависимости от среды: dev, постановка и производство.

Вот что я в итоге использовал:

В web.config:

   

Затем в коде:

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

Вот как я его использую, и он отлично работает для меня (настройки похожи на ответ Микко):

  1. Сначала настройте разделы конфигурации:

        
    по

  2. Тогда было бы лучше создать какую-то оболочку. Обратите внимание, что большая часть кода, приведенного ниже, была взята из исходного кода .NET для SmtpClient здесь

     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); } 

    }

  3. Затем просто отправьте сообщение по электронной почте:

    новый CustomSmtpClient («рассылки»). Отправить (новый MailMessage ())

Это может или не поможет кому-то, но в случае, если вы здесь искали установку Mandrill для нескольких конфигураций smtp, я закончил создание classа, который наследует class SmtpClient, следующий за этим кодом людей, который действительно хорош: https://github.com /iurisilvio/mandrill-smtp.NET

  ///  /// Overrides the default SMTP Client class to go ahead and default the host and port to Mandrills goodies. ///  public class MandrillSmtpClient : SmtpClient { public MandrillSmtpClient( string smtpUsername, string apiKey, string host = "smtp.mandrillapp.com", int port = 587 ) : base( host, port ) { this.Credentials = new NetworkCredential( smtpUsername, apiKey ); this.EnableSsl = true; } } 

Вот пример того, как назвать это:

  [Test] public void SendMandrillTaggedEmail() { string SMTPUsername = _config( "MandrillSMTP_Username" ); string APIKey = _config( "MandrillSMTP_Password" ); using( var client = new MandrillSmtpClient( SMTPUsername, APIKey ) ) { MandrillMailMessage message = new MandrillMailMessage() { From = new MailAddress( _config( "FromEMail" ) ) }; string to = _config( "ValidToEmail" ); message.To.Add( to ); message.MandrillHeader.PreserveRecipients = false; message.MandrillHeader.Tracks.Add( ETrack.opens ); message.MandrillHeader.Tracks.Add( ETrack.clicks_all ); message.MandrillHeader.Tags.Add( "NewsLetterSignup" ); message.MandrillHeader.Tags.Add( "InTrial" ); message.MandrillHeader.Tags.Add( "FreeContest" ); message.Subject = "Test message 3"; message.Body = "love, love, love"; client.Send( message ); } } 

Просто передайте соответствующие данные, когда вы будете готовы отправить почту, и сохраните все эти настройки в настройках вашего приложения web.config.

Например, создайте различные настройки AppSettings (например, «EmailUsername1» и т. Д.) В web.config, и вы сможете их полностью разделить следующим образом:

  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("[email protected]"); 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); 

Я закончил создание собственного пользовательского загрузчика конфигурации, который используется в classе EmailService. Конфигурационные данные могут храниться в web.config так же, как строки соединений, и динамически вытягиваются по имени.

У меня была такая же потребность, и заметный ответ сработал для меня.

Я внес изменения в

web.config:

    
// noreply, in my case - use your mail in the condition bellow ...

Затем у меня есть stream, который отправляет почту:

SomePage.cs

 private bool SendMail(String From, String To, String Subject, String Html) { try { System.Net.Mail.SmtpClient SMTPSender = null; if (From.Split('@')[0] == "noreply") { System.Net.Configuration.SmtpSection smtpSection = (SmtpSection)ConfigurationManager.GetSection("mailSettings2/noreply"); SMTPSender = new System.Net.Mail.SmtpClient(smtpSection.Network.Host, smtpSection.Network.Port); SMTPSender.Credentials = new System.Net.NetworkCredential(smtpSection.Network.UserName, smtpSection.Network.Password); System.Net.Mail.MailMessage Message = new System.Net.Mail.MailMessage(); Message.From = new System.Net.Mail.MailAddress(From); Message.To.Add(To); Message.Subject = Subject; Message.Bcc.Add(Recipient); Message.IsBodyHtml = true; Message.Body = Html; Message.BodyEncoding = Encoding.GetEncoding("ISO-8859-1"); Message.SubjectEncoding = Encoding.GetEncoding("ISO-8859-1"); SMTPSender.Send(Message); } else { SMTPSender = new System.Net.Mail.SmtpClient(); System.Net.Mail.MailMessage Message = new System.Net.Mail.MailMessage(); Message.From = new System.Net.Mail.MailAddress(From); SMTPSender.EnableSsl = SMTPSender.Port ==  || SMTPSender.Port == ; Message.To.Add(To); Message.Subject = Subject; Message.Bcc.Add(Recipient); Message.IsBodyHtml = true; Message.Body = Html; Message.BodyEncoding = Encoding.GetEncoding("ISO-8859-1"); Message.SubjectEncoding = Encoding.GetEncoding("ISO-8859-1"); SMTPSender.Send(Message); } } catch (Exception Ex) { Logger.Error(Ex.Message, Ex.GetBaseException()); return false; } return true; } 

Спасибо =)

Кажется, что вы можете инициализировать использование разных строк SMTP.

SmtpClient client = новый SmtpClient (сервер);

http://msdn.microsoft.com/en-us/library/k0y6s613.aspx

Надеюсь, это то, что вы ищете.

  • Использовать преобразование web.config Visual Studio для отладки
  • Шифрование Web.Config
  • IIS7, web.config, чтобы разрешить только статический обработчик файлов в каталоге / загрузках веб-сайта
  • Как предотвратить перезапуск приложения ASP.NET при изменении web.config?
  • как добавить файлы в процесс преобразования web.config?
  • Как увеличить тайм-аут запроса в IIS?
  • Разрешить анонимную проверку подлинности для одной папки в web.config?
  • Поставщик «Microsoft.ACE.OLEDB.12.0» не зарегистрирован на локальном компьютере.
  • ASP.NET web.config: атрибуты configSource и файлов
  • Шифрование строки подключения в web.config
  • Как сохранить словарь в моем файле web.config?
  • Давайте будем гением компьютера.