Как стать автором
Обновить

Комментарии 28

Но зачем, если есть mailcatcher.me?
Например чтоб при тестировании не отправлять письма реальным пользователям или на не существующие адреса.
Debug Mail — это сервис, его не нужно устанавливать в отличии от mailcatcher. Также в Debug Mail есть возможности для совместной работы.
Много говорите о фичах, но какую проблему вы решаете?
Интересный инструмент, но с чем его едят?
Решаем проблему отладки email-рассылок. Т.к. в этот процесс могут быть вовлечены сразу несколько сотрудников (разработчики, верстальщики, дизайнеры, клиенты), то важной частью сервиса мы сделали совместную работу.
Это понял, но тогда еще вопрос.
Какие задачи в рассылках требуют коллективного решения, для чего тут нужна совместная работа, и почему для этого нельзя использовать любой SMTP-сервер?
Задаю не из праздного любопытства, а из профессионального интереса.
Опишу несколько кейсов:
  • Совместная работа нескольких разработчиков на staging сервере.
  • Работа тестировщика. Если найдена ошибка в письме, он может легко получить на него прямую ссылку и отправить её в баг-трекер.
  • Работа дизайнеров. Если есть какая-то ошибка в дизайне письма, можно добавить к нему комментарии через сервис coment.me. Это делается в один клик.
  • Показать письмо по прямой ссылке заказчику, если тот уже очень любопытный.


Сервис делался с оглядкой на те ситуации, которые возникали при работе нашей команды.
Это скорее транзакционные рассылки или массовые? Есть ли у вас анализ DKIM, SPF и прочих подписей?
Имеется в виду работа над автоматическими рассылками в процессе разработки сайта/приложения и тд.
Предполагается использование исключительно в dev/staging окружении, анализа DKIM, SPF у нас нет, по этой причине.
А как это связано с работой верстальщика (упомянутого вами дизайнера). Он сможет посмотреть это письмо в различных почтовых клиентах чтобы проверить не поплыл ли дизайн или еще какие косяки отладить?
На данный момент он может посмотреть как выглядит письмо в браузере. Описанная вами функция есть в плане для дальнейшнего развития сервиса, если комьюнити проявит заинтересованность.
Да, сервисы решают примерно одну проблему, но у нас акцент на совместную работу.
Это не одно и тоже. Для локальной работы ваше решение вполне применимо, но это не достаточно удобно при работе в команде. Да и история писем не сохраняется.
$ python -m smtpd -nc DebuggingServer localhost:2525 > smtp_history

Теперь сохраняется. =) Конечно ваш сервис круче, с этим никто не спорит. Просто многие не знают, что если у них есть python в системе, то вот так просто можно запустить smtp-демон для дебага. Он входит в стандартную пайтоновскую библиотеку.
Да, такое решение тоже имеет право на жизнь. Вопрос в том, какие задачи возникают у конкретного разработчика/команды. Для кого-то ваше решение будет покрывать все необходимые задачи.
А почему порт 9025 а не 25?
Так проще было, из-за того, что слушать 25-й порт может только root.
Если есть какая-то причина, по которой 25й порт удобнее, то подумаем о том, чтобы настроить forwarding с него.
Причина простая — порт для SMTP это 25. RFC, IANA.

sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 25 -j REDIRECT --to-ports 9025
Это понятно. Сделаем.
Открыли 25й порт.
Да крутая штука, чего уж тут.
Он у вас почему-то не-MIME письма не принимает — молча закрывает сокет и всё. Понимаю, конечно, что plaintext письма почти никто не отправляет сейчас, но можно же хотя-бы по человечески по RFC ответить сообщением об ошибке и только после этого отключаться.

$ python
Python 2.7.3 (default, Feb 27 2014, 20:00:17) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import smtplib
>>> s = smtplib.SMTP('debugmail.io', 9025, 'localhost')
>>> s.login("*********************", "***************")
(235, '2.7.0 Authentication successful')
>>> s.sendmail("wasd@localhost", "to@localhost", "non-mime-plaintext")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/smtplib.py", line 734, in sendmail
    (code, resp) = self.data(msg)
  File "/usr/lib/python2.7/smtplib.py", line 502, in data
    (code, msg) = self.getreply()
  File "/usr/lib/python2.7/smtplib.py", line 361, in getreply
    raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed
Спасибо, поправим.
Поправили это.
Отличный сервис, сделан достаточно просто. Он останется бесплатным?
Спасибо. Все доступные сейчас функции точно останутся бесплатными.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации