Обработка писем в зависимости от кодировки?

Статус
В этой теме нельзя размещать новые ответы.

new_forward

Профессор
Регистрация
5 Май 2008
Сообщения
673
Реакции
44
Доброго времени суток!

Подскажите пожалуйста как точно определить кодировку письма а то приходят разные письма...и получается одни определяются а другие нет и еще вопрос некоторые письма приходят закодированные в base64_encode...как определить что оно закодировано?

Короче говоря нет ли куска кода который бы все приводил к единой кодировке что б потом можно спокойно вставить в базу?
 

trooll

PHP кодер
Регистрация
22 Дек 2008
Сообщения
482
Реакции
117
Когда то писал скрипт, тоже была необходимость определения какое кодирования письма используется. Помню находил пару классов для обработки приходящих писем, и из них уже выдергивал необходимые куски. Если найду дома эти классы выложу (хотя думаю на врятли найду, много времени с тех пор утекло).

Порой интернет на момент таких классов пока там, до дому доберусь уже видно будет.
 

Miraage

Angular/Laravel
Регистрация
3 Июн 2008
Сообщения
231
Реакции
51
Автор, есть замечательная библиотека PHPMailer. Насколько я помню, у него есть функционал работы с кодировками.
 

trooll

PHP кодер
Регистрация
22 Дек 2008
Сообщения
482
Реакции
117
Отрыл один старый скрипт. В общем так, во вложении прикреплен класс php, его качнешь и прицепишь к скрипту далее код использования (если я тебя правильно понял:(

PHP:
$set_mail_body_type = 'text'; //html или text
$set_charset_out = 'utf-8';

$mail_in = 'ТУТ_ПИСЬМО_С_ГОЛОВОЙ_ПИСЬМА_И_ТЕЛОМ';

##################################################

$Parser = new MimeMailParser();
$Parser->setText($mail_in);

$mail_out = $Parser->getMessageBody($set_mail_body_type);

preg_match('#Content-Type:.+charset=(.+)#', $mail_in, $Charset);
unset($Charset[0]); 

preg_match('#Content-Transfer-Encoding: (.+)#', $mail_in, $Encoding); 
unset($Encoding[0]); 

if ($Encoding[1]== 'quoted-printable') {
	$mail_out = quoted_printable_decode($mail_out);
}
elseif (preg_match('#=..=#', $mail_out)) {
	$mail_out = quoted_printable_decode($mail_out);
}
elseif ($Encoding[1] == 'base64') {
	$mail_out = base64_decode($mail_out);
}

if ($Charset != '') {
	$mail_out = iconv($Charset[1], $set_charset_out.'//IGNORE', $mail_out);
}

Вот как то так, код не проверял, нет возможности, может быть где то что то не учтено но это дело житейское можно дописать и до думать...
 

Вложения

  • MimeMailParser.class.php.zip
    2,7 KB · Просмотры: 8
Статус
В этой теме нельзя размещать новые ответы.
Сверху