- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
// Вот код скрипта для отправки емейла:
mb_internal_encoding ("utf-8");
$from = "Иван Иванов <<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f8918e9996b8918e9996d68c9788">[email protected]</a>>";
$to = $name."<$email>";
$subject = "Подтверждение подписки";
$message = "текст письма здесь";
$headers = "From: ".$from."\nReply-To: ".$from."\nContent-Type: text/plain; charset=utf-8\nContent-Transfer-Encoding: 8bit";
mail ($to, $subject, $message, $headers);
// И что характерно, само тело письма приходит в правильной кодировке. А вот поля отправителя,
// получателя и сабж письма - в краказябинах. Сами тексты этих полей 100% написаны в utf-8, код скрипта тоже в utf-8.
// Вот что что я вижу в почте:
// Subject: РРѕРґСРІРµСждение РїРѕРґРїРёСРєРё
// From: Рван Рванов <<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="345d42555a745d42555a1a405b44">[email protected]</a>>
// Reply-To: Рван Рванов <<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="432a35222d032a35222d6d372c33">[email protected]</a>>
// ...
// Проблема решилась следующим образом:
$subject = "=?utf-8?B?" . base64_encode("Подтверждение подписки") . "?=";
// И так для каждого поля.
Как думаете, для чего первая строка? Оказывается, если не приклеить строчку <?xml encoding="UTF-8"> к HTML-файлу, объект DOMDocument пидорасит кодировку и отказывается воспринимать символы за пределами Latin-1.
Функция «mail» клеить вложения не умеет.
Расширение «mailparse» умеет разбирать, но не клеить.
Клеить умеет... расширение «IMAP»:
https://www.php.net/manual/ru/function.imap-mail-compose.php
Логично, да?
Ух, бля, какая консистентность-то.
Иными словами, функция их хвалёной стандартной библиотеки пыха -- mail -- ненужное говно.
А есть в вашем компоститоре нормальная функция?
причем тут имап?
Ну это примерно как была «Почта России». Потом прикрутили «Почта-банк». Потом на почте стали макаронами торговать.
Это как человеку из 1989-го года сказать "сфотографируй на телефон и пошли фотку телеграммом"
https://pear.php.net/manual/en/package.mail.mail-mime.php
Напомню главные правила
1. Не надо читать советские газеты и любые форумы.
2. Не надо писать на любых форумах.
3. Не надо открывать ссылки на подозрительные сайты.
4. Любой сайт с "php" в домене - подозрителен.
5. Не надо писать вопросы и ответы на стэкпитухе, можно только гуглить готовые ответы на стэкпитухе.
Но не форумы, где постят питушню и спрашивают, как сложить 2+2 в jQuery.