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