• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

imap e-mail client

  • Ersteller Ersteller FoXMorayn
  • Erstellt am Erstellt am
F

FoXMorayn

Guest
Hallo,

ich habe zwei fragen um einen e-mail client bauen zu können:

wie erkenne ich welche nachrichten ich schon runtergeladen habe?
ich benötige eine 1:1 kopie des e-mails postfachs und möchte neue nachrichten runterladen. auf \SEEN möchte ich mich nicht verlassen und imap_check->Nmsgs änder sich ja, wenn emails gelöscht werden.

wie bekomme ich die codierung in den griff? ich erhalte und lasse e-mails in ISO-59.. anzeigen.
z.b.: "unser n=E4chstes Treffen steht bevor ..." zeilenumbrüche werden als = dargestellt.


zum testen lade ich e-mails von googlemail.


gruß,
foxmorayn
 
Erhalten die Köpfe der E-Mail denn keine eindeutige ID irgendwo? Normalerweise wird sowas vom Mailserver angehängt.

Um-Codieren möchtest du mit iconv.
 
im header befindet sich eine message_id, dazu hab ich leider nichts gefunden. in dem zusammenhang stand aber immer irgendwie diese funktion PHP: imap_uid - Manual, die eine eindeutige id zurück liefert. das problem sit damit aus der welt.

leider hilft mir iconv nicht weiter. in der jetzigen situation würde dann sowas passieren: ISO-8859-1 nach ISO-8859-1, also keine änderung. Ich hätte so immer noch keinen lesbaren text.

Danke schonmal.

Gruß,
FoXMorayn
 
danke, das klappt.
das lößt zwar noch nicht alle kodierungsprobleme, aber zumindest erhalte ich formate, mit denen ich mich auskenn :-)
 
ich versteh es selbst auch noch nicht so ganz.
der imap server übergibt mir den text in irgend einem base64 alphabet.
das muss ich erstmal "entschlüsseln", das geht mit imap_qprint (nicht mit imap_base64 oder base64_decode, was ich logischerweise angekommen hab)

die entschlüsselte e-mail muss dann noch mit dem im header mitgesendetem zeichensatz angezeigt werden.
den zeichensatz muss man selbst rausfiltern...

man merkt, dass die e-mail technik schon ein paar jahre auf dem buckel hat.

gruß,
FoXMorayn
 
beim convertieren mit imap_qprint geht leider einiges in die brüche.

beispiel im text steht etwas, wie lang=de "=de" wird dann umgewandelt...
gibs keine vernünftige möglichkeit um e-mails richtig zu empfangen?
 
Dann war das entweder falsch kodiert oder du hast imap_qprint fälschlicherweise angewendet oder imap_qprint ist die falsche Funktion. Anders gesagt: Ja, der korrekte Umgang mit Mailprotokollen ist ein Wald mit viel Gestrüpp, aber es gibt definitiv Möglichkeiten, E-Mails "richtig" zu empfangen bzw. auszulesen.

Ich habe mich damit allerdings noch nie beschäftigt. Ein guter Hinweis ist es aber immer, im Zweifel in die passenden RFCs zu gucken. Die sind üblicherweise auf den zugehörigen Wikipediaseiten verlinkt.
 
fälschlicher weise ist ein gutes stichwort.
kommen nicht alle e-mails als quoted-printabl?

wenn, woran kann ich diese erkennen. im header ist es nicht immer angegeben. dies funktioniert nicht:
Code:
 /* encode quoted-printable */
                    if (preg_match("/content-transfer-encoding: quoted-printable/i", strtolower($header)))
                    {
                        $content_tmp = imap_qprint($content_tmp);
                    }
 
Ich hab ein ähnliches Problem und google hat mich hier her verwiesen. Zum Umwandeln der ISO Mails nehme ich diese Funktion:

PHP:
function decode_ISO88591($string){
    $string=str_replace("=?iso-8859-1?q?","",$string);
    $string=str_replace("=?iso-8859-1?Q?","",$string);
    $string=str_replace("?=","",$string);

    $charHex=array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
    for($z=0;$z<sizeof($charHex);$z++){
        for($i=0;$i<sizeof($charHex);$i++){
            $string=str_replace(("=".($charHex[$z].$charHex[$i])),chr(hexdec($charHex[$z].$charHex[$i])),$string);
        }
    }
    return($string);
}
Mein Problem ist aber, dass ich Mails in UTF8 und ISO erhalte. Damit ich die Mail richtig dekodieren kann muss ich wissen in welcher Kodierung die Mail vorliegt. Wie finde ich das heraus? Gibt es eine Funktion die einem die Kodierung eines Strings ausgibt? isIso(). isUTF8()? Mal ganz dumm gefragt.. :razz:
 
mein weg war: base64 entschlüsseln, dann zeichensatz auslesen und alles in uft-8 umwandeln.

Zeichensatzerkennung per content-type
für subtype == PLAIN:
Code:
$struct = imap_fetchstructure($mailbox, $overview->msgno);
$parts = $struct->parts;

$content_type = $parts[$i]->parameters[0]->value;

erkennt deine funktion, ob die mail in quoted-printable angekommen ist? mir zerstörrt es bei manchen mails die urls, wenn dort z.b. ein lang=de steht.
 
Zurück
Oben