"PHP" / Говнокод #26675 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 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("Подтверждение подписки") . "?=";
// И так для каждого поля.

https://phpclub.ru/talk/threads/Нужна-помощь-битая-кодировка-в-письме.82881/

Запостил: gost gost, (Updated )

Комментарии (20) RSS

  • Бля-я-я, это охуенно! Почти как самостоятельная поклейка HTTP-запросов и отправка их по «TCP».
    Ответить
    • Куик! У меня вы могли видеть примерно такой код:
      $rawdata='<?xml encoding="UTF-8">'.$rawdata;
      $dom = new DOMDocument;
      $dom->loadHTML($rawdata);
      $xpath = new DOMXPath($dom);
      ...

      Как думаете, для чего первая строка? Оказывается, если не приклеить строчку <?xml encoding="UTF-8"> к HTML-файлу, объект DOMDocument пидорасит кодировку и отказывается воспринимать символы за пределами Latin-1.
      Ответить
  • Да там и вложения потом вручную будут клеить скорее всего.
    Ответить
    • Попытался узнать, а как же правильно, чтобы руками не собирать.

      Функция «mail» клеить вложения не умеет.

      Расширение «mailparse» умеет разбирать, но не клеить.

      Клеить умеет... расширение «IMAP»:
      https://www.php.net/manual/ru/function.imap-mail-compose.php

      Логично, да?
      Ответить
      • >>> Ассоциативный массив с полями заголовка. Допустимые ключи: "remail", "return_path", "date", "from", "reply_to", "in_reply_to", "subject", "to", "cc", "bcc", "message_id" и "custom_headers" (который содержит ассоциативный массив прочих заголовков).
        Ух, бля, какая консистентность-то.
        Ответить
  • >И так для каждого поля
    Иными словами, функция их хвалёной стандартной библиотеки пыха -- mail -- ненужное говно.

    А есть в вашем компоститоре нормальная функция?
    Ответить
    • Я выше дал ссылку на imap_mail_compose. Правда, пока сам не тестировал, но заявленный функционал уже радует.
      Ответить
      • нейминг божесмтвенный

        причем тут имап?
        Ответить
        • Ну имап хотя бы в тему почты. А могли бы и в какое-нибудь другое рандомное расширение засунуть.
          Ответить
        • Возможно, так сложилось исторически. Сначала была поддержка IMAP. Потом решили прикрутить SMTP, MIME и вообще всё, что смогли вспомнить.

          Ну это примерно как была «Почта России». Потом прикрутили «Почта-банк». Потом на почте стали макаронами торговать.
          Ответить
          • Почта-банк торгующий макаронами.
            Это как человеку из 1989-го года сказать "сфотографируй на телефон и пошли фотку телеграммом"
            Ответить
  • Вас что, заставляют на PHP писать? Или на этом форуме отвечать?

    Напомню главные правила
    1. Не надо читать советские газеты и любые форумы.
    2. Не надо писать на любых форумах.
    3. Не надо открывать ссылки на подозрительные сайты.
    4. Любой сайт с "php" в домене - подозрителен.
    5. Не надо писать вопросы и ответы на стэкпитухе, можно только гуглить готовые ответы на стэкпитухе.
    Ответить
    • А как же основная причина - в инете кто-то не прав, я не усну пока не отвечу.
      Ответить
      • Не, ну я понимаю, там ГК, сайты с диванной политотой или тот же х-р наконец (под постом человека, разбирающегося в теме).
        Но не форумы, где постят питушню и спрашивают, как сложить 2+2 в jQuery.
        Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8