Ответов: 28 Просмотров: 7247
|
Всем привет.
Был приятно удивлен что тема вроде как жарко обсуждается уже 3 года.
Теперь к делу:
Почитав тему, обратил внимание что тут получают почту, разворачивают ее и не читая самого тела вытаскивают вложение.
Вот Может кто поделится (если есть) куском кода для расшифровки самого письма?
У меня дальше этого дело не идет:
http://dev[dot]western-soft[dot]com/?module=mail
А для получения данного текста использовал код из первых сообщений:
PHP:
скопировать код в буфер обмена
$user = 'test@western-soft.com'; $pass = 'test'; echo "<hr>"; $ml = imap_open('{western-soft.com:143/novalidate-cert}INBOX',$user, $pass); echo "$n"; // Получаем темы всех писем if ($n > 0) { for ($i=0;$i<=$n;$i++) { $h = $h->from; foreach ($h as $k => $v) { $mailbox = $v->mailbox; $host = $v->host; $personal = $v->personal; $email = $mailbox . '@' . $host; } foreach ($s as $k => $v) { $subj = "$v->subject"; } echo "<pre>"; echo "</pre><hr>"; } } $email_number = "4"; while (isset($structure->parts[$parts]->subtype)) { $att_type = $structure->parts[$parts]->subtype; if ($structure->parts[$parts]->ifdparameters == 1) { $file_name = imap_utf8($structure->parts[$parts]->dparameters[0 ]->value); } }
Расшифровку тем нашел в инете, где получали письмо по протоколу pop3:
PHP:
скопировать код в буфер обмена
// При отправке почты, все не латинские символы в заголовках кодируется, // например тема письма может выглядеть так =?windows-1251?B?7/Du4uXw6uA=?= // вот такие тексты и будет преобразовывать эта функция function decode_mime_string($subject) { $string = $subject; if(($pos = strpos($string,"=?")) === false) return $string; while(!($pos === false)) { $newresult .= substr($string,0 ,$pos); $intpos = strpos($string,"?"); $charset = substr($string,0 ,$intpos); $endpos = strpos($string,"?="); $mystring = substr($string,0 ,$endpos); $newresult .= $mystring; }
Может кому пригодится, там же аттачи расшифровывают таким образом:
PHP:
скопировать код в буфер обмена
// перекодировщик тела письма. // Само письмо может быть закодировано и данная функция приводит тело письма в нормальный вид. // Так же и вложенные файлы будут перекодироваться этой функцией. function compile_body($body,$enctype,$ctype) { $enctype = explode(" ",$enctype); $enctype = $enctype[0 ]; elseif(strtolower($enctype) == "quoted-printable") return $body; } // Функция для выдергивания метки boundary из заголовка Content-Type // boundary это разделитель между разным содержимым в письме, // например, чтобы отделить файл от текста письма function get_boundary($ctype){ if(preg_match('/boundary[ ]?=[ ]?(["]?.*)/i',$ctype,$regs)) { return trim("--$boundary"); } } // если письмо будет состоять из нескольких частей (текст, файлы и т.д.) // то эта функция разобьет такое письмо на части (в массив), согласно разделителю boundary function explode_parts($boundary,$body) { $lenbody = strpos($body,"\r\n$boundary--") - $startpos; $body = substr($body,$startpos,$lenbody); return explode($boundary."\r\n",$body); }
Вернемся к моему вопросу, как получить сам текст письма в читабельном виде?
1. Если письмо не шифровано то получаем все довольно просто, выводим текст и все путем.
2. Если письмо шифровано, то иногда справляется декодер (тот что я показал немного выше)
3. Попытка отправить почту с gmail и/или с мобильного клиента mail.ru получил текст такого вида:
Под спойлер убрал полученное письмо дабы не гадить на форуме, тоже самое (только полностью) можно увидеть на моем сайте, адрес показал выше: dev.we.....com
Спойлер (Отобразить)CODE ( htmlphp):
скопировать код в буфер обмена
------a2aeed88-2o1Tc0pCKdVwFCLk:1424367164 Content-Type: multipart/alternative; boundary="--ALT--a2aeed881424367164" ----ALT--a2aeed881424367164 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 CtCi0LDQvCDRgtC10LzQsCDQvdCwINGA0YPRgdC80L7QvAoKLS0K0J7RgtC/0YDQsNCy0LvQtdC9 0L4g0LjQtyDQvNC+0LHQuNC70YzQvdC+0Lkg0J/QvtGH0YLRiyBNYWlsLlJ1 ----ALT--a2aeed881424367164 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 CjxIVE1MPjxCT0RZPjxwIGRpcj0ibHRyIj4mIzEwNTg7JiMxMDcyOyYjMTA4NDsgJiMxMDkwOyYj MTA3NzsmIzEwODQ7JiMxMDcyOyAmIzEwODU7JiMxMDcyOyAmIzEwODg7JiMxMDkxOyYjMTA4OTsm IzEwODQ7JiMxMDg2OyYjMTA4NDs8YnI+PGJyPjwvcD4KPHAgZGlyPSJsdHIiPi0tPGJyPgomIzEw NTQ7JiMxMDkwOyYjMTA4NzsmIzEwODg7JiMxMDcyOyYjMTA3NDsmIzEwODM7JiMxMDc3OyYjMTA4 NTsmIzEwODY7ICYjMTA4MDsmIzEwNzk7ICYjMTA4NDsmIzEwODY7JiMxMDczOyYjMTA4MDsmIzEw ODM7JiMxMTAwOyYjMTA4NTsmIzEwODY7JiMxMDgxOyAmIzEwNTU7JiMxMDg2OyYjMTA5NTsmIzEw OTA7JiMxMDk5OyBNYWlsLlJ1PC9wPgo8L0JPRFk+PC9IVE1MPgo= ----ALT--a2aeed881424367164-- ------a2aeed88-2o1Tc0pCKdVwFCLk:1424367164 Content-Type: image/jpeg; name="=?UTF-8?B?aW1hZ2UtMDA0ZTE3YjU1ODk1M2Q0NjE0MTQ3MTJhZWVlY2JiZWQ5NTUzNmEw?= =?UTF-8?B?MTZkNjMzMTI5NDE5MTNkZTZjOWJlMDM0YS1WLmpwZw==?=" Content-Disposition: attachment Content-Transfer-Encoding: base64 /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAMgAeADASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD/AD/6 KKKACivsv9hL9lbT/wBsf453Pwf1Lxfd+C4V8BeLvFMGuWWnQalKmoaOlha6ZBNZzzQrNZvf6lbT X6JNDPJZRXEFtcQ3Ekdwt39qv9gH9o39kXUppvHnhg+IfAzu39m/E7wfHd6p4QuI/OaGOPVZPs0d 54YvmPlf6FrtvarK0qrp9zeIrS0AfE9FFFABRRX7Wf8ABN/wN8PZvhPrvjMaTpOp+NLnxVqWjatq N3bQXWoaZptpaabNp+l2wnEpsrW4S4e/leBYmvZZdlxJMtnbqmGIrrD0nUcXK0oxSWl2+fdvZWg3 ez1aVm1Jr5LjXiyjwXkNXO62CrY/kxGHwtLDUqioqdWvKaUqteVOqqFKMacm5+zqN1HTpKLlPmPx Tor7/wD+Cifg7wH4T+MWhTeELHTtJ1PxD4XGr+K9L0uKO3t/7QOq31vaatLawkQ213qtvA32l ... Yy6pgKdHD0KtO3tcVg8RKrOdSX2f qcYxiou/tJNyXIub/9k= ------a2aeed88-2o1Tc0pCKdVwFCLk:1424367164--
PS. Забыл сказать, что pop3 протокол не подходит, так как не дает возможности отмечать письмо прочтенным, а фиксировать прочтение в БД как то не красиво что ли... т.к. сейчас пользователь прочитал письмо через web, а потом через imap клиентом зацепился (например с телефона)... |