asp.net net.mail - маршрутизировать все письма на другой адрес электронной почты в режиме отладки - PullRequest
3 голосов
/ 12 марта 2009

Есть ли в любом случае, чтобы все электронные письма шли на другой адрес, когда System.Web.HttpContext.Current.IsDebuggingEnabled верно? Или мне нужен новый класс, который я использую для отправки электронной почты везде?

Ответы [ 5 ]

4 голосов
/ 12 марта 2009

Я бы настроил SMTP-сервер, и ваше веб-приложение использовало его в качестве сервера исходящей почты (указано в некоторой конфигурации) На производственных сайтах сервер будет работать нормально, но для отладки вы можете настроить SMTP-сервер для маршрутизации всей почты на ваш выбранный адрес. Преимущество этого состоит в том, что вы вообще не меняете свое приложение, что может быть полезно, если изменение поведения предотвращает возникновение ошибок, которые вы пытаетесь воспроизвести, и т. Д. Моя компания использует этот подход для обеспечения качества, и он работает довольно хорошо.

2 голосов
/ 12 марта 2009

Я должен быть честным, я использую старый добрый

#if DEBUG
    Mail.To("debug@debugaddress.com");
#else
    Mail.To("actualrecipient@destinationaddress.com");
#endif

Чтобы я не использовал отладочный код в своих производственных приложениях. Подход, который я использую для доступа к базе данных, состоит в том, чтобы использовать запись dns, т.е. database1.domain.com, и в файле hosts на моем компьютере разработчика он указывает на мою локальную систему, а на моем рабочем компьютере - на сервер базы данных. Вы можете использовать нечто подобное, чтобы иметь отладочный почтовый сервер и рабочий почтовый сервер, но это кажется излишним по сравнению с первым решением, приведенным выше.

2 голосов
/ 12 марта 2009

Вы можете поместить это в свой код везде, где вы его используете:

if (System.Web.HttpContext.Current.IsDebuggingEnabled)
{
 mail.To = "debug@debug.com";
}
else
{
 mail.To = recipientAddress;
}

Или просто создайте простую оболочку для получения адресов электронной почты (даже что-то в методе получения адресов получателей) или оболочку для всего класса smtpclient или mailmessage.

1 голос
/ 12 марта 2009

Мы используем решение, аналогичное методу MailProxy, описанному tvanfosson. Однако у нас есть несколько отличий, которые, я чувствую, стоит упомянуть. Во-первых, мы просто расширяем класс SmtpClient и переопределяем методы Send в среде разработки или тестирования. Мы используем конфигурационный файл для определения среды. Затем мы используем этот класс в любое время, когда нам нужно отправить электронные письма. Этот класс определит, кто в данный момент вошел в приложение, и перенаправит все сгенерированные им электронные письма, при переходе на другой ресурс к стандартному списку получателей, если вошедший в систему пользователь по какой-либо причине недоступен. Это помогает, если у вас есть несколько человек, которые тестируют или разрабатывают, так как они будут получать только те письма, которые они сгенерировали. Мы также добавляем исходных получателей сообщения в тело сообщения. Это снова полезно при тестировании сообщений типа рабочего процесса, чтобы убедиться, что они отправляются нужным лицам. Наконец, я считаю полезным добавить тег [DEV] или [QA] к теме сообщения, чтобы я мог настроить правило в своем почтовом клиенте для обработки всех тестовых сообщений.

1 голос
/ 12 марта 2009

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

public class MailProxy
{
     private bool IsDebug { get; set; }
     private string DebugAddress { get; set; }
     private SmtpClient Client { get; set; }

     public MailProxy( SmtpClient client,
                       bool debugging,
                       string debugAddress )
     {
         this.IsDebug = debugging;
         this.DebugAddress = debugAddress;
     }

     public void Send( MailMessage message )
     {
         if (this.IsDebug)
         {
             message.To = new MailAddress(this.DebugAddress);
         }
         this.Client.Send( message );
     }

     ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...