При отправке письма с формы сайта, письмо приходит кракозябрами

Рейтинг: 0Ответов: 1Опубликовано: 12.03.2023

Всем доброго времени суток. Возникла такая проблема, письмо приходит крокозябрами. Причем неважно на каком языке оно написано.

<?php
if(isset($_POST['message'])){
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $to      = 'info@info.ru';
    $subject = 'Сообщение';
    $headers = 'From: '. $email . "\r\n" .
    'Reply-To: '. $email . "\r\n" .
    'X-Mailer: PHP/' . phpversion();
    $status = mail($to, $subject, $message, $headers);
    if($status == TRUE){    
        $res['sendstatus'] = 'done';
        //Edit your message here
        $res['message'] = 'Сообщение успешно отправлено';
    }
    else{
        $res['message'] = 'Возникла ошибка при отправке сообщения. Отправьте пожалуйста на info@info.ru';
    }
    echo json_encode($res);
}
?>

Подскажите, что надо поправить?

Ответы

▲ 0Принят

Укажите в заголовке кодировку:

$headers = 'From: '. $email . "\r\n" .
'Reply-To: '. $email . "\r\n" .
'Content-type: text/plain; charset=UTF-8' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

Ну и убедитесь перед этим что ваше письмо в нужной кодировке, либо принудительно его к ней приведите, например так:

$message = utf8_encode($_POST['message']);

Ну и я бы порекомендовал позаботиться о безопасности и не брать без фильтрации значения из глобальных переменных типа $_POST и проверять каждое поле.

UPDATE

Допилите форму:

<form method="post" accept-charset="UTF-8">

</form>

и попробуйте альтернативу:

$message = mb_convert_encoding($_POST['message'], 'utf-8');