Если у вас с сайта не доставляются письма из формы на сайте.
Замечено, что в последнее время почтовые сервисы mail, yandex, gmail ужесточили требования по получению писем.
Обычно в логах видны такие ошибки:
... 550 5.7.1 Email rejected per DMARC policy for ...
... 550 non-local sender verification failed
... 550 spam message rejected. Please visit http://help.mail.ru/...
Это происходит, потому что не указан обратный адрес для писем (либо указан, но не относящийся к серверу), для настроек php и в самом скрипте. В третьей ошибке может не нравится даже сам текст письма.
Поэтому при отправке писем через sendmail должно быть заполнено поле from (от кого) для скрипта и php.ini. Мы не стали устанавливать по умолчанию ничего в php.ini, чтобы уменьшить вероятность рассылки спама.
Поле from может помочь не только разобраться с отправкой, но и получить ответы от почтового сервера с ошибками. Так как вы создадите для обратных писем email. Без обратки, вы не будете видеть ошибочных возвратных писем. Они просто будут улетать в никуда.
- Первый вариант решения проблемы.
Надо войти в панель управления хостингом ISPManager
И перейти в раздел "Настройка PHP". Выберите там версию PHP которую вы используете, обычно на ней стоит галочка зеленая. И "Расширенные настройки"
В настройках укажите поле sendmail_from и укажите там нужный email (он должен быть в вашем домене, к примеру, admin@mydomen.ru, это будет лучший вариант. Этот ящик надо создать и подключить почтовый домен с spf, dkim и dmark).
Вставить строку изменив на ваш email
/usr/sbin/sendmail -t -i -f admin@mydomen.ru
Ещё лучше если будет заполнено поле from и для скрипта. Так как он будет указан в дополнительном заголовке самого письма. Как это сделать можно посмотреть в документации по php. Это должен быть ваш email на основе вашего домена.
<?php
$to = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
?>
- Второй способ решения, использовать просто SMTP протокол для отправки через любой почтовый сервис, любого вашего ящика, на любом почтовом сервисе.
Почти все CMS сейчас поддерживают отправку через SMTP. Если нет, то наверняка есть плагин отдельный.
Лучше использовать smtp отправку для почтового ящика созданного на хостинге под вашим доменом, с обратным адресом (поле from) вашего домена.
- Третий способ решения, отправлять сообщение на ящик, который вы создадите у нас на хостинге.