Добрый день. вэб сервер, система FreeBSD. Код (Text): # php -v PHP 5.6.39 (cli) (built: Feb 9 2019 10:44:09) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies Почтовый сервер exim4. Exim настроен чисто на отправку писем. В exim стоит параметр primary_hostname = мой_домен.com Помогите пожалуйста разобраться в возникшей ситуации, если я отправляю письмо с консоли сервера, то оно приходит правильно Код (Text): # echo "Тестовое письмо, для проверки почты. Tets mail from worked!" | sendmail -fwww@мой_сайт.net поя почта@gmail.com Но если я отправляю через php test_mail.php Код (Text): <?php $mail_to = "мой_ящик@gmail.com"; $mail_subject = "Subject"; $mail_message = "Message"; $mail_headers = 'From: www@мой_сайт.net' . "\r\n"; mail($mail_to, $mail_subject, $mail_message, $mail_headers, "-fwww@мой_сайт.net"); ?> То письмо приходит, но с параметром отправлено через: мой_домен.com Код (Text): отправитель www@мой_сайт.net отправлено через: мой_домен.com Как это исправить? Пробовал указывать в виртуал хосте параметр. php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f www@мой_сайт.net" Код (Text): <VirtualHost 11111:443> ServerName мой_сайт.net DocumentRoot /usr/local/www/мой_сайт.net/ ServerAlias мой_сайт.net ServerAlias www.мой_сайт.net ErrorLog /var/log/httpd/_error.log LogFormat "%h %l %u %t \"%r\" %>s %b" common CustomLog /var/log/httpd/_access.log common SSLEngine on SSLCertificateFile /usr/local/etc/apache24/ssl/мой_сайт.net.crt SSLCertificateKeyFile /usr/local/etc/apache24/ssl/мой_сайт.net.key SSLCertificateChainFile /usr/local/etc/apache24/ssl/мой_сайт.net_root.crt php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f www@мой_сайт.net" ... ... ... </VirtualHost> Не помогает. Дело в заголовках которые прикладывает php, но как их убрать/исправить не пойму.
Фиг знает, что означает «отправлено через: мой_домен.com» и чем это отличается от первого варианта. Если это из HELO/EHLO, то все норм. Изучайте заголовки писем в ящике получателя. Вы это уже сделали в пятом параметре mail(). --- Добавлено --- P.S. Еще проверьте, что sendmail и /usr/sbin/sendmail – это обращение к одному и тому же софту.
проблему решил так. В exim указал untrusted_set_sender = * После в виртуал хосте указал php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f www@мой_сайт.net" И почта пошла как нужно.
Всем доброго дня! Прошу помощи!!! На не работают некоторые формы обратной связи: где нужно в форме ввести только имя и телефон - отправляется, где нужно нужно ввести телефон и выбрать товар - пишет ошибка. <?php header("Content-Type: text/html; charset=utf-8"); if(isset($_POST['name'])) { $email = "sales@magictracks63.ru"; #Email, на него придут письма $title = "Заказ с сайта ".$_SERVER['HTTP_REFERER']; #Заголовок письма #Все метки $utm = $referer = ''; if(trim($_SERVER['HTTP_REFERER']) != false) { $referer = $_SERVER['HTTP_REFERER']; list($n1, $n2) = explode("?", $referer); $n2 = explode("&", $n2); foreach($n2 as $key => $value) { list($u1, $u2) = explode("=", $value); $utm .= $u1.": ".$u2."\n"; } } $text = " Информация о покупателе: Имя: ".$_POST['name']." Телефон: ".$_POST['phone']." Время заказа: ".date("Y-m-d H:i:s")."\n".$utm; # Тут в письмо добавляются все поля из полученной формы, для универсальности, на случай, если там было что-то кроме имени и телефона $fields = ""; $text .= "\n\n============\nПолный список полей:\n"; foreach ($_POST as $k => $v) { $text .= "$k: $v\n"; } if(mail($email, $title, $text)) { header('Location: good.html'); } else { echo "Ошибка. Возможно функция mail отключена. Обратитесь к хостинг-провайдеру или возьмите консультацию на сайте, где купили шаблон"; } } else { echo "Ошибка"; } ?>