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.