Проблема с отправкой почты через mail()

Тема в разделе "PHP", создана пользователем verfaa, 11 авг 2013.

Статус темы:
Закрыта.
Модераторы: latteo
  1. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    374
    Симпатии:
    41
    Помучавшись с OpenDKIM (подробнее тут https://www.nulled.cc/threads/243655/), заметил что в письме, в русском тексте, если отправить например
    на почту приходит

    И так в нескольких местах русские буквы заменяются на непонятно что.
    Сообщения отправляю функцией mail()
    Как решить проблему и почему она возникает?

    И ещё в шаблоне письма заменяю [email_body] на переменную с русским текстом
    Код:
    $email_body = str_replace("[email_body]", $lang["email_body"], $email_body);
    в переменной $lang["email_body"] - русский текст, в utf-8
    может где-то здесь ошибка?
     
  2. Zex0n

    Zex0n Создатель

    Регистр.:
    1 июл 2006
    Сообщения:
    30
    Симпатии:
    8
    А ты до того как ты str_replace делаешь в переменных текст правильный?
     
  3. Zex0n

    Zex0n Создатель

    Регистр.:
    1 июл 2006
    Сообщения:
    30
    Симпатии:
    8
    Как вариант, попробуй использовать вместо str_replace вот эту функцию.
    PHP:
    <?php
    function mb_str_replace($needle$replacement$haystack)
    {
        
    $needle_len mb_strlen($needle);
        
    $replacement_len mb_strlen($replacement);
        
    $pos mb_strpos($haystack$needle);
        while (
    $pos !== false)
        {
            
    $haystack mb_substr($haystack0$pos) . $replacement
                    
    mb_substr($haystack$pos $needle_len);
            
    $pos mb_strpos($haystack$needle$pos $replacement_len);
        }
        return 
    $haystack;
    }
    ?>
    Иногда случаются проблемы с заменой str_replace текста в utf-8.
     
  4. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    374
    Симпатии:
    41
    проблема была в том, что письмо я отправлял 1-й строкой длиной ок. 4000-5000 символов (html шаблон письма обрабатывался ф-ей {strip} в смарти), а долбанный postfix не работает с длинными строками видите-ли и делал переносы, добавлял кракозяблы каждые 850-900 символов.
    Проблема решилась $email_body = wordwrap($f_email_body, 200);
    А я 4 дня копался в конфигах postfix, дким, перепробовал десятки вариантов записи публичного ключа в конфиге домена, думал в этом проблема.
     
    latteo нравится это.
Статус темы:
Закрыта.