Тестирование SMTP с помощью .net
Мне нужно настроить SMTP-сервер для тестирования моего веб-сайта, который отправляет электронные письма (для подтверждения регистрации и т.д.).
Я действительно не хочу, чтобы письмо отправлялось, я просто хочу убедиться, что мой код верен. Поэтому я хочу проверить, что электронная почта помещена в папку очереди, например.
Можно ли рекомендовать SMTP-сервер, который легко настроить?
Ответы
Ответ 1
Там также Papercut, который является SMTP-сервером, который будет получать сообщения, но не доставляет их в любом месте (позволяя вам убедиться, что они отправляется правильно). Полученные сообщения отображаются в небольшом графическом интерфейсе и также записываются в каталог.
Ответ 2
В .NET SmtpClient может быть настроен для отправки электронной почты, поместив его в каталог пикапа.
Конструктор по умолчанию для SmtpClient принимает свои настройки из app.config, поэтому для тестовой среды мы можем настроить его следующим образом.
<configuration>
<system.net>
<mailSettings>
<smtp deliveryMethod="specifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="path to a directory" />
</smtp>
</mailSettings>
</system.net>
</configuration>
Ссылка MSDN - элемент app.config mailSettings http://msdn.microsoft.com/en-us/library/w355a94k.aspx
Ответ 3
Проект smtp4dev - еще один фиктивный SMTP-сервер. Мне это нравится, потому что у него есть простой, простой пользовательский интерфейс, который регистрирует сообщения и позволяет просматривать содержимое последних сообщений. Написан на С# с установщиком MSI. Исходный код доступен.
Ответ 4
Я думаю, что сообщение в блоге Простой SMTP-сервер Mock для .NET дает вам то, что вам нужно: SMTP-сервер mock
Макет SMTP-сервера в основном подделка SMTP-сервер, который может использоваться для блока тестирование приложений, которые отправляют сообщения электронной почты.
Кроме того, google search для smtp mock server предоставит вам выбор SMTP-серверов для тестирования. Как:
Ответ 5
Для .NET ребята. Держать его просто.
Мы изучали это, а затем один из разработчиков вспомнил о настройке конфигурации, который позволяет переопределить способ отправки сообщений электронной почты.
Это создаст файл по электронной почте и оставит его в покое.
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="\\SharedFolder\MailDrop\" />
</smtp>
</mailSettings>
</system.net>
Ответ 6
Альтернативный способ сделать это - создать оболочку вокруг SmtpClient, которая реализует один и тот же интерфейс. Затем вставьте и используйте обертку в своем классе. При выполнении модульного тестирования вы можете затем заменить макетную оболочку, которая имеет ожидания для вызовов и ответов метода.
РЕДАКТИРОВАТЬ. Требуется оболочка (для RhinoMocks, по крайней мере), потому что SmtpClient не выводится из интерфейса и не имеет виртуальных методов. Если вы используете фальшивую фреймворк, который может издеваться над классом без виртуальных методов напрямую, вы можете пропустить оболочку и сразу ввести макет SmtpClient.
public class SmtpClientWrapper
{
private SmtpClient Client { get; set; }
public SmtpClientWrapper( SmtpClient client )
{
this.Client = client;
}
public virtual void Send( MailMessage msg )
{
this.Client.Send( msg );
}
...
}
public class MyClass
{
private SmtpClientWrapper Client { get; set; }
public MyClass( SmtpClientWrapper client )
{
this.Client = client;
}
public void DoSomethingAndNotify()
{
...
this.Client.Send( msg );
}
}
Протестировано (с RhinoMocks) как:
public void DoSomethingAndNotifySendsAMessageTest()
{
SmtpClientWrapper client = MockRepository.GenerateMock<SmtpClientWrapper>();
client.Expect( c => c.Send( new MailMessage() ) ).IgnoreArguments();
MyClass klass = new MyClass( client );
klass.DoSomethingAndNotify();
client.VerifyAllExpectations();
}
Ответ 7
Я нашел это - http://improve.dk/archive/2010/07/01/papercut-vs-smtp4dev-testing-mail-sending-locally.aspx, в котором объясняется, как использовать papercut и smtp4dev, которые являются хорошими инструментами
Ответ 8
Я использую Antix SMTP Server для разработчиков, который так же просто, как открытие приложения. Он сохраняет сообщения в папке, и вы можете просматривать их с помощью пользовательского интерфейса. Довольно быстрое/простое решение. Я хотел упомянуть об этом здесь.
Смотрите также: сервер smtp разработки для Windows
Ответ 9
DevNull SMTP-сервер регистрирует все подробные сведения о связи между клиентом и SMTP-сервером. Похоже, было бы полезно, если бы вы пытались диагностировать, почему ваш код отправки не работал.
Он написан на Java и развертывается как исполняемый банкомат. Исходный код кажется недоступным.
Ответ 10
Если вы находитесь в Mac OS X, вы можете использовать MockSMTP.app
Ответ 11
Вы также можете использовать netDumbster.
http://netdumbster.codeplex.com/
Ответ 12
есть и мой собственный http://ssfd.codeplex.com/, который является эмулятором SMTP с открытым исходным кодом.
Получает электронную почту и отбрасывает их в папку, к которой можно получить доступ с помощью значка задачи
Ответ 13
Обратите внимание, что класс SmtpClientWrapper, предложенный tvanfosson, нуждается во всем важном ключевом слове "virtual" в его объявлении метода отправки, иначе вы вернетесь в ту же лодку, что и при попытке напрямую связать SmtpClient.
Ответ 14
В соответствии с многими другими предложениями бесплатный инструмент, который я использовал довольно много: http://www.toolheap.com/test-mail-server-tool/
Не для TDD, но полезно для ручного тестирования, так как он может всплывать в окне быстрого просмотра Outlook с каждым отправленным электронным письмом.
Ответ 15
Если у вас установлен Python, вы можете запустить следующий один лайнер для запуска отладочного smtp-сервера в консоли, который выведет сообщения в стандартный вывод:
sudo python -m smtpd -n -c ОтладкаServer localhost: 25
застрял отсюда:
http://muffinresearch.co.uk/archives/2010/10/15/fake-smtp-server-with-python/
Ответ 16
Как отметил Шон Карпентер, Papercut является мощным решением для локального развития. Однако, если вы также запускаете сервер постановки или тестирования, mailtrap.io может быть более простым решением в целом, потому что вы можете использовать тот же подход для своего dev и промежуточных средах.