1. PHP / Говнокод #26675

    +3

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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 = "Иван Иванов <[email protected]>";
    $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: Рван Рванов <[email protected]>
    // Reply-To: Рван Рванов <[email protected]>
    
    // ...
    
    // Проблема решилась следующим образом:
    $subject = "=?utf-8?B?" . base64_encode("Подтверждение подписки") . "?=";
    // И так для каждого поля.

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

    Запостил: gost, 20 Мая 2020

    Комментарии (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. Правда, пока сам не тестировал, но заявленный функционал уже радует.
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • лучше б iMail
            Ответить
          • Ну имап хотя бы в тему почты. А могли бы и в какое-нибудь другое рандомное расширение засунуть.
            Ответить
          • Возможно, так сложилось исторически. Сначала была поддержка IMAP. Потом решили прикрутить SMTP, MIME и вообще всё, что смогли вспомнить.

            Ну это примерно как была «Почта России». Потом прикрутили «Почта-банк». Потом на почте стали макаронами торговать.
            Ответить
            • Почта-банк торгующий макаронами.
              Это как человеку из 1989-го года сказать "сфотографируй на телефон и пошли фотку телеграммом"
              Ответить
      • В «Груше» есть ещё такая питушня:
        https://pear.php.net/manual/en/package.mail.mail-mime.php
        Ответить
    • Вас что, заставляют на PHP писать? Или на этом форуме отвечать?

      Напомню главные правила
      1. Не надо читать советские газеты и любые форумы.
      2. Не надо писать на любых форумах.
      3. Не надо открывать ссылки на подозрительные сайты.
      4. Любой сайт с "php" в домене - подозрителен.
      5. Не надо писать вопросы и ответы на стэкпитухе, можно только гуглить готовые ответы на стэкпитухе.
      Ответить

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