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

Тема в разделе "Администрирование серверов", создана пользователем Absolute, 12 окт 2015.

Модераторы: mefish, stooper
  1. Absolute

    Absolute Крокодил ;)

    Регистр.:
    9 авг 2009
    Сообщения:
    340
    Симпатии:
    162
    Этот код чудесно работал на старом хостинге. Все отправлял. Переехал на новый сервер - не работает. Экспериментальным путем выяснил, что проблема в заголовке 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";
    }
    
    ?>
     
    Последнее редактирование: 12 окт 2015
  2. nejtr0n

    nejtr0n Постоялец

    Регистр.:
    24 янв 2014
    Сообщения:
    98
    Симпатии:
    49
    Дайте настройки php.ini sendmail_from и sendmail_path.
     
    Absolute нравится это.
  3. ykpon

    ykpon

    Регистр.:
    8 дек 2012
    Сообщения:
    248
    Симпатии:
    143
    Без strip_tags попробуй.
     
  4. Absolute

    Absolute Крокодил ;)

    Регистр.:
    9 авг 2009
    Сообщения:
    340
    Симпатии:
    162
    Эти строки закомментированы:
    Код:
    ;sendmail_from = me@example.com
    ;sendmail_path =
    Что прописывать в них?
    Пробовал - причина не в этом.
     
  5. Aglok

    Aglok ∞³

    Регистр.:
    9 янв 2012
    Сообщения:
    160
    Симпатии:
    46
    А в лог файлах смотрел? При отправке через функцию mail(), записывается в mail.log.
     
    Absolute нравится это.
  6. denverkurt

    denverkurt Denve®

    Регистр.:
    23 дек 2013
    Сообщения:
    610
    Симпатии:
    348
    а еще бывает что почтовый сервер не принимает письма если имя отправителя не соответствует домену отправителю. были проблемы с майлом или яндексом, не помню.
    в любом случае искать проблему нужно последовательно, от логов сервера и т.д.
     
    Absolute нравится это.
  7. nejtr0n

    nejtr0n Постоялец

    Регистр.:
    24 янв 2014
    Сообщения:
    98
    Симпатии:
    49
    Прописывать ничего не нужно. Иногда встречается передача адреса отправителя напрямую в качестве параметра для sendmail. (посмотрите эти настройки через phpinfo();)
    На хостингах чаще всего политики безопасности запрещают отправку писем с различных доменов (для борьбы со спамом). Но на некоторых есть возможность задать список разрешённых адресов/доменов для отправления (на nic.ru например). Поэтому внимательно изучите админ панель хостинга.
     
    Absolute нравится это.
  8. Absolute

    Absolute Крокодил ;)

    Регистр.:
    9 авг 2009
    Сообщения:
    340
    Симпатии:
    162
    Всем спасибо. Проблема решилась (вроде бы).

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

    Что именно из этого помогло - хз, но в /var/log/exim4/mainlog перестали записываться статусы Message is frozen, а сообщения стали доставляться.
     
    Последнее редактирование: 13 окт 2015
  9. denverkurt

    denverkurt Denve®

    Регистр.:
    23 дек 2013
    Сообщения:
    610
    Симпатии:
    348
    скорее всего помог п.2, поскольку многие почтовики проверяют, существует ли почтовый домен, от которого якобы приходит письмо
    также в ISP создаются DKIM записи и прочие формальные атрибуты хорошего домена