Настраиваем SMTP сервер на сайте для отправки почты. Debian, Exim4, Nginx, php7.1.4.

Итак, начнем по порядку.
Я использовал скомпилированный php7.1.4, путь будет отличаться. Настройка производилась по гайду https://thedrot.ru/php7-3-18-mysql-phpmyadmin-nginx-orangepi/
Для начала надо проверить что присутствует на хостинге. Я выбрал путь через PHP.
Создаем файл в корне сайта.
Test.php с содержимым.

?php
    phpinfo();
?

Заходим по урлу «domen.ku/Test.php»
Нам необходима найти строчки

mail.log                     no value
mail.add_x_header            On
mail.force_extra_parameters  no value

sendmail_from   no value
sendmail_path   /usr/sbin/sendmail -t -i ( не обязательно менять если команда sendmail работает)

SMTP        localhost
smtp_port   25

Настройки можно найти в /usr/local/php-fpm/lib/php.ini(Если настройка была из прежней статьи)

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

Проверяем стоит ли служба sendmail
пишем команду >

sendmail 

Если службы нету, то ставить ее не нужно.

смотрим что выдает.
Далее я создал файлик проверки функции.
test1.php

?php
if ( function_exists( 'mail' ) )
{
    echo 'mail() is available';
}
else
{
    echo 'mail() has been disabled';
}
?

У меня было все ок.
Был создан еще один файл проверки отправки почты.

?php
    /*
     * Enable error reporting
     */
    ini_set( 'display_errors', 1 );
    error_reporting( E_ALL );
 
    /*
     * Setup email addresses and change it to your own
     */
    $from = "[email protected]";
    $to = "[email protected]";
    $subject = "Simple test for mail function";
    $message = "This is a test to check if php mail function sends out the email";
    $headers = "From:" . $from;
 
    /*
     * Test php mail function to see if it returns "true" or "false"
     * Remember that if mail returns true does not guarantee
     * that you will also receive the email
     */
    if(mail($to,$subject,$message, $headers))
    {
        echo "Test email send.";
    } 
    else 
    {
        echo "Failed to send.";
    }
?

На нем был затык, письмо фейлилось.
вводим команду >
У меня был установлен sendmail , вводим команду.

 stat /usr/sbin/sendmail 

Видно что письмо создается и сохраняется по адресу
/etc/alternative/sendmail
Там находился лог отправки писем.

Сендмайл по факту не нужен, его удаляем.

 apt-get remove sendmail 

Устанавливаем exim4

apt-get install exim4 

Для запуска службы будем использовать команду

 /etc/init.d/exim4 start 

Произведем настройку exim командой

 dpkg-reconfigure exim4-config 

1 отправка почты через smarthost; локальная почта отсутствует

2 Почтовое имя системы: mydomain.ru

3 IP-адреса, с которых следует ожидать входящие соединения SMTP: 127.0.0.1 ; ::1

4 Другие места назначения, для которых должна приниматься почта: пусто

5 Видимое доменное имя локальных пользователей: mydomain.ru

6 IP-адрес или имя хоста являющегося исходящим smarthost: пусто

7 Сокращать количество DNS-запросов до минимума (дозвон по требованию)?: нет

8 Разделить конфигурацию на маленькие файлы?: нет

9 Получатель почты, адресованной root и postmaster: пусто

Далее необходимо привязать адрес электронной почты к пользователю, от имени которого будет отправляться корреспонденция. Это делается в файле /etc/email-addresses:

nano /etc/email-addresses

Прописываем, например:

user: [email protected]
otheruser: [email protected]
www-data: [email protected]
root: [email protected] 

Необходимо создать файл /etc/exim4/hubbed_hosts в нем будут прописываться MX записи доменов, пример:

yandex.ru: mx.yandex.ru
google.com: ASPMX.L.GOOGLE.COM:ALT1.ASPMX.L.GOOGLE.COM 

Также нужно проверить /etc/exim/exim4.conf.template

dnslookup:
   debug_print = "R: dnslookup for $local_part@$domain"
   driver = dnslookup
   domains = +relay_to_domains
   transport = remote_smtp
   same_domain_copy_routing = yes
   # ignore private rfc1918 and APIPA addresses
   ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : 192.168.0.0/16 :
                         172.16.0.0/12 : 10.0.0.0/8 : 169.254.0.0/16 :
             255.255.255.255
   no_more

Перезагружаем службу.

/etc/init.d/exim4 restart 

Проверить отправку почты через exim4 в консоли можно с помощью команды:

echo "test mail" | mail -s "Test Mail" [email protected]

Если письмо не пришло смотрим лог /var/log/exim4/mainlog

Замороженные письма в очереди можно удалить командой.

 exim -bpu | grep frozen | awk {'print $3'} | xargs exim -Mrm 

Список очереди команда.

exim -bp

You may also like...