• Правильная кодировка исходящих писем в SugarCRM

    С этой проблемой я столкнулся при сопровождении SugarCRM PRO 6.1.3: письма, отправляемые из системы (будь то тестовые письма с информацией о настройках почты, или разнообразные уведомления), приходили в кривой кодировке. Их просто невозможно было прочесть.

    Немного покопавшись в коде, нашел в файле /include/phpmailer/class.phpmailer.php описание функции Send(). Внутри этой функции одной из переменных является строка с заголовками отправляемого письма. Выведя эти заголовки на просмотр:

        $header .= $this->CreateHeader();
        print_array($header,1);
    

    видим такую картину в браузере:

    Date: Thu, 9 Jun 2011 16:56:33 +0400
    Return-Path: do_not_reply@aspartner.ru
    To: =?ISO-8859-1?Q?=D0=90=D0=BB=D1=8C=D0=B1=D0=B8=D0=BD=D0=B0=20=D0=A0=D0=B8?= =?ISO-8859-1?Q?=D0=BD=D0=B0=D1=82=D0=BE=D0=B2=D0=BD=D0=B0=20=D0=A7=D1=83?= =?ISO-8859-1?Q?=D1=80=D0=B0=D0=BA=D0=BE=D0=B2=D0=B0?= 
    From: =?ISO-8859-1?B?0J7QntCeICZxdW90O9CQ0KEt0J/QsNGA0YLQvdC10YAmcXVvdDs=?= 
    Subject: ??? ????????? ?????? - ???????? ??????
    Message-ID: 
    X-Priority: 3
    X-Mailer: PHPMailer (phpmailer.codeworxtech.com) [version 2.3]
    MIME-Version: 1.0
    Content-Transfer-Encoding: quoted-printable
    Content-Type: text/plain; charset="ISO-8859-1"
    

    Во всем это многообразии строк нас интересует самая последняя:

    Content-Type: text/plain; charset="ISO-8859-1"
    

    Она говорит о том, что письмо посылается в чуждой русскому языку кодировке ISO-8859-1.

    Порывшись в интерфейсе SugarCRM, нигде не нашел, где можно указать другую кодировку (потому и пишу данную статью в разделе для разработчиков, а не администраторов).

    В общем, поиски этой кодировки, и как она подставляется, привел в все тот-же конфигурационный файл config.php, лежащий в корневой директории системы. Параметр default_email_charset содержит нужное нам значение:

      'default_email_charset' => 'ISO-8859-1',
    

    Все, что нам осталось, так это подправить этот параметр, задав правильную кодировку (ну например, UTF-8).

    Как и в настройке русского языка по-умолчанию, все необходимые изменения конфигурационного файла делаем в специальном файле config_override.php.

    Открываем файл config_override.php, и добавляем соответствующую строчку в конец этого файла:

    $sugar_config['default_email_charset'] = 'UTF-8';