mailcatcher

mailcatcher

Конечно да, можно использовать обычную почту, но для облачных IDE или изолированных контейнеров LXC или для DOCKER окружения удобней будет подменять SMTP и смотреть почту локально или в браузере. Особенно удобно когда работаем дистанционно через облако.

Начиная с 2023 года использую maildev. Удобно и просто. Отдельно как сервис или в конфигурации (docker-compose) проекта.

mailcatcher написан на Ruby. Так как часть проектов у нас в экосистеме Rails это оказался самый удобный вариант. Каждый проект работает в изолированной среде. Это Docker/VPS/LXC. Для проектов есть шаблоны окружения. Поэтому все сервисы доступны разработчику сразу после инициализации.

Установка в контейнере

# ubuntu 18.04 LTS
sudo apt install ruby ruby-dev sqlite3 libsqlite3-dev
sudo gem install mailcatcher

Использование

# daemon mode by default
# демон будет работать как почтовый сервер, то есть он должен
# работать всегда при тестировании, ниже есть пример как создать 
# сервис в Ubuntu.
mailcatcher --ip 0.0.0.0

# foreground, по сути это простой интерфейс для просмотра почты
# работает асинхронно. 
mailcatcher --ip 0.0.0.0 --foreground

переходим в браузере http://<ip контейнера| или вашего сервера>:1080 и смотрим почту. Почту можно просматривать в text/html форматах.

docker/rails

Добавляем сервис в docker-compose проекта

version: "3"
services:
  app:
    ...
    env_file:
      - .env.development
  mailcatcher: 
  	image: diproart/mailcatcher
    ports:
      - 1080:1080	

В окружении разработки config/environment/development.rb настроим работу с сервисом

config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
    address: ENV['RAILS_SMTP_ADDRESS'], # mailcatcher
    port: ENV['RAILS_SMTP_PORT'] # 1025
  }
  

Определим в файле .env.development переменные окружения

RAILS_SMTP_ADDRESS=mailcatcher
RAILS_SMTP_PORT=1025
RAILS_MAILER_URL=localhost:3000

переходим в браузере http://localhost:1080

mailcatcher as service in ubuntu

Если используется LXC или сервер разработки (vps, hyper-v и т.д.), удобно создать сервис и иметь возможность управлять им.

Исполняемые файлы в ubuntu расположены в /usr/local/bin/{mailcatcher, catchmail}.

#
# mailcatcher.service
# /etc/systemd/system/mailcatcher.service
#
[Unit]
Description=Mailcatcher
After=netwok.target
#After=systemd-user-sessions.service

[Service]
Type=simple
ExecStart=/usr/local/bin/mailcatcher --ip 0.0.0.0 --foreground
Restart=always
#User=ubuntu	
#Group=ubuntu
#UMask=0022

# Before Ubuntu 22.04
#StandardOutput=syslog
#StandardError=syslog

# upd. 2024
# One of: inherit, null, tty, journal, kmsg, journal+console, 
# kmsg+console, # file:path, append:path, truncate:path, 
# socket or fd:name.
StandardOutput=journal
# Options same as StandardOutput=
StandardError=journal

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable mailcatcher
sudo systemctl start mailcatcher

Удалить сервис

sudo systemctl stop mailcatcher
sudo systemctl disable mailcatcher

# Проверить
sudo systemctl status mailcather

И затем удалить файлы

rm /etc/systemd/system/mailcatcher.service
rm /usr/lib/systemd/system/mailcatcher
sudo systemctl daemon-reload

mailcatcher php

Пример настройки php.ini

; php.ini
; sednmail_path = /usr/local/bin/catchmail --ip 127.0.0.1 -f from@dev.mail
sednmail_path = /usr/local/bin/catchmail -f from@dev.mail

если при этом необходимо выключить postfix, но не удалять

sudo update-rc.d postfix disable