Тестирование SMTP с .net - PullRequest
52 голосов
/ 15 февраля 2009

Мне нужно настроить SMTP-сервер для тестирования моего веб-сайта, который отправляет электронные письма (для подтверждения регистрации и т. Д.).

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

Кто-нибудь может порекомендовать SMTP-сервер, который легко настроить?

Ответы [ 16 ]

41 голосов
/ 15 февраля 2009

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

29 голосов
/ 18 февраля 2010

В .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

20 голосов
/ 03 ноября 2009

Проект smtp4dev является еще одним фиктивным SMTP-сервером. Мне это нравится, потому что он имеет приятный, простой пользовательский интерфейс, который регистрирует сообщения и позволяет просматривать содержимое последних сообщений. Написано на C # с помощью установщика MSI. Исходный код доступен.

8 голосов
/ 18 февраля 2010

Для парней .NET там. Сохраняя это простым.

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

Это создаст файл по электронной почте и оставит его в покое.

<system.net>
    <mailSettings>
      <smtp deliveryMethod="SpecifiedPickupDirectory">
        <specifiedPickupDirectory pickupDirectoryLocation="\\SharedFolder\MailDrop\" />
      </smtp>      
    </mailSettings>
  </system.net>
7 голосов
/ 15 февраля 2009

Я думаю, что сообщение в блоге Простой SMTP-сервер Макет для .NET дает вам то, что вам нужно: макет SMTP-сервера

Макет SMTP-сервера в основном подделка SMTP-сервер, который можно использовать для устройства тестирование приложений, которые отправляют сообщения электронной почты.

Кроме того, поиск в Google для smtp mock server предоставит вам выбор SMTP-серверов для тестирования. Как:

4 голосов
/ 15 февраля 2009

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

EDIT : Обертка необходима (по крайней мере для 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();
}
3 голосов
/ 07 ноября 2011

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

См. Также: Сервер разработки SMTP для Windows

3 голосов
/ 22 июля 2011

Я нашел это - http://improve.dk/archive/2010/07/01/papercut-vs-smtp4dev-testing-mail-sending-locally.aspx, который объясняет, как использовать papercut и smtp4dev, которые оба являются хорошими инструментами

2 голосов
/ 18 мая 2010

Вы также можете использовать netDumbster.

http://netdumbster.codeplex.com/

2 голосов
/ 19 января 2010

Если у вас Mac OS X, вы можете использовать MockSMTP.app

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