piszę aplikację sprawdzającą jedną skrzynkę mailową... kodowania przychodzące na tą skrzynkę mogą być różne - najczęściej iso-8859-2 lub utf-8, rzadziej windowsowe (ale też mogą się zdarzyć i muszę to jakoś obsłużyć)
Nagłówki mam traficzne:
od: =?UTF-8?Q?Znaczki:_=C5=84 ?= temat: =?UTF-8?B?SmFrYcWbIHRyZcWbxIc=?=
od: =?iso-8859-2?Q?Znaczki=F1?= temat: =?iso-8859-2?B?dGVzdCBQb2xza2ljaCB6bmFjemvzdzogoabG0aPKILG25vGz6g==?=
Pytanie - jak to poprawnie wyświetlić?
Droga najdłuższa - wyciągać kodowanie i w zależności od kodowania zamieniać na PL znaki (co jednak jak pojawią się inne znaczki - w mailach mogą pojawić się też znaki diakrytyczne z innych języków - więc problem rozwiązany połowicznie i bardzo długo)...
(np explode('?',$subj) - i wyświetlić tylko $subj[3] - kodowanie $subj[1] i przelecieć tekst str_replace - długa operacja - analogicznie $from)
jest jakiś prostszy sposób?
Mój kod:
if ($hdr = imap_check($mbox)) { $msgCount = $hdr->Nmsgs; } else { } $MN=$msgCount; $overview=imap_fetch_overview($mbox,"1:$MN",0); $a=$size; for($i=$size-1;$i>=0;$i--){ $val=$overview[$i]; $msg=$val->msgno; $from=$val->from; $date=$val->date; $subj=$val->subject; $seen=$val->seen; // $from = ereg_replace("\"","",$from); // MAKE DANISH DATE DISPLAY $date = $day ." ". $month ." ". $year . " ". $time; if ($bgColor == "#F0F0F0") { $bgColor = "#FFFFFF"; } else { $bgColor = "#F0F0F0"; } } $subj = "Brak tematu"; } echo "<tr bgcolor=\"$bgColor\"><td colspan=\"2\">$from</td><td colspan=\"2\"><A HREF='mail.php?msgno=$a'>$subj</a></td> <td class=\"tblContent\" colspan=\"2\">$date</td></tr>\n"; $a--; }
Odbieranie pojedynczej wiadomości:
w pierwszej chwili myślałam o czymś takim
$msgBody = iconv("ISO-8859-2","UTF-8",$msgBody);
Ale to nie rozwiązuje problemów, jeśli już to
$msgBody = iconv("$wyciagnieteKodowanie","UTF-8",$msgBody);
Pytanie czy się da i czy ma to sens?
function get_mime_type(&$structure) { $primary_mime_type = array("TEXT", "MULTIPART","MESSAGE", "APPLICATION", "AUDIO","IMAGE", "VIDEO", "OTHER"); if($structure->subtype) { return $primary_mime_type[(int) $structure->type] . '/' .$structure->subtype; } return "TEXT/PLAIN"; } function get_part($stream, $msg_number, $mime_type, $structure = false,$part_number = false) { if(!$structure) { $structure = imap_fetchstructure($stream, $msg_number); } if($structure) { if($mime_type == get_mime_type($structure)) { if(!$part_number) { $part_number = "1"; } $text = imap_fetchbody($stream, $msg_number, $part_number); if($structure->encoding == 3) { return imap_base64($text); } else if($structure->encoding == 4) { return imap_qprint($text); } else { return $text; } } if($structure->type == 1){ if($part_number) { $prefix = $part_number . '.'; } $data = get_part($stream, $msg_number, $mime_type, $sub_structure,$prefix . ($index + 1)); if($data) { return $data; } } } } return false; } $msgno=$_GET['msgno']; $dataTxt = get_part($mbox, $msgno, "TEXT/PLAIN"); $dataHtml = get_part($mbox, $msgno, "TEXT/HTML"); if ($dataHtml != "") { $msgBody = $dataHtml; $mailformat = "html"; } else { $mailformat = "text"; } if ($mailformat == "text") { } else { } function transformHTML($str) { $makeHeader = ""; $makeBody = "\n<body>\n"; $str = $makeHeader . $makeBody . $str ."\n</body></html>"; } else { $str = $makeHeader . $str ."\n</html>"; } } else { $str = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-2\">\n". $str; } return $str; } if ($dataHtml != "") { $msgBody = transformHTML($dataHtml); } else { $msgBody = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<A TARGET=\"_blank\" HREF=\"$1\">$1</A>", $msgBody); $msgBody = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<A HREF=\"mailto:$1\">$1</A>",$msgBody); }
Dzięki za porady