Funktionsweise von "imap_fetchbody"

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Funktionsweise von "imap_fetchbody"

    Liebe Leute,

    ich bin ein gerade neu-registrierter Benutzer, aber habe gleich eine Frage. Hoffentlich kann mir jemand weiterhelfen.

    Es geht mir um

    string imap_fetchbody ( resource $imap_stream, int $msg_number, string $part_number [, int $options] )
    Auf php.net heißt es zu dem Parameter "part_number":

    Die Nummer des gewünschten Nachrichtenteils. Diese wird gemäß der IMAP4 Spezifikation als String von mit Punkten getrennten Zahlen angegeben.
    Ist damit wohl jenes gemeint: http://tools.ietf.org/html/rfc3501 ?

    Wenn ja, dann habe ich die relevante Stelle wohl nicht gefunden. Deswegen möchte ich mein Problem gerne hier schildern:

    Wie kann ich mit "imap_fetchbody" den Nachrichtentext eines Nachrichtenteils (multi-part message) abrufen, der selbst wiederum Teil eines Nachrichtenteils ist?

    D.h. im Detail: Ich ermittle mit "imap_fetchstructure" die Struktur einer Email und bekomme von der Funktion ein Objekt zurückgegeben. Bei einer multipart-message bekomme ich über ->parts ein Array von Objekten zurück, die wiederum jeweils die Struktur der einzelnen Nachrichtenteile angeben. Dabei kann es nun vorkommen, dass einer dieser Nachrichtenteile selbst eine multipart-message ist. D.h. ->part gibt in diesem Falle selsbt wieder ein Array von Objekten zurück. Soweit klar.

    Aber wie kann ich die Nachrichtentexte dieser verschachtelten multipart-messages mit "imap_fetchbody" abrufen?


    Vielen Dank im Vorraus!

    Christoph

  • #2
    Das dürfte helfen ;-)
    PHP-Code:
    $mbox imap_open ("{".$pop3.":110/pop3}INBOX"$user$pass);
     if(
    $mbox){
    $MC imap_check($mbox);    

    $result imap_fetch_overview($mbox,"1:{$MC->Nmsgs}",0);
    $i=1;
    foreach (
    $result as $overview) {
    $subject "";
    $header imap_header($mbox$overview->msgno);

    if(
    ereg("=?utf-8",strtolower($header->subject))){
        
    $subject utf8_decode(imap_utf8($header->subject));
        
    $subject htmlentities($subject);
        
    $from    $header->fromaddress;    
    }
    elseif(
    ereg("=?iso-8859-1",strtolower($header->subject))){
        
    $subject utf8_decode(imap_utf8($header->subject));
        
    $subject htmlentities($subject);
        
    $from    $header->fromaddress;
    }
    elseif(
    ereg("=?us-ascii",strtolower($header->subject))){
        
    //$subject = imap_mime_header_decode($header->subject);
        
    $subject utf8_decode(imap_utf8($header->subject));
        
    $subject htmlentities($subject);
    //    print_r($header);
    }
    else{
        
    $subject $header->subject;
        
    $from    $header->fromaddress;
    }

       function 
    transformHTML($str) {
       if ((
    strpos($str,"<HTML") < 0) || (strpos($str,"<html")    < 0)) {
              
    $makeHeader "<html><head><meta http-equiv=\"Content-Type\"    content=\"text/html; charset=iso-8859-1\"></head>\n";
           if ((
    strpos($str,"<BODY") < 0) || (strpos($str,"<body")    < 0)) {
               
    $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-1\">\n"$str;
       }
           return 
    $str;
     }


       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/* 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;
                   }
               } 
    // END OF WHILE
               
    // END OF MULTIPART
           
    // END OF STRUTURE
           
    return false;
       } 
    // END OF FUNCTION


       // GET TEXT BODY
       
    $dataTxt get_part($mbox$mid"TEXT/PLAIN");
       
       
    // GET HTML BODY
       
    $dataHtml get_part($mbox$mid"TEXT/HTML");
       
       if (
    $dataHtml != "") {
        
    $msgBody transformHTML($dataHtml);
           
    $mailformat "html";
       } else {
       
    $msgBody ereg_replace("\n","<br>",$dataTxt);
       
    $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);
           
    $mailformat "text";
       }
        
    // To out put the message body to the user simply print $msgBody like this.
       
       
    if ($mailformat == "text") {
           echo 
    "<html><head><title>Messagebody</title><link rel=\"STYLESHEET\" type=\"text/css\" href=\"../template/system.css\"></head><body    bgcolor=\"white\">
        <div id=\"mail\">
    $msgBody</div>
        </body></html>"
    ;
       } else {
           echo 
    ''.$msgBody// It contains all HTML HEADER tags so we don't have to make them.
       
    }

       
       
     
    imap_close($mbox); 
    Zuletzt geändert von dani_o; 05.11.2007, 13:49.
    Signatur-Text ...

    Kommentar


    • #3
      hätteste aba auch ergoogeln oder im forum hier zusammensuchen können ;-)
      Signatur-Text ...

      Kommentar

      Lädt...
      X