Часто в организации имеется почтовый шлюз на базе одного этих почтовых серверов (MTA):
courier
exim
postfix
qmail
sendmail
Предположим что у нас имеется ещё один linux-сервер, с которого мы хотим отправлять почту. Конечно, можно использовать любую из вышеперечисленных программ, соответствующим образом настроенную для пересылки почты основному шлюзу. Но так лучше не делать, т.к. это большие, тяжелые и универсальные почтовые сервера, занимают много места в оперативной памяти, работают медлено и их труднее настроить. Для решения этой задачи существует класс программ, называемых relay-only MTA. Отличительные особенности этих MTA:
- Не умеют получать почту по SMTP. Исходящая почта формируется только локально через интерфейс командной строки утилиты sendmail.
- Доставка почты осуществляется заранее заданному удаленному SMTP серверу.
- Как правило, не умеют больше ничего. Вообще ничего из того, что вы можете вспомнить из функций больших MTA. За счет этого работают максимально быстро.
Представители этого класса программ:
esmtp
masqmail
nullmailer
nbsmtp
ssmtp
Я использую nullmailer, т.к.:
- Nullmailer очень прост в настройке. Фактически вся конфигурация, это несколько текстовых файлов в каждый из которых нужно поместить одну строчку.
- Nullmailer не настолько примитивен, чтобы после получения почты, сразу в этом же процессе программы пытаться доставить почту удаленному SMTP серверу. Вместо этого он помещает письмо в локальную очередь доставки, что даёт нам сразу два преимущества. Первое, доставка почты идет быстрее, т.к. управление возвращается вызвавшей отправку почты программе. Дальнейшая обработка почты идет из отдельного процесса-демона nullmailer. Второе, при проблемах в сети или на почтовом шлюзе почта никогда не будет потеряна и будет доставлена сразу после устанения неполадок.
Покажем, как работать с nullmailer, на примере операционной системы Ubuntu. Допустим, мы хотим отправлять почту с машины webserv.localnet через почтовый шлюз mail.localnet. Соответсвенно все действия выполняются на машине webserv.
Установка:
xeim@webserv:~$ sudo aptitude install nullmailer
Минимальная настройка:
В файл /etc/nullmailer/remotes помещаем адрес почтового шлюза — «mail.localnet smtp».
В файл /etc/nullmailer/adminaddr помещаем адрес системного администратора — «admin@mycompany.ru» для получения локальной почты, например для root@localhost или user@webserv.localnet.
Запуск:
xeim@webserv:~$ sudo /etc/init.d/nullmailer start
Пример отправки почты:
xeim@webserv:~$ sendmail -f somebody@mycompany.ru To: anybody@mail.ru Subject: test test
Журнал работы в /var/log/mail.log:
Sep 29 15:36:58 webserv nullmailer[14760]: Trigger pulled. Sep 29 15:36:58 webserv nullmailer[14760]: Rescanning queue. Sep 29 15:36:58 webserv nullmailer[14760]: Starting delivery, 1 message(s) in queue. Sep 29 15:36:58 webserv nullmailer[14760]: Starting delivery: protocol: smtp host: mail.localnet file: 1222663016.14762 Sep 29 15:37:04 webserv nullmailer[14760]: smtp: Succeeded: 250 ok 1222663024 qp 2803 Sep 29 15:37:04 webserv nullmailer[14760]: Sent file. Sep 29 15:37:04 webserv nullmailer[14760]: Delivery complete, 0 message(s) remain.
Если мы видим такие строки, значит сообщение передано почтовому шлюзу. Дальше это уже его забота — доставить сообщение получателю.
Таким образом, с использованием nullmailer возможно просто организовать отправку электронной почты через почтовый сервер организации.
5 комментариев:
в вики таки не написал .......
Спасибо за материал, очень интересно.
Настроил на использование smtp.mail.ru
но получаю ошибку
smtp: Failed: 501 sender address must match authenticated user
Sending failed: Permanent error in sending the message
если в файле письма лежащем в
/var/spool/nullmailer/queue
изменить первую строчку на свой email то работает, вопрос как сделать чтобы не надо было руками править, чтобы nullmailer считал отправителем не какого-нибудь www-data@localhostname
а username@mail.ru
?
debian 6.0.1
dpkg-reconfigure nullmailer
спрашивает
smtp.mail.ru --user=foo --pass=foopass
спасибо очень полезно )
Отправить комментарий