Hallo,
ich versuche momentan einen kleinen Email-Client zu erstellen. Nun bin ich dabei die Funktion zu erstellen, welche die Nachrichten vom pop3 Server ausliest. Dabei ergibt sich das für mich leider bisher unlösbare Problem der Umlaute in den abgerufenen Emails -- diese werden immer als unbekannte Zeichen dargestellt (im Firefox ein �), wie ich es auch anfange. Meine Versuche sind unten im Skript ersichtlich (wo die vielen //????// stehen) ... ich bin für jede Hilfe dankbar.
Das Skript, dass ich verwende, sieht etwa so aus:
<?
// Funktionen zum Auslesen eines bestimmten MIME-Types
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)
{
$prefix = "";
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) /* multipart */
{
while (list($index, $sub_structure) = each($structure->parts)) {
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;
}
// hier Script mit den Benutzerdaten des POP3-Servers konfigurieren
$hostname = "pop3.web.de";
$username = "irgendwer@irgendwo.de";
$kennwort = "sososososo";
$mailbox = imap_open("{".$hostname."}", $username, $kennwort);
// $mailbox = imap_open ("{".$hostname.":110/pop3}INBOX", $username, $kennwort); // für GMX und andere bekannte Freemailer
$mails = imap_fetch_overview($mailbox,"1:*", FT_UID); // Holt eine Übersicht aller Emails
$nachricht_tell = "";
$size=count($mails); // Anzahl der Nachrichten
$cmsg = 0; // Zur Ausgabe einer fortlaufenden Nummer
for ($i=$size-1; $i>=0; $i--) { // für alle vorhandenen Mails durchlaufen
$cmsg++;
$value = $mails[$i];
$mail = get_part($mailbox, $value->msgno, "TEXT/PLAIN"); // aus der Nachricht den Plaintext holen
$mail2 = get_part($mailbox, $value->msgno, "TEXT/HTML"); // aus der Nachricht den Htmltext holen
if ($mail2 != ''){
$msgBody = $mail2;
// $msgBody=ereg_replace("ü","ü",$mail2);
}else{
$msgBody=ereg_replace("\n","<br>",$mail);
$msgBody=preg_replace("/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i","$1http://$2", $msgBody);
$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);
// ???????????????????????????????????????????????????????????????????????????????????? //
// $msgBody=preg_replace("/[^a-z0-9 äöü]/usi", "",$msgBody); // funktioniert nicht
// $msgBody=ereg_replace("ü","ü",$msgBody); // funktioniert nicht
// utf8_encode($msgBody); // funktioniert nicht
/** das hier geht aber so wie es soll ??
$str = 'ERZ$EÜDLÖFÄEWHGUOIE$gfbo8w34';
$str = preg_replace("/[^a-z0-9 äöü]/usi", "", $str);
echo $str;
**/
};
echo $msgBody;
}
imap_close($mailbox); // Verbindung zum POP3-Server beenden
?>
Danke schonmal,
Alex