Brak polskich liter w wiadomości z formularza

0

mam taki formularz:

<?php
mb_language('uni');
date_default_timezone_set('Europe/Warsaw');
header("Content-Type: application/json;charset=UTF-8");

$config = [
    'messages' => [
        'invalidCfEmail'  => 'Nieprawidłowy adres e-mail',
        'invalidCfName'   => 'Nieprawidłowe imię i nazwisko',
        'invalidCfDepartureDate' => 'Nieprawidłowy termin wyjazdu',
        'invalidCfStartAddress'   => 'Nieprawidłowy adres początkowy',
        'invalidCfEndAddress'   => 'Nieprawidłowy adres końcowy',
        'invalidCfPeople' => 'Wymagana co najmniej jedna osoba',
        'invalidHoneypot' => 'Wiadomość została uznana jako SPAM',
        'mailSuccess'     => 'Wiadomość wysłana poprawnie',
        'mailFailed'      => 'Nie udało się wysłać wiadomości'
    ],
    'email' => [
        'emailTitle' => 'Wiadomość z formularza kontaktowego strony ',
        'fromEmail'  => 'l',
        'fromEmail2'  => 'l',
        'fromName'   => 'Automatyczne powiadomienia',
    ],
];

$error = false;
$message = null;

if (!isset($_POST['cf-name']) || !preg_match('/^[\p{L} .-]+$/u', $_POST['cf-name'])) {
    $error = true;
    $message = $config['messages']['invalidCfName'];
}

if (!isset($_POST['cf-email']) || !filter_var($_POST['cf-email'], FILTER_VALIDATE_EMAIL)) {
    $error = true;
    $message = $config['messages']['invalidCfEmail'];
}

if (!isset($_POST['cf-terminw']) || DateTime::createFromFormat('Y-m-d', $_POST['cf-terminw']) === false) {
    $error = true;
    $message = $config['messages']['invalidCfDepartureDate'];
}

if (!isset($_POST['cf-poczatek']) || !preg_match('/^[\p{L} .-]+$/u', $_POST['cf-poczatek'])) {
    $error = true;
    $message = $config['messages']['invalidCfStartAddress'];
}

if (!isset($_POST['cf-koniec']) || !preg_match('/^[\p{L} .-]+$/u', $_POST['cf-koniec'])) {
    $error = true;
    $message = $config['messages']['invalidCfEndAddress'];
}

if (!isset($_POST['cf-liczba']) || intval($_POST['cf-liczba']) < 1) {
    $error = true;
    $message = $config['messages']['invalidCfPeople'];
}

if (!isset($_POST['country']) || !empty($_POST['country'])) {
    $error = true;
    $message = $config['messages']['invalidHoneypot'];
}

if ($error) {
    http_response_code(500);
    echo json_encode([
        'message' => $message
    ]);
    return;
}

$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/plain; charset=UTF-8';
$headers[] = sprintf('From: %s <%s>', $config['email']['fromName'], $config['email']['fromEmail']);
$headers[] = sprintf('Reply-To: %s <%s>', $_POST['cf-name'], $_POST['cf-email']);

$mailTemplate = "Nowe zapytanie ze strony \r\n\r\n";
$mailTemplate.= "Imię i nazwisko: {$_POST['cf-name']}\r\n";
$mailTemplate.= "Adres e-mail: {$_POST['cf-email']}\r\n";
$mailTemplate.= "Termin wyjazdu: {$_POST['cf-terminw']}\r\n";
$mailTemplate.= "Adres początkowy: {$_POST['cf-poczatek']}\r\n";
$mailTemplate.= "Adres końcowy: {$_POST['cf-koniec']}\r\n";
$mailTemplate.= "Liczba osób: {$_POST['cf-liczba']}\r\n";
$mailTemplate.= "Dodatkowe informacje: {$_POST['cf-message']}\r\n";
$mailTemplate.= "Adres IP: {$_SERVER['REMOTE_ADDR']}\r\n";

$mailResult = mb_send_mail($config['email']['fromEmail'], 
    $config['email']['emailTitle'],
    htmlspecialchars($mailTemplate, ENT_QUOTES, 'UTF-8', false),
    implode("\r\n", $headers)
);

$mailResult2 = mb_send_mail($config['email']['fromEmail2'], 
    $config['email']['emailTitle'],
    htmlspecialchars($mailTemplate, ENT_QUOTES, 'UTF-8', false),
    implode("\r\n", $headers)
);

if ($mailResult === true) {
    echo json_encode([
        'message' => $config['messages']['mailSuccess']
    ]);
} else {
    http_response_code(500);
    echo json_encode([
        'message' => $config['messages']['mailFailed']
    ]);
}

Wszystko działa oprócz tego, że wiadomości przesłane w nagłówkach nie posiadają polskich liter tylko krzaki. Strona jak i formularz kodowana jest w utf-8. Może ktoś pomóc w rozwiązaniu problemu.

0

Spróbuj zamienić wszędzie gdzie masz

$headers[] = sprintf('From: %s <%s>', $config['email']['fromName'], $config['email']['fromEmail']);

na coś takiego

$name= "=?UTF-8?B?" . base64_encode($config['email']['fromName']) . "?=";
$email= "=?UTF-8?B?" . base64_encode($config['email']['fromEmail']) . "?=";
$headers[] = sprintf('From: %s <%s>', $name, $email);

1 użytkowników online, w tym zalogowanych: 0, gości: 1