Вы можете выполнить довольно много сценариев своей электронной почты, используя модульные тесты и импровизированную реализацию почтовой программы. Например, вы можете создать интерфейс и оболочку для класса SmtpClient. Эта обертка должна реализовывать интерфейс. Используйте внедрение зависимостей, чтобы предоставить зависимый класс SmtpWrapper (в качестве интерфейса) классу, который его использует. В своих модульных тестах вы можете предоставить фиктивный экземпляр интерфейса для тестируемого класса и убедиться, что он правильно отправляет ожидаемые сообщения получателям, которых вы ожидаете, учитывая настройку теста.
В конце концов вам придется запустить несколько интеграционных тестов, но, вероятно, гораздо меньше. В своих интеграционных тестах вы можете использовать свой тестовый SMTP-сервер. Учитывая, что большинство ваших тестов выполняются в модульном тестировании с вашей фиктивной реализацией, этого может быть достаточно, чтобы не дать вашему корпоративному почтовому серверу неверно идентифицировать ваш тестовый сервер.