
Фото: Дмитрий Базенков
На выходных решил заглянуть на сайт phpguru.org в поисках кода для работы с MIME и наткнулся на Rmail. Написав быстренько скриптик для отправки сообщений я начал тестировать его на Gmail и Mail.ru. С первого сообщения стало ясно, что автор чего-то написал не так, потому, что тема сообщения на русском языке слипалсь. Т.е. если мы делаем так $subject = ‘Первое текстовое сообщение’; То на почтовом сервисе эта тема выглядела следующим образом: Первоетекстовоесообщение. Вобщем поковырявшись в его коде я нашел не совсем корректную функцию, которая выглядит следующим образом:
private function encodeHeader($input, $charset = 'ISO-8859-1')
{
preg_match_all('/(\w*[\x80-\xFF]+\w*)/', $input, $matches);
foreach ($matches[1] as $value) {
$replacement = preg_replace('/([\x80-\xFF])/e', '"=" . strtoupper(dechex(ord("\1")))', $value);
$input = str_replace($value, '=?' . $charset . '?Q?' . $replacement . '?=', $input);
}
return $input;
}
Чтобы сделать работу Rmail корректной, необходимо заменить вышеупомянутую функцию на следующую
function encodeHeader($input, $charset = 'ISO-8859-1')
{
if(preg_match_all('/(\w*[\x80-\xFF]+\w*)/', $input, $matches))
$input = mb_encode_mimeheader($input,$charset, 'Q');
return $input;
}
После этого темы сообщений на русском языке будут отображаться корректно.
Не забывайте подписываться на наш блог. Особенно, если продвижение сайта и заработок в интернете для вас не пустые слова.
