Обход отправки электронной почты в c # - PullRequest
0 голосов
/ 08 декабря 2011

Я отлаживаю приложение, которое отправляет электронное письмо после нажатия кнопки, но электронное письмо отправляется от компонента, который он использует, и у меня нет доступа к его источнику, оно использует localhost в качестве сервера smtp,Можно ли пропустить отправку этого письма?Я не хочу устанавливать SMTP-сервер только для этого ...

спасибо!

Ответы [ 3 ]

2 голосов
/ 08 декабря 2011

вы должны иметь возможность добавить параметр в файл конфигурации, чтобы написать письмо в виде файла.

<specifiedPickupDirectory pickupDirectoryLocation="c:\test"/>
1 голос
/ 08 декабря 2011

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

Например, у вас может быть класс с именем Emailer, который принимает экземпляр IEmailProvider для использования при отправке электронной почты (IEmailProvider.SendEmail (...)).Тогда у вас может быть два класса, которые реализуют IEmailProvider, один, который вызывает стороннюю библиотеку и используется по умолчанию в вашем приложении, а другой - ваша фиктивная оболочка, которая ничего не делает с содержимым или записывает его на диск.Итак, что-то вроде:

public class Emailer{
   private IEmailProvider _provider;

   public Emailer(IEmailProvider provider){
      _provider = provider;
   }

   public SendEmail(...){
      _provider.SendEmail();
   }
}

interface IEmailProvider{
   SendEmail(...);
}

public RealEmailProvider : IEmailProvider{
   // ... real code to implement send email method
}

public FakeEmailProvider : IEmailProvider{
   public SendEmail(...){ /* Do Nothing? */ }
}

Не зная, как настроен ваш код, я не знаю, будет ли использование Singleton для электронной почты лучшим выбором, своего рода ручное внедрение зависимости, средство внедрения зависимости,или, может быть, даже другие методы.

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

1 голос
/ 08 декабря 2011

Я бы установил легкий SMTP-сервер для отладки, например PaperCut .

Накладных расходов практически нет. Реальные электронные письма не отправляются, просто вы можете видеть содержимое того, что будет отправлено.

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