Настройка нескольких параметров 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?
  • Как сохранить словарь в моем файле web.config?
  • Отладка / выпуск Web.Config
  • Использование другого Web.config в среде разработки и производства
  • Как увеличить тайм-аут запроса в IIS?
  • как добавить файлы в процесс преобразования web.config?
  • Веб-сайты Windows Azure переопределяют мои страницы ошибок 404 и 500 в моем приложении node.js
  • URL-маршрутизация, обработчик изображений и «потенциально опасное значение Request.Path»
  • Переменные в app.config / web.config
  • Что делает файл Web.Config в папке представлений проекта MVC
  • Добавление machineKey в web.config на веб-сайтах
  • Interesting Posts

    Как определить число с плавающей запятой, используя регулярное выражение

    Как я могу автоматически добавить код скелета при создании нового файла с помощью vim

    Как читать / писать строки из файла на Android

    проверить параметры вариационных шаблонов для уникальности

    ASP.NET-controller: asynchronous модуль или обработчик завершен, пока асинхронная операция все еще находится на рассмотрении

    Проблема с IOS7 (только) stdlibc ++

    Как искать файлы внутри Windows 7?

    Квадратное обнаружение не находит квадратов

    Выводит ли квадрат из прямоугольника нарушением Принципа замещения Лискова?

    Ssd работает медленно

    Какие специальные переменные доступны при написании команды оболочки для контекстного меню

    Не удается загрузить Windows 8.1 после перехода на Samsung SSD с помощью поставляемого программного обеспечения

    Где команда командной строки разработчика для VS2013?

    Назначает ли объекты null в сборку мусора Java?

    Печать QTableView

    Давайте будем гением компьютера.