У меня следующий php-скрипт отправляет электронное письмо на основе возвращаемых параметров:
<? header('Content-Type: application/json; charset=utf-8'); $headers = "From: Source\r\n"; $headers .= "Content-type: text/html;charset=utf-8\r\n"; $to = $data["t_email"]; $subject = "Hello"; $message = (gather_post("locale") == "fr_CA")?"message français ééààèè": "english message"; mail($to, $subject, $message, $headers); ?>
Я взял детали, которые не актуальны. Сообщение будет отправлено отлично, но акценты отображаются неправильно. Все было установлено как кодировка utf-8, я не понимаю, почему это не работает.
Возможно, вам придется кодировать html с помощью utf8_encode (). Например:
$message = utf8_encode("message français ééààèè");
Я должен был сделать это для динамического импорта французских документов Word, и он отлично работает. Дайте мне знать, если это решит вашу проблему.
<?php $to = 'example@gmail.com'; $subject = 'subject'; $message = utf8_encode('message français ééààèè'); $headers = 'From: webmaster@example.com' . "\r\n" . 'Reply-To: webmaster@example.com' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); if(mail($to, $subject, $message, $headers)){ echo 'success!'; } ?>
Чтобы устранить проблему, вам необходимо добавить следующую строку в функцию отправки электронной почты:
$headers .= 'Content-type: text/plain; charset=UTF-8' . "\r\n";
Вот интеграция этой линии с функцией отправки по электронной почте:
function send_email($to,$subject,$message,$fromemail) { $headers = "From: $fromemail" . "\r\n"; $headers .= "Return-Path: $fromemail" . "\r\n"; $headers .= "Errors-To: $fromemail" . "\r\n"; $headers .= 'Content-type: text/plain; charset=UTF-8' . "\r\n"; @mail($to,$subject,$message,$fromemail); }
Смотрите хорошие комментарии, которые я нашел. Только это работает для меня. https://ncona.com/2011/06/using-utf-8-characters-on-an-e-mail-subject/
Детали:
to = 'example@example.com'; $subject = 'Subject with non ASCII ó¿¡á'; $message = 'Message with non ASCII ó¿¡á'; $headers = 'From: example@example.com'."\r\n" .'Content-Type: text/plain; charset=utf-8'."\r\n"; mail($to, '=?utf-8?B?'.base64_encode($subject).'?=', $message, $headers);