Функция mail не отправляет письмо

244
22 января 2018, 08:57

Здравствуйте, есть функция:

function sendMailAboutOrder($email){
    $to = $email;
    $subject = "Тема сообщения";
    $message = ' 
    <body> 
        <p>Ваш логин: '.$to.'</p>
    </body>';
    $headers  = "Content-type: text/html; charset=utf-8 \r\n";
    mail($to, $subject, $message, $headers);
}

Вызывается она из экшена:

function saveorderAction()
    {
        $cart = isset($_SESSION['saleCart']) ? $_SESSION['saleCart'] : null;
        if (!$cart) {
            $resData['success'] = 0;
            $resData['message'] = 'Нет товаров для заказа';
            echo json_encode($resData);
            return;
        }
        $second_name = isset($_POST['second_name']) ? $_POST['second_name'] : '';
        $patronymic = isset($_POST['patronymic']) ? $_POST['patronymic'] : '';
        $index = isset($_POST['index']) ? $_POST['index'] : '';
        $name = isset($_POST['name']) ? $_POST['name'] : '';
        $phone = isset($_POST['phone']) ? $_POST['phone'] : '';
        $adress = isset($_POST['adress']) ? $_POST['adress'] : '';
        //создаем новый заказ и получаем его ID
        $orderId = makeNewOrder($name, $phone, $adress, $second_name, $patronymic, $index);
        if (!$orderId) {
            $resData['success'] = 0;
            $resData['message'] = 'Ошибка создания заказа';
            echo json_encode($resData);
            return;
        }
        // сохраняем товары для созданного заказа
        $res = setPurchaseForOrder($orderId, $cart);
        $email = isset($_SESSION['user']['email']) ? $_SESSION['user']['email'] : 0;
        sendMailAboutOrder($email);
        // если успешно, то формируем ответ, удаляем данные корзины
        if ($res) {
            $resData['success'] = 1;
            $resData['message'] = 'Заказ сохранен';
            unset($_SESSION['$saleCart']);
            unset($_SESSION['cart']);
        } else {
            $resData['success'] = 0;
            $resData['message'] = 'Ошибка внесения данных для заказа № ' . $orderId;
        }
        echo json_encode($resData);
    }

Тестируется на локальном сервере, функция mail работает(проверено на подобных отправках писем в других вызовах) вот она:

 <?php
    //папка в которую будем складывать почту
    define('DIR','c:/xampp/tmp/mails/');
    //получаем из потока тело письма
    $stream = '';
    $fp = fopen('php://stdin','r');
    while($t=fread($fp,2048))
    {
        if( $t===chr(0) )
            break;
        $stream .= $t;
    }
    fclose($fp);
    //Сохраняем в файл
    $fp = fopen(mkname(),'w');
    fwrite($fp, $stream);
    fclose($fp);
    //Функция присвоения имени файлу
    function mkname($i=0)
    {
        $fn = DIR.date('Y-m-d_H-i-s_').$i.'.eml';
        if ( file_exists($fn) )
            return mkname(++$i);
        else return $fn;
    }

Ошибок в логах нет. В PHPStorm при просмотре работы кода(Debug(зеленый жучок в панели инструментов)), он заходит в функцию sendMailAboutOrder, и на последней строке выходит из проверки, т.е. непосредственно когда вызывается: mail($to, $subject, $message, $headers);, дальше уже не проверяет. Подскажите почему письма не приходят? ошибок шторм не подчеркивает, все норм вроде...

Answer 1

Чтобы письма отправлялись из функции mail - необходимо настраивать почтовый сервер.

Чтобы его не настраивать и отправлять - можно использовать SMTP. Скачали библиотеку, зарегистрировали аккаунт на гугле или яндексе, или в другом месте - и установили настройки в библиотеку SMTP.

Класс для отправки почты SMTP с примером

READ ALSO
Что такое buffer_size?

Что такое buffer_size?

Когда я вызываю ob_get_status(), я получаю массив, в котором помимо прочего присутствуют строка buffer_size и chunk_size

226
Удалить файл из директории при нажатии на ссылку

Удалить файл из директории при нажатии на ссылку

Привет коллеги, подскажите чем можетеНе могу сообразить как мне удалить из директории файлы, через кнопку на веб странице

320
Замена switch-case

Замена switch-case

Имеется конструкция switch-case со множеством вариантовКаким образом создать компонентно-ориентированный и легко масштабируемый архитектурный...

173