RoundCube
Все, что ниже справедливо для: roundcubemail-0.1-rc2-ru
Ссылки: Англоязычный сайт проекта. Русскоязычный сайт с локализованным RoundCube.
Теперь мой тюнинг:
1. Поигравшись с mbstring и iconv, которые можно использовать из RundCube для работы с различными кодировками – выключил их. Если их нет, то RoundCube использует свой собственный механизм, который, как мне показалось, работает лучше.
Для этого в файле program/include/main.inc поправить:
- $MBSTRING = $s_mbstring_loaded = extension_loaded("mbstring");
+ $MBSTRING = $s_mbstring_loaded = FALSE;
и
- if (function_exists('iconv') && $from != 'UTF-7' && $to != 'UTF-7')
+ if (function_exists('remove_iconv') && $from != 'UTF-7' && $to != 'UTF-7')
в файле: program/lib/Mail/mime.php поправить:
- if (function_exists('iconv_mime_encode') && preg_match('#[\x80-\xFF]{1}#', $hdr_val)){
+ if (function_exists('remove_iconv_mime_encode') && preg_match('#[\x80-\xFF]{1}#', $hdr_val)){
2. По советам из старого форума русского RoundCube сделал кодировку CP1251 кодировкой по умолчанию:
в файле: program/include/rcube_imap.inc
- return rcube_charset_convert($input, !empty($fallback) ? $fallback : 'ISO-8859-1'); + return rcube_charset_convert($input, !empty($fallback) ? $fallback : 'CP1251');
в файле: program/lib/utf8.class.php
- var $charset = "ISO-8859-1"; + var $charset = "CP1251";
и
- function __construct($charset="ISO-8859-1"){
+ function __construct($charset="CP1251"){
и
- function utf8($charset="ISO-8859-1"){
+ function utf8($charset="CP1251"){
3. Добавил правило перекодировки KOI8-R:
в файле: program/lib/utf8.class.php добавить
$utf8_maps = array( "CP1250" => UTF8_MAP_DIR . "/CP1250.map", + "KOI8-R" => UTF8_MAP_DIR . "/KOI8R.map", + "KOI8_R" => UTF8_MAP_DIR . "/KOI8R.map", + "KOI8R" => UTF8_MAP_DIR . "/KOI8R.map", "CP1251" => UTF8_MAP_DIR . "/CP1251.map",
И положить в папку: program/lib/encoding файл KOI8R.map
4. Добавил новую функцию в файле program/include/rcube_imap.inc
var $debug_level = 1; + var $charset = ''; var $error_code = 0;
и
$this->__construct($db_conn);
}
+ function scharset($chars) {
+ $this->charset = $chars;
+ }
/**
* Connect to an IMAP server
И использую её в: program/steps/mail/func.inc
foreach ($a_show_cols as $col)
{
+ $IMAP->scharset($header->charset);
if ($col=='from' || $col=='to')
и
if (!$headers[$hkey])
continue;
+ $IMAP->scharset($headers['charset']);
if ($hkey=='date' && !empty($headers[$hkey]))
5. Если в письме есть вложения вида .html или .txt, то RoundCube пробует открывать их своими средствами и часто проблема кодировок тут тоже вылезает. Потому решил, что .html и .txt вложения должны быть такими же вложениями, как и остальные. Тогда они отображаются как вложения и открываются на стороне клиента более корректно. Потому такие патчи:
в файле: program/js/app.js «this.mimetypes» надо сделать таким:
// mimetypes supported by the browser (default settings) this.mimetypes = new Array( 'image/jpeg', 'image/gif', 'image/png', 'application/x-javascript', 'application/x-shockwave-flash');
Т.е. убрать 'text/plain', 'text/html', 'text/xml'. Я так же убрал еще 'application/pdf' — что бы PDF так же не открывался браузером.
А так же в файле: program/steps/mail/get.inc
// deliver part content
- if ($ctype_primary=='text' && $ctype_secondary=='html')
+ if ($ctype_primary=='text' && $ctype_secondary=='html' && FALSE)
И в файле: program/steps/mail/func.inc
- else if (($primary_type=='text' && ($secondary_type=='plain' || $secondary_type=='html') && $mail_part->disposition!='attachment') || ($primary_type=='message' && $secondary_type=='delivery-status')) + else if ((($primary_type=='text' && ($secondary_type=='plain' || $secondary_type=='html') && $mail_part->disposition!='attachment') || ($primary_type=='message' && $secondary_type=='delivery-status')) && !$mail_part->filename)
Вот и все!









27.01.2010 в 10:14
Спасибо за статью — помогла решить пробьлему писем в koi8r с yandex.