Не отправляются письма с заголовком From

Absolute

Крокодил ;)
Регистрация
9 Авг 2009
Сообщения
581
Реакции
456
Этот код чудесно работал на старом хостинге. Все отправлял. Переехал на новый сервер - не работает. Экспериментальным путем выяснил, что проблема в заголовке From. Если убираю "From: " . strip_tags($usermail) . "\r\n" из переменной $headers, то все отправляется - письма приходят, а в "от кого" подставляется мыло из $sendto. В чем может быть проблема, что письма не отправляются/доставляются с заголовком From?
Код:
<?php
$sendto   = "17878mail@mail.ru";
$usermail = $_POST['email'];
$usertel = $_POST['tel'];
$usertextn = $_POST['textn'];
$prim  = nl2br($_POST['prim']);
$content  = $_POST['msg'];
$content2  = str_replace("__", "'", $_POST['order']);
// Счетчик заказов
$count = file_get_contents('./count.txt');
file_put_contents('./count.txt', ++$count);
// Формирование заголовка письма
$subject  = "Получен заказ №". $count;
$headers  = "From: " . strip_tags($usermail) . "\r\n";
$headers .= "Reply-To: ". strip_tags($usermail) . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html;charset=utf-8 \r\n";
// Формирование тела письма
$msg  = "<html><body style='font-family:Arial,sans-serif;'>";
$msg .= "<h2 style='font-weight:bold;border-bottom:1px dotted #ccc;'>Заказ №" .$count."</h2>\r\n";
$msg .= "<p><strong>Имя отправителя:</strong> ".$usertextn."</p>\r\n";
$msg .= "<p><strong>E-mail:</strong> ".$usermail."</p>\r\n";
$msg .= "<p><strong>Телефон:</strong> ".$usertel."</p>\r\n";
$msg .= "<p><strong>Адрес:</strong> ".$content."</p>\r\n";
$msg .= "<p><h3>Заказ </h3> ".$content2."</p>\r\n";
$msg .= "<p><i><b>Дополнительная информация </b></i> ".$prim."</p>\r\n";
$msg .= "</body></html>";

// отправка сообщения
if(@mail($sendto, $subject, $msg, $headers)) {
        echo "true";
} else {
        echo "false";
}

?>
 
Последнее редактирование:
Дайте настройки php.ini sendmail_from и sendmail_path.
 
Без strip_tags попробуй.
 
А в лог файлах смотрел? При отправке через функцию mail(), записывается в mail.log.
 
а еще бывает что почтовый сервер не принимает письма если имя отправителя не соответствует домену отправителю. были проблемы с майлом или яндексом, не помню.
в любом случае искать проблему нужно последовательно, от логов сервера и т.д.
 
Что прописывать в них?
Прописывать ничего не нужно. Иногда встречается передача адреса отправителя напрямую в качестве параметра для sendmail. (посмотрите эти настройки через phpinfo();)
На хостингах чаще всего политики безопасности запрещают отправку писем с различных доменов (для борьбы со спамом). Но на некоторых есть возможность задать список разрешённых адресов/доменов для отправления (на nic.ru например). Поэтому внимательно изучите админ панель хостинга.
 
Всем спасибо. Проблема решилась (вроде бы).

Что сделал:
1. PHP-функцию @mail() заменил на mail()
2. В ISP-менеджере создал почтовый домен + ящик к нему.
3. Прописал ящик из п.2 в E-Mail администратора в WWW-домене (WWW -> WWW-домены)
4. Перезагрузил сервер.

Что именно из этого помогло - хз, но в /var/log/exim4/mainlog перестали записываться статусы Message is frozen, а сообщения стали доставляться.
 
Последнее редактирование:
скорее всего помог п.2, поскольку многие почтовики проверяют, существует ли почтовый домен, от которого якобы приходит письмо
также в ISP создаются DKIM записи и прочие формальные атрибуты хорошего домена
 
Назад
Сверху