- Проверка наличия SendMail в системе
- Простая проверка работы SendMail
- Как установить/переустановить SendMail на сервере
- Настройка сервера для работы SendMail
- Перезагрузка сервиса SendMail
- Отправка тестового сообщения SendMail из консоли сервера
- Ручная проверка работы SendMail на сервере
- Настройка
php.ini
для отправки email с помощью SendMail - Проверка отправки письма с помощью PHP
- Итоги
Проверка наличия 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()
.
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)