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

Тема в разделе "PHP Pro", создана пользователем new_forward, 10 авг 2011.

Статус темы:
Закрыта.
  1. new_forward

    new_forward

    Регистр.:
    5 май 2008
    Сообщения:
    668
    Симпатии:
    44
    Доброго времени суток!

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

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

    CraZee

    Регистр.:
    11 сен 2006
    Сообщения:
    603
    Симпатии:
    665
  3. trooll

    trooll PHP кодер

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

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

    Miraage Angular/Laravel

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

    trooll PHP кодер

    Регистр.:
    22 дек 2008
    Сообщения:
    503
    Симпатии:
    116
    Отрыл один старый скрипт. В общем так, во вложении прикреплен класс 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);
    }
    Вот как то так, код не проверял, нет возможности, может быть где то что то не учтено но это дело житейское можно дописать и до думать...
     

    Вложения:

Статус темы:
Закрыта.