В соседней теме было упомянуто как тестировать email, если вы работаете с python. Если Python не ваш родной язык, если вы вообще не хотите писать свой #smtp сервер, а смотрите в сторону готовых решений, то самые лучшие из известны мне это Mailcatcher и MailTrap. Оба являются эмуляторами #smtp сервера + веб интерфейс к нему. Отличия в том, что Mailcatcher устанавливается локально, а mailtrap работает как сервис. Как следствие - mailtrap проще для старта, а mailcatcher лучше для стабильности тестов.
А ещё оба сервиса предоставляют #rest #api для доступа к текущим имейлам. С помощью него можно автоматизировать тестирование имейлов. Например, можно в селениум тесте проверить форму восстановления пароля и тут же посмотреть был ли отправлен имейл на нужный адрес. Затем взять из имейла новый пароль и попробовать с ним войти на сайт. Круто, не правда ли?
Итак, я опишу как работает Mailcatcher через #rest и приведу простую реализацию для работы с ним на #php :
GET: http://127.0.0.1:1080/messages
получить список всех имейлов в json формате. Мы получаем id и subject.
GET: http://127.0.0.1:1080/messages/1.json
получить дательную информацию о сообщении с id=1. В том числе sender и recipients (массив)
GET: http://127.0.0.1:1080/messages/1.html
получить html часть сообщения (если есть)
GET: http://127.0.0.1:1080/messages/1.plain
получить текстовую часть сообщения (если есть)
DELETE: http://127.0.0.1:1080/messages
очистить имейлы. Самая важная и недокументиированая команда.
Для #phpunit я написал класс EmailTestCase, который расширяет стандартный, и использует библиотеку Guzzle для выполнения #rest запросов.
С Guzzle запросы к mailcatcher будут выглядеть так:
<?php
$this->mailcatcher = new \Guzzle\Http\Client('http://127.0.0.1:1080');
$this->mailcatcher->get('/messages')->send();
$this->mailcatcher->get("/messages/{$email->id}.html")->send();
$this->mailcatcher->delete('/messages')->send();
?>
Аналогичным образом можете реализовать взаимодействие своих тестов с mailcatcher с помощью любого другого #rest клиента в любом другом языке программирования.