За последние 24 часа нас посетили 17568 программистов и 1722 робота. Сейчас ищут 1673 программиста ...

отправка писем через php

Тема в разделе "Работа с почтой", создана пользователем bagas, 22 апр 2019.

  1. bagas

    bagas Новичок

    С нами с:
    22 апр 2019
    Сообщения:
    2
    Симпатии:
    0
    Добрый день.
    вэб сервер, система FreeBSD.
    Код (Text):
    1. # php -v
    2. PHP 5.6.39 (cli) (built: Feb  9 2019 10:44:09)
    3. Copyright (c) 1997-2016 The PHP Group
    4. Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    5.     with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
    Почтовый сервер exim4.
    Exim настроен чисто на отправку писем.
    В exim стоит параметр primary_hostname = мой_домен.com
    Помогите пожалуйста разобраться в возникшей ситуации, если я отправляю письмо с консоли сервера, то оно приходит правильно
    Код (Text):
    1. # echo "Тестовое письмо, для проверки почты. Tets mail from worked!" | sendmail -fwww@мой_сайт.net поя почта@gmail.com
    Но если я отправляю через php
    test_mail.php
    Код (Text):
    1. <?php
    2.     $mail_to = "мой_ящик@gmail.com";
    3.     $mail_subject = "Subject";
    4.     $mail_message = "Message";
    5.     $mail_headers = 'From: www@мой_сайт.net' . "\r\n";
    6.     mail($mail_to, $mail_subject, $mail_message, $mail_headers, "-fwww@мой_сайт.net");
    7. ?>
    То письмо приходит, но с параметром отправлено через: мой_домен.com
    Код (Text):
    1. отправитель www@мой_сайт.net
    2. отправлено через:    мой_домен.com
    Как это исправить?
    Пробовал указывать в виртуал хосте параметр. php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f www@мой_сайт.net"
    Код (Text):
    1. <VirtualHost 11111:443>
    2. ServerName мой_сайт.net
    3. DocumentRoot /usr/local/www/мой_сайт.net/
    4. ServerAlias мой_сайт.net
    5. ServerAlias www.мой_сайт.net
    6. ErrorLog /var/log/httpd/_error.log
    7. LogFormat "%h %l %u %t \"%r\" %>s %b" common
    8. CustomLog /var/log/httpd/_access.log common
    9. SSLEngine on
    10. SSLCertificateFile /usr/local/etc/apache24/ssl/мой_сайт.net.crt
    11. SSLCertificateKeyFile /usr/local/etc/apache24/ssl/мой_сайт.net.key
    12. SSLCertificateChainFile /usr/local/etc/apache24/ssl/мой_сайт.net_root.crt
    13. php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f www@мой_сайт.net"
    14. ...
    15. ...
    16. ...
    17. </VirtualHost>
    Не помогает.
    Дело в заголовках которые прикладывает php, но как их убрать/исправить не пойму.
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.839
    Симпатии:
    651
    Фиг знает, что означает «отправлено через: мой_домен.com» и чем это отличается от первого варианта. Если это из HELO/EHLO, то все норм. Изучайте заголовки писем в ящике получателя.

    Вы это уже сделали в пятом параметре mail().
    --- Добавлено ---
    P.S. Еще проверьте, что sendmail и /usr/sbin/sendmail – это обращение к одному и тому же софту.
     
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.858
    Симпатии:
    748
    Адрес:
    Татарстан
    + еще какой нить популярный майлер используете, тип Swift или PHPMailer
     
  4. bagas

    bagas Новичок

    С нами с:
    22 апр 2019
    Сообщения:
    2
    Симпатии:
    0
    проблему решил так.
    В exim указал untrusted_set_sender = *
    После в виртуал хосте указал php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f www@мой_сайт.net"
    И почта пошла как нужно.
     
  5. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
  6. Сергей Колотилин

    С нами с:
    12 ноя 2019
    Сообщения:
    1
    Симпатии:
    0
    Всем доброго дня! Прошу помощи!!! На не работают некоторые формы обратной связи: где нужно в форме ввести только имя и телефон - отправляется, где нужно нужно ввести телефон и выбрать товар - пишет ошибка.
    <?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 "Ошибка";
    }
    ?>