Установка, настройка и проверка работы SendMail в Debian и Ubuntu
Установка, настройка и проверка работы SendMail в Unix операционных системах


Проверка наличия SendMail в системе.

Перед тем, как пытаться установить SendMail на сервер, имеет смысл проверить, был ли он установлен ранее. Это можно сделать командами:

whereis sendmail

и/или

which sendmail
  • Если выдаются пути, то значит  SendMail уже установлен на сервере и можно тестировать его работу.
  • Если выдаются ошибки, то либо его нет, либо он установлен криво и его можно просто переустановить.

Простая проверка работы SendMail.

Итак, самый простой способ проверить, как SendMail отправляет письма (если он установлен), это выполнить команду:

echo "Test message" | sendmail mymail@myposthosting.ru
  • mymail@myposthosting.ru нужно заменить на свой реальный e-mail.

Если при выполнении этой команды не выдаётся никаких ошибок, нужно посмотреть, не прилетело ли сообщение на почту. Если во "Входящих" письма нет, то посмотреть в папке "Спам". Современные почтовые сервисы всё странное кидают именно туда.

Как установить/переустановить SendMail на сервере.

Предварительно конечно имеет смысл обновить списки доступных пакетов из репозиториев командой:

apt update

Ну и при наличии обновлений, накатить их командой:

apt upgrade

Итак, если что-то пошло не так, можно смело устанавливать SendMail. Делается это командой:

apt install sendmail

Ну, и сразу, чтобы не возникало лишних вопросов (это скорее касается Debian), сразу накатить ещё и пакет sendmail-bin:

apt install sendmail-bin

Если же пакет sendmail установлен, но при его тестировании валятся ошибки, можно попробовать его удалить и поставить заново:

apt purge sendmail && apt update
apt install sendmail

Настройка сервера для работы SendMail.

Если по какой-то причине простейший тест работы SendMail, показанный выше, не отрабатывает, имеет смысл донастроить сервер. Как это сделать?

Проверим сначала настройку имени хоста сервера:

hostnamectl

Если в настройках нужно поменять делаем это командой:

hostnamectl set-hostname myhostname.ru
  • myhostname.ru - это ваш домен, по которому отзывается ваш хост.

Если нужно сменить имя хоста временно (до перезагрузки сервера), то выполняем эту команду:

hostname myhostname.ru

Теперь узнаем IP сервера командой:

curl ifconfig.io

В файл /etc/hosts добавляем запись, которая свяжет IP сервера с его доменом (последняя строчка):

127.0.0.1 localhost
5.255.255.242 mydomain.ru mydomain
  • Последняя запись mydomain - это имя домена без указания домена первого уровня (т.е. в этом примере без .ru).
  • IP должен быть тот, который определился командой curl ifconfig.io.

Далее можно внести исправления, дополнения в файл /etc/mail/sendmail.mc (если тест отправки письма до сих пор не прилетает).

Для этого ищем и исправляем сроку (а если её нет, то дописываем в конец):

MASQUERADE_AS(`mydomain.ru')dnl

Перезагрузка сервиса SendMail.

Для того, чтобы вносимые изменения вступали в силу, требуется перезагрузка сервиса SendMail. Делается это командой:

service sendmail restart

Отправка тестового сообщения SendMail из консоли сервера.

Мылим ещё раз и смотрим на результат:

(echo "Subject: Test msg"; echo "This is test message";) | sendmail -v -f "admin@mydomain.ru" mymail@myposthosting.ru
  • admin@mydomain.ru — это e-mail отправителя (т.е. "автора" письма).
  • mymail@myposthosting.ru — это e-mail получателя (т.е. то, куда должно прилететь сообщение).

Письмо должно прийти в указанный ящик (возможно, упадет в спам).

Ручная проверка работы SendMail на сервере.

Можно работоспособность smtp-сервера при помощи командной строки и telnet-протокола.

Команда:

# telnet localhost smtp

Ответ:

Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mydomain.ru ESMTP Sendmail 8.15.2/8.15.2/Debian-14~deb10u1; Fri, 31 Mar 2023 01:55:49 +0300; (No UCE/UBE) logging access from: localhost(OK)-localhost [127.0.0.1]

Следующая команда:

HELO localhost
  • Тут важно вводить именно HELO с одной L!

Ответ:

250 mydomain.ru Hello localhost [127.0.0.1], pleased to meet you

Команда (вводим Отправителя (от кого будет e-mail)):

MAIL FROM: admin@mydomain.ru

Ответ:

250 2.1.0 admin@mydomain.ru... Sender ok

Команда (вводим Получателя (e-mail на который придёт письмо)):

RCPT TO: mymail@myposthosting.ru

Ответ:

250 2.1.5 mymail@myposthosting.ru... Recipient ok

Команда (для начала ввода самого сообщения):

DATA

Ответ:

354 Enter mail, end with "." on a line by itself

Команда (вводим сообщение и заканчиваем его . в отдельной строке):

test message
. 

Ответ:

250 2.0.0 32UN9UO9014819 Message accepted for delivery

В результате выполнения этой последовательности команд на указанный e-mail (mymail@myposthosting.ru) должно прийти сообщение ("test message").

Выход из telnet командой:

quit

Ответ:

221 2.0.0 mydomain.ru closing connection
Connection closed by foreign host.

Настройка php.ini для отправки email с помощью SendMail.

Для того, чтобы можно было использовать SendMail для отправки писем с помощью php, нужно в файле php.ini присутствие строки:

sendmail_path = /usr/sbin/sendmail -t -i

Проверка отправки письма с помощью PHP.

Для проверки отправки письма SendMail в PHP используем функцию mail():

<?php
echo  mail ("mymail@myposthosting.ru","test message",
             "test message","From:admin@mydomain.ru");

?>

Итоги.

В результате мы настроили SMTP-сервер, который может отправлять почту. А также настроили PHP для того, чтобы с его помощью также можно было отправлять e-mail письма функцией mail().

Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню