Руководство по установке и настройке одного из старейших MTA (Mail Transfer Agent ), программа для отправки электронной почты - sendmail , который доступен для установки на любой операционной системе. Во многих ОСях sendmail установлен по умолчанию и менять этот стандартный MTA на другой особой необходимости нет. При этом, тот же PHP по дефолту настроен на работу именно с этим MTA. Если настройка sendmail затягивается - ставьте postfix (), не стоит терять много времени.

Подготовка

Проверьте установлен ли у вас sendmail , а не exim4 или другой MTA:

Ls -la `which sendmail` # lrwxrwxrwx 1 root root 26 2011-01-17 19:58 /usr/sbin/sendmail -> /etc/alternatives/sendmail

Установка

sudo apt-get install sendmail sasl2-bin

Настройка /etc/hosts

127.0.0.1 localhost localhost.localdomain e5530
Примечание

Необходимо указать ваш основной хост (имя компьютера, у меня это e5530) и localhost.localdomain иначе вы получите ошибку: My unqualified host name (myhostname) unknown; sleeping for retry» и «unable to qualify my own domain name (e5530) – using short name , sendmail долго стартует и медленно отправляет почту. Возможно хост localhost.localdomain можно пропустить, не уверен.

После этого нужно указать имена локальных хостов, от которых sendmail будет принимать запросы на отправку email сообщений, в файле /etc/mail/local-host-names:

AuthInfo:smtp.gmail.com "U:[email protected]" "I:[email protected]" "P:YourPass" "M:PLAIN" AuthInfo:smtp.gmail.com:465 "U:[email protected]" "I:[email protected]" "P:YourPass" "M:PLAIN"

Примечание

Вместо порта 465 можете попытаться стучать на 587 (если есть проблемы с авторизацией):

AuthInfo:smtp.gmail.com:587 "U:[email protected]" "I:[email protected]" "P:YourPass" "M:PLAIN"

Chmod 600 /etc/mail/auth/*

Конфиг sendmail.mc

Файл конфига /etc/mail/sendmail.mc . Сравните ваш конфиг. Должно быть как-то так.. Порядок инструкций важен!

Dnl # include(`/etc/mail/m4/dialup.m4")dnl include(`/etc/mail/m4/provider.m4")dnl include(`/etc/mail/tls/starttls.m4")dnl include(`/etc/mail/sasl/sasl.m4")dnl FEATURE(`authinfo",`hash /etc/mail/auth/client-info")dnl define(`SMART_HOST",`smtp.gmail.com")dnl define(`RELAY_MAILER_ARGS", `TCP $h 587")dnl define(`ESMTP_MAILER_ARGS", `TCP $h 587")dnl dnl # dnl # Default Mailer setup MAILER_DEFINITIONS MAILER(`local")dnl MAILER(`smtp")dnl define(`confAUTH_MECHANISMS", `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN")dnl # dnl define(`confDOMAIN_NAME", `e5530")dnl

Применяем конфиг sendmail

cd /etc/mail sudo su # просто sudo не сработает! m4 sendmail.mc > sendmail.cf makemap -r hash authinfo.db < auth/client-info make /etc/init.d/sendmail restart # Перезагрузка конфига

Проблемы и решения

Если все настроено правильно но сообщения попадают в «отложенную очередь» и не релеятся на другой SMTP:

  1. Проверьте ваш IP"шник в блек-листах. Проверить бан IP можно тут smart-ip.net , мой IP попал в базу spamhaus "а.
  2. Проверьте не блокирует ли провайдер исходящие пакеты на 25 порт.
Проблемы с Интертелекомом!

У меня так и не получилось настроить релей сообщений на GMail через sendmail на Интертелекомовском подключении - sendmail упорно стучался на 25 порт, который закрыт провайдером. Пришлось настраивать postfix .

Настройка PHP (если необходимо)

Укажите параметры запуска sendmail в конфиге /etc/php5/apache2/php.ini (/etc/php5/cli/php.ini):

## Настройка sendmail для PHP: sendmail_path = /usr/sbin/sendmail -t ;sendmail_path = "/usr/sbin/sendmail -t -f [email protected] -i"

Проверим настройки

echo "Текст сообщения" | mail -s "Subjet" [email protected] sendmail -t [email protected] -f [email protected] -v -i < ~/mail-body.txt

Для проверки postfix попробуйте отправить несколько сообщений из консоли. Как это делать я расписал в этой статье: « ».

Управление sendmail

Посмотреть всю очередь сообщений:

Sudo mailq

Посмотреть очередь сообщений по определенному адресу:

Sudo mailq | grep "[email protected]" | wc -l

Очистить всю очередь сообщений sendmail:

Sudo rm -r /var/spool/mqueue-client/*

Очистить очередь сообщений sendmail по адресату:

Cd /var/spool/mqueue ls | xargs -ti sh -c "grep "[email protected]" "{}" > /dev/null && rm -f "{}""

#sendmail, #LAMP, #MTA

P.S. Если вы хотите изучить консоль Linux на достаточно хорошем уровне - рекомендую к прочтению свежую книгу Дениса Колисниченко «Командная строка Linux и автоматизация рутинных задач ».

Для начала небольшое отступление

SMTP - Simple Mail Transfer Protocol - сервис в сетях TCP/IP для передачи сообщений (т.е. почты). Обычно для SMTP используется 25-ый порт (см. файл /etc/services)

POP - Post Office Protocol - используется для получения почты с сервера. Порт по умолчанию - 110 (для протокола POP3)

Сейчас я попробую объяснить, как настроить небольшой почтовый сервер, использующий POP3 и SMTP

Для начала установим необходимый софт. Нам понадобятся sendmail и imap. Если вы используете RH-совместимую версию Linux, вам потребуется установить соответствующие пакеты.
Я использую
sendmail-8.11.0
imap-4.7c2

Прежде, чем приступить к настройке sendmail, вам необходимо правильно настроить DNS , иначе эта программа буде работать некорректно (хотя можно настроить sendmail для работы без использования dns).

Произведем базовую настройку sendmail. Для этого нужно запустить утилиту
netconf . Она работает как из-под Х, так и из-под консоли.
Утилита netconf есть в RH, Mandrake - насчет других версий я точно не знаю. (ее нет в KSI Linux). Естественно, вы должны быть зарегистрированы в системе под root"ом

Выберите в меню Mail delivery system , затем Basic sendmail configuration
В поле Present your system as просто введите свое доменное имя
Затем отметьте флажок Accept email for ...
Протокол отправки сообщений установите в smtp (Mail gateway protocol )

Этой информации уже вполне достаточно, чтобы ваш sendmail функционировал.
Вы можете установить дополнительные опции программы sendmail с помощью
netconf. Если у вас нет программы sendmail, вы получите незабываемое
удовольствие от ручного редактирования файла /etc/sendmail.cf - в нем
хранятся настройки) :)

Теперь сделаем так, чтобы sendmail принимал почту только с разрешенных
адресов. Для этого даже не нужно настраивать сам sendmail - нужно только
подправить файлы /etc/hosts.allow и /etc/hosts.deny
В первом из них содержится список хостов, которым разрешен доступ к этой
машине, а во втором - запрещен. Обратите внимание: несмотря на название
(разрешен|запрещен), ограничения, которые устанавливаются первым файлом
намного строже.

Пример. Для запрещения доступа всем хостам, кроме компьютеров вашей
сети в файл /etc/hosts.allow добавьте строку
"192.168.1.
Здесь имеется в виду, что сеть имеет адрес 192.168.1.0 и маску 255.255.255.0
Более подробно о формате файлов hosts.allow и hosts.deny вы можете прочитать,
введя команду man /etc/hosts.allow

Для того, чтобы принимать почту только со "своих" доменов, нужно добавить в
mc-файл (обычно /etc/mail/sendmail.mc) следующие строки (используйте
табуляцию, а не пробелы)
LOCAL_CONFIG
FR-o /etc/sendmail.cR

LOCAL_RULESETS
Scheck_rcpt
# anything terminating locally is ok
R< $+ @ $=w > $@ OK
R< $+ @ $=R > $@ OK

# anything originating locally is ok
R$* $: $(dequote "" $&{client_name} $)
R$=w $@ OK
R$=R $@ OK
R$@ $@ OK

# anything else is bogus
R$* $#error $: "550 Relaying Denied"

Теперь создайте файл /etc/sendmail.cR и введите в него имена "своих" доменов -
по одному в каждой строчке.
Только на эти домены почтовик сможет получать почту - все остальные получат
сообщение 550 Relaying Denied

Теперь настала очередь POP3. После установки пакета imap у вас практически
все настроено, т.е. я хочу сказать, что уже можно проверять конфигурацию.

Для начала перезапустите демон inetd
После его перезапуска сервисы sendmail и popd будут активированы (точнее
один sendmail, а popd вызывается по мере необходимости)

Попробуйте сделать следующее:
введите telnet <имя_только_созданного_почтовика> 25
Вы должны увидеть примерно следующее:
Trying 192.168.1.1 ...
Connected to 192.168.1.1
Escape character is "^]"
220 de.dhsilabs.com ESMTP Sendmail 8.11.0/8.8.7 Sun, 17 Jun 2001 10:54:22 +300

Это означает, что sendmail работает, осталось проверить насколько правильно:)

Вводим
mail from: [email protected]
220 2.1.0 [email protected] .... Sender Ok
rcpt to: [email protected]
220 2.1.5 [email protected] .... Recipient Ok
Теперь вводим data, потом текст сообщения, для окончания ввода ставим точку
в пустой строке

Sendmail сообщит, что сообщение отправлено (точнее помещено в
очередь на отправление)

[email protected] -имя пользователя, которому я отправляю почту.
den.dhsilabs.com - имя моего почтовика
Обратите внимание, что узла my.host.com и в природе нет, а Sender Ok.
Вот поэтому, в настройках sendmail лучше включить опцию Wait for DNS

Теперь нужно запустить какой-нибудь почтовый клиент например kmail
и забрать почту.
Настройки сети в kmail
Сеть -> Отправка почты установите SMTP, 25-ый порт, имя сервера -
имя вашего почтовика,
у меня - den.dhsilabs.com

Затем добавьте аккуант для POP3
Логи - den
Пароль - пароль который используется для входа в систему
Сервер - den.dhsilabs.com
Порт - 110

Вы должны получить то, сообщение, которое ввели после data.

Она появилась ещё в 1983 году, но активно используется и по сей день. Среди ключевых особенностей - поддержка многими платформами, которые существуют сегодня, а также бесплатность. Приложение поставляется вместе с открытым исходным кодом. Это значит, что каждый желающий может добавить в него свою функциональность, или же изменить по желанию. В операционной системе Ubuntu, Sendmail, настройка которой выполняется благодаря командной строке Linux, прижилась благодаря хорошей поддержке и богатым возможностям.

Процессор сообщение — Sendmail — получил широкое распространение в бизнес сфере.

На сегодня достаточно распространён «процессор сообщений» Сендмейл Sentrion, который был создан с учётом нужд крупных компаний. Его отличительные черты - высокая производительность и хорошая интегрируемость со всеми бизнес-процессами. Sentrion предлагает наряду с новыми технологиями использовать и устаревшие приложения, которые хорошо прижились. Также приложение достаточно дружелюбно, чтобы подходить домашним пользователям .

Установка программы

Устанавливать Сендмейл нужно на базе локального сервера или web-сервера. Во втором случае почтовый агент будет более функционален. Чтобы получить все компоненты веб-сервера, вам потребуется стек компонентов LAMP . Его можно найти в репозитории.

ВАЖНО. Перед установкой нового ПО не забудьте обновить списки пакетов в локальном репозитории с помощью команды

«$ sudo apt-get update»

Инсталляция Сендмейл начинается с помощью команды «sudo apt install sendmail», которая выполнит загрузку пакетов почтового агента.

«mcedit /etc/hosts»
«sudo sendmailconfig»

После этого требуется перезапустить службы самой программы, а также web-сервера Apache:

«sudo /etc/init.d/sendmail restart»
«sudo /etc/init.d/apache2 restart»

Если необходимо, можно установить утилиты для работы с почтой:

«sudo install mailutils»

Я не администратор, поэтому относитесь к этой заметке с осторожностью.
Рассматривается такя ситуация: надо заставить sendmail сервера отправлять почту, но ничего в ответ не принимать. Строго для оповещений с сайтов. У меня вдс-ка с предустановленным exim4 на который, насколько я понимаю, "ссылается" sendmail. Т.е. фактически работает exim4.

Сначала настраиваем хост (my-host-name это имя нашего хоста с которого все будет ездить) sudo mcedit /etc/hosts В файле должны быть строки вида 127.0.0.1 localhost 111.111.111.111 hostname.my-hoster.net my-host-name Далее меняем имя хоста в файле sudo mcedit /etc/hostname Файл должен выглядеть вот так (полностью, т.е. только имя хоста и все) my-host-name Теперь перегружаем службу которая грубо говоря обновляет имя хоста глобально sudo /etc/init.d/hostname.sh stop sudo /etc/init.d/hostname.sh start # если такого скрипта нет, то пробуем иначе: sudo service hostname restart REM ещё такой вариант есть, для Debian 9 (stretch) hostnamectl set-hostname my-host-name Теперь выполняем команды hostname hostname -f Если все правильно сделано, то они обе должны вернуть значение my-host-name (т.е. имя вашего хоста)

Теперь надо настроить сам sendmail. В моем случае, нужно перенастроеить exim4. Делается это примерно так: sudo dpkg-reconfigure exim4-config После этого в мастере просто нужно выбирать значения (именно для exim4 )

  • internet site..
  • вводим название вашего хоста (my-host-name)
  • ip для smtp устанавливаем только 127.0.0.1 т.к. нам не нужны внешние подключения по smtp
  • другие допустимые назначения оставляем по умолчанию
  • домены для разрешенного релея - оставляем пустым
  • машины для релея - оставляем пустым
  • кол-во днс запросов на ваше усмотрение, я не ограничивал
  • метод доставки я оставил тот же который был, т.е. /var/mail
  • разделять не разделять файлы конфигурации - на ваше усмотрение, аргументы там описаны, я разделять не стал
Теперь, чтобы проверить ходит ли почта делаем так sendmail -i [email protected] Далее вводим тект тестового сообщения. И по готовности нажимаем Ctrl+d
Идем проверяем свою почту. Если письмо пришло - все ок и ура. Если нет - идем гуглить дальше:)

Дальше надо убедиться что на нашем сервере недоступен smtp, для этого нам надо сходить с локальной машины постучаться в 25 порт сервера и получить отлуп. Делается это например так: telnet my-host-name 25 Trying 111.111.111.111... telnet: Unable to connect to remote host: Connection refused Если все так, то все тип-топ. Порт закрыт.

Ещё маленькая фишка. Бывает так что по каким-то причинам, сервис рулящий веб-приложением надо перезапускать регулярно. В моем случае это node.js и делаю я это по крону раз в N времени. Так вот если перезапустить процесс кроном, то sendmail перестает работать, потому как приложение не знает где он, в path пути до него просто нет и соот-но он просто не находится. Точно так же можно передавать любые другие настройки переменных окружения. Как это делать смотрим ниже.

Сначала посмотрим где sendmail which sendmail /usr/local/bin/sendmail Ок, видим путь. Если вдруг не видим то идем смотреть тоже самое но под sudo. Теперь идем в кронтаб и добавляем переменные окружения там. crontab -e Откроется редактирование заданий для текущего пользователя. То есть все задания будут выполнены с правами текущего пользователя и сервис запустится с правами этого пользователя, если он запускается конечно согласно вашему плану:)

# это переменная которая рассказывает где искать sendmail, # другие нужные пути можно писать через разделитель - двоеточие # там будут искаться необходимые нам утилиты PATH=/usr/local/bin # это пример переменной окружения которую будет использовать само приложение NODE_ENV=production # это собственно само задание, гуглим по формату crontab чтобы понять что к чему # в данном случае скрипт будет срабатывать в 30 минут каждого четного часа */30 */2 * * * /home/user/blog/scripts/restart.sh Ну вот примерно так. Прошу не воспринимать эту заметку как полное руководство к действию , вполне возможно что для вашего случая все будет значительно отличаться. Но возможно это как-то поможет или хотя бы наведет на мысли в нужном направлении:) Успехов!