Comments 21
Как-то надо было выловить кто в сети спамит, завернул весь исходящий трафик 25 порта на локальный, и вот этот скрипт запустил.
github.com/jevin/Dummy-SMTP
Просто замечу, что кто будет ставить mailcatcher, то нужен ruby > 2.0. Я установил 2.1.4 через rvm, только тогда поставился mailcatcher.
UFO landed and left these words here
А если нужно еще быстрее, то можно просто сделать в консоли:

python -m smtpd -n -c DebuggingServer localhost:1025

или

sudo python -m smtpd -n -c DebuggingServer localhost:25

и получить вывод почты в консоль (впрочем, с помощью `tee` можно ее и в файлы перенаправлять).
а вот с помощью netcat:

файл smtp.sh
#!/bin/bash

       echo "10x.example.com ESMTP"

       read helo
       echo "250 10x.example.com"

       read mail_from
       echo "250 ok"

       read rcpt_to
       echo "250 ok"

       read data
       echo "354 go ahead"

       read newline_dot_newline
       echo "250 ok 1134335146 qp 3108"

       read quit
       echo "221 10x.example.com"

       echo "$helo" > myfile
       echo "$mail_from" >> myfile
       echo "$rcpt_to" >> myfile
       echo "$data" >> myfile
       echo "$newline_dot_newline" >> myfile
       echo "$quit" >> myfile



и сам сервер на основе nc
while true
do
     nc -l -p 10101 -e smtp.sh
done
Шагов для взвода этой халабуды требуется больше, чем для команды dpkg-reconfigure postfix
можно и
sudo dpkg-reconfigure exim4-config

Но я с бубном плясал часа 4 вокруг него и postfix, хоть и руки не из жопы. Так что если у кого-то будут проблемы с подъёмом стандартного софта, можно попробовать мой вариант.
sudo ln -s /etc/init.d/fakemail /etc/rc2.d/S20fakemail
sudo ln -s /etc/init.d/fakemail /etc/rc3.d/S20fakemail
sudo ln -s /etc/init.d/fakemail /etc/rc4.d/S20fakemail
sudo ln -s /etc/init.d/fakemail /etc/rc5.d/S20fakemail

update-rc.d fakemail start 20 2 3 4 5. stop 80 0 1 6
добавлю, что для более корректного добавления (не знаю кто как, но мне больше нравится работать через интерфейс того, что уже существует, нежели пилить свои грабли — я имею в виду ручную линковку файлов) в начало файла-демона следует добавить следующий код

### BEGIN INIT INFO
# Provides:          fakemail
# Required-Start:    $remote_fs $syslog $nullmailler
# Required-Stop:     $remote_fs $syslog $nullmailler
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

и далее добавить инициализировать демон

update-rc.d fakemail default

взято отсюда
Для меня стоял выбор минимизации. А java это тяжело и много памяти кушает. Хотя, думаю, удобно.
преамбула: есть docker-контейнер для локальной разработки веб-приложения, которое в процессе работы использует smtp-сервер для отправки сообщений на почтовые ящики пользователей.
вопрос: можно ли использовать сию связку (если развернуть ее на хост-системе) для тестирования работы отправки писем этим веб-приложением?
действительно, не охота (да и не зачем оно на рабочей станции) поднимать все хозяйство для корректной работы smtp-сервера
эта штука «висит» на конкретном порту конкретного хоста биндясь на конкретный айпишник. А так как оно использует только системные вещи, то должно заработать и в docker-контейнере без проблем.
мне нужно чтобы оно висело на 25-ом порту определенного интерфейса моей хост машины, а с контейнера я мог отправлять почту через этот порт хост-машины (с помощью того же Swiftmailer) и письма складировались в некой папке. это можно? для меня это было бы идеальным вариантом
в принципе, оно так и задумано. При запуске fakemail.py укажите --port=25 --host=192.168.0.55 --path=/path/to/mail/folder
спасибо за связку — все работает как мне и требовалось
<хотелка>вот было бы еще шикарно чтобы письма сохранялись не от рута</хотелка>
Можно не от рута, если вы запустите его для порта выше 1000. например, 1025 и для smtp укажите этот порт. А так как nullmailer запускается при старте системы, то должно работать.
спасибо за подсказки
довел я до ума сей скрипт и его запуск под себя
1. для запуска от своего пользователя использую порд 25025 и подкорректировал запуск демона:
/etc/init.d/fakemail

start_fakemail()
{
    start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --chuid myusername --exec $DAEMON -- $DOPTIONS >/dev/null 2>&1 &
}

2. для того, чтобы корректно просматривать сообщения советую добавить нужное расширение к сохраняемым файлам — eml, у меня установлен Thunderbird и он корректно открывает это сообщение — скорее всего нам же нужно не только знать отправилось ли сообщение, а еще и посмотреть как оно отрендерилось. потому добавляем следующее в файл fakemail.py — у меня он лежит тут /usr/local/bin/fakemail.py
находим строку

filename = os.path.join(self.path, "%s.%s" % (recipient, count))

и изменяем на

filename = os.path.join(self.path, "%s.%s.eml" % (recipient, count))

теперь мы можем открывать письма для просмотра например с помощью Thunderbird
Only those users with full accounts are able to leave comments. Log in, please.