octavia Geschrieben 20. Oktober 2010 Geschrieben 20. Oktober 2010 wir bekommen über unsere mailserver mails mit anfragen herein wo auch die hoempages angegeben werden. ich möchte nun um das ganze für uns zu vereinfachen teile der mails in eine db haben. die mails kommen als txt und html an. auf den mailserver per imap zu kommen ist soweit auch kein problem, den ganzen mails suche ich dann nach Anfrage $mbox = imap_open( "{" . $mailserver . ":" . $port . "}INBOX", $user, $pass ) or die('Cannot connect to '.$mailserver.''.$user.': ' . imap_last_error());; //$message_count= imap_search($mbox , 'TEXT "Anfrage"'); $message_count = imap_num_msg($mbox); echo "$message_count Nachrichten in $mailserver $user " ; nun mein problem wie kann ich aus der mail die url die hinter der anfrage steht herraussuchen und in eine variable übergeben? das gleiche mit Name und Vorname bzw firma danach die nachricht löschen alle anderen mails die nicht anrage enthalten (meist spam) sollen direkt gelöscht werden Zitieren
flashpixx Geschrieben 20. Oktober 2010 Geschrieben 20. Oktober 2010 Also je nachdem, wenn die URL immer an der gleichen Stelle steht, musst Du einfach mit Substr sie extrahieren. Ich denke aber, dass dies nicht der Fall ist, so dass Du eben nach eine URL im Text suchen musst, URLs beginnen meist mit http:// Für die Suche und das Extrahieren kannst Du reguläre Ausdrücke verwenden Zitieren
octavia Geschrieben 20. Oktober 2010 Autor Geschrieben 20. Oktober 2010 mit dieser funktion quäle ich mich grad aber diese gibt immer auch den restlichen text mit aus und nicht nur die url. ne leider steht es nicht immer an der gleichen possition in manchen mails sind auch 2 url drin diese müssen dann je nach endung in einortiert werden. function findUrl($u){ $url = $u[0]; $afterUrl = ''; // Zeichenkette am Ende der URL, die nicht zur URL gehört while(preg_match('#[[:punct:]]$#', $url, $found)){ $chr = $found[0]; // letztes Zeichen if($chr==='.' || $chr===',' || $chr==='!' || $chr==='?' || $chr===':' || $chr===';' || $chr==='>' || $chr==='<'){ // Ein Satzzeichen, das nicht zur URL gehört $afterUrl = $chr.$afterUrl; $url = substr($url, 0, -1); } elseif($chr===')' && strpos($url, '(')!==false || $chr===']' && strpos($url, '[')!==false || $chr==='}' && strpos($url, '{')!==false) break; // Klammer gehört nur zur URL, wenn auch öffnende Klammer vorkommt. elseif($chr===')' || $chr===']' || $chr==='}'){ // .. Klammer gehört nicht zur URL $afterUrl = $chr.$afterUrl; $url = substr($url, 0, -1); } elseif($chr==='(' || $chr==='[' || $chr==='{'){ // öffnende Klammer am Ende gehört nicht zur URL $afterUrl = $chr.$afterUrl; $url = substr($url, 0, -1); } else break; // Zeichen gehört zur URL } // URL mit HTML-Code zurückgeben return '<a href="'.$url.'" title="'.str_replace('http://', '', $url).'">'.$url.'</a>'; //return $Url; } $url = preg_replace_callback('#https?://[^/\s]{4,}(/[^\s]*)?#s', 'findUrl', $body); Zitieren
flashpixx Geschrieben 20. Oktober 2010 Geschrieben 20. Oktober 2010 Bitte verwende Code-Tags, da jetzt der Code schon extrem unübersichtlich ist. Außerdem würde ich das Rad nicht neu erfinden PHP: preg_replace_callback - Manual außerdem würde ich eine Suchmaschine verwenden, um eine gültige RegExpr zu finden, die URL nach RFC auch findet und verarbeitet Zitieren
octavia Geschrieben 20. Oktober 2010 Autor Geschrieben 20. Oktober 2010 das mit den Code-Tags werde ich beachten.. suchmaschiene habe ich schon gefunden aber leider nicht den hinweis den ich brauche.. deswegen schreibe ich ja hier und frage Zitieren
flashpixx Geschrieben 20. Oktober 2010 Geschrieben 20. Oktober 2010 warum finde ich dann: Regular Expression Library Zitieren
octavia Geschrieben 20. Oktober 2010 Autor Geschrieben 20. Oktober 2010 weil du weist nach was du suchst... bin zu lang aus dem programieren raus.. gut aber die domain bzw den link im text zu markieren... macht es ja aber bei preg_replace_callback bekomme ich ja keine variable der domain als return sondern den text mit samt der domain oder nur den text ohne domain Zitieren
flashpixx Geschrieben 20. Oktober 2010 Geschrieben 20. Oktober 2010 Du bekommst für den Regulären Ausdruck in die Callback Funktion ein Array, in dem Array stehen die entsprechenden Teile Deines Textes drin. Damit kannst Du dann entsprechend weiter arbeiten, d.h. Deine weitere Verarbeitung muss in den Callback Funktion mit den übergebenen Arraydaten durchgeführt werden Zitieren
octavia Geschrieben 20. Oktober 2010 Autor Geschrieben 20. Oktober 2010 ok die seite ist gut da , danke für den hinweis.. weist du vielleicht noch wie ich eine email (imap) auf dem server lösche bzw zum löschen markieren kann? Zitieren
flashpixx Geschrieben 20. Oktober 2010 Geschrieben 20. Oktober 2010 weist du vielleicht noch wie ich eine email (imap) auf dem server lösche bzw zum löschen markieren kann? PHP: imap_delete - Manual Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.