POP3 imap ?

crashx

Erfahrenes Mitglied
Hallöe wieder einmal.

Ich studiere schon lange an diesem Thema herum, aber ich kapiere das einfach nicht.
Die ganzen imap funktionen auf php.net verstehe ich einfach nicht.

Ich möchte ja nur, Schauen ob es neue Mails gegeben hat, von wem (email adresse), datum,
und den inhalt.

Ich hab mal begonnen im Internet zu Recherchieren und bin schon weit gekommen.
Nur ich verstehe es nicht und wenn ich es nicht verstehe, kann ich es nicht Umsetzen.

*.php
PHP:
$mbpointer = imap_open($pop3, $user, $pass);

if($mbpointer){
  echo 'Verbindung zum Mail-Postfach hergestellt!<br><br>';
  echo 'Nachrichten im Posteingang:<br><br>';
  $headers = imap_headers($mbpointer);
  
  if($headers != false){
    while(list($key, $value) = each($headers)){
      echo$value.'<br>';
    }
  }
  imap_close($mbpointer);
}else{
  echo 'Keine Verbindung zum Mail-Postfach!';
}
?>

Ausgabe:
Code:
Verbindung zum Mail-Postfach hergestellt!

Nachrichten im Posteingang:

N 1)27-Jun-2007 Aurel Itin test (4499 chars)

So weit habe ich das ja verstanden, es gibt mir die Header Informationen der Mail aus:

Mail Nr. / Datum / Absender / Subject / ?

Aber wie komme ich an die anderen Angaben? Ich bin einfach einbischen überfordert im moment weil ich es ned so ganz Kapiere.

Hoffe auf ein bischen Hilfe :)
 
Versuch es mal mit:

PHP:
 imap_body ( int imap_stream, int msg_number [, int flags] );

//oder

imap_fetchtext(imap_stream, msg_id, FT_UID);
 
@ssurfer

Das ist nett von dir, mich auf diese funktionen aufmerksam zu machen,
aber ich habe mich mit diesen funktionen Intensiv auseinander gesetzt.
Das dumme ist nur, das ich keinen Plan habe wie ich sie verwenden muss :(
 
Hast du es schonmal so probiert?

PHP:
imap_body($mbpointer, $messageid); 
/* oder */
imap_fetchtext($mbpointer, $messageid);

Du musst halt die MessageID/Mail Nr. auslesen. Mit preg_match oder sowas.


Gruß
 
OK bin ein stück weiter gekommen, aber zufrieden bin ich nicht!
Ich verstehe den teil mit dem: imap_body, imap_fetchbody, imap_fetchstructure nicht.

Wie kann ich nur den Text heraus filtern?

PHP:
<?PHP
$mbox     = imap_open($pop3, $user, $pass);
$mboxinfo = imap_mailboxmsginfo($mbox);
echo '<ul style="list-style: none; width: 360px;">';
  echo '<li style="width: 80px; float: left;">';
    echo 'MSG:NR';
  echo '</li>';
  echo '<li style="width: 180px; float: left;">';
    echo 'MSG:FROM';
  echo '</li>';
  echo '<li style="width: 100px; float: left;">';
    echo 'MSG:SUBJECT';
  echo '</li>';
  for($x = 1;$x<=$mboxinfo->Nmsgs; $x++){
    $header = imap_header($mbox,$x);
      echo '<a href="'.$_SERVER['PHP_SELF'].'?read='.trim($header->Msgno).'">';
        echo '<li style="width: 80px; float: left;">';
          echo trim($header->Msgno);
        echo '</li>';
        echo '<li style="width: 180px; float: left;">';
          echo $header->from[0]->mailbox.'@'.$header->from[0]->host;
        echo '</li>';
        echo '<li style="width: 100px; float: left;">';
          echo $header->subject;
        echo '</li>';
      echo '</a>';
      if(isset($_GET['read'])){
      	if($_GET['read'] == trim($header->Msgno)){
		  echo '<li style="width: 360px; float: left;">';
		    $body = imap_body($mbox,$x);
		    echo nl2br($body);
		  echo '</li>';
		}
	  }
  }
echo '</ul>';

?>

Aber die Ausgabe ist dan so:
Code:
This is a multi-part message in MIME format.

------=_NextPart_000_0000_01C7B98D.ED4A1110
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: 7bit



Hallo ich bin ein Text

MfG und Danke




------=_NextPart_000_0000_01C7B98D.ED4A1110

Aber ich will nur das ausgeben:

Code:
Hallo ich bin ein Text

MfG und Danke

Ich kapiers immer noch nicht :)
 
To get the full body of the message you can use this. I couldn't find this function in the docs. It looks like it is not documented.
imap_fetchtext($imap_stream,$msg_id,FT_UID);

Ich will ja nicht den Ganzen Body!

Nur die Nachricht:

Mit imap_fetchtext() erreicht man annähernd das gleiche wie mit imap_body()
und zwar das hier:
Code:
This is a multi-part message in MIME format.

------=_NextPart_000_0000_01C7B98D.ED4A1110
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: 7bit



Hallo ich bin ein Text

MfG und Danke




------=_NextPart_000_0000_01C7B98D.ED4A1110
 
Immer wenn ich es irgend wie zusammen geknorzt habe, kommt die Lösung :)

mein code:
PHP:
<?PHP
$mbox     = imap_open($pop3, $user, $pass);
$mboxinfo = imap_mailboxmsginfo($mbox);
echo '<ul class="gallileft" style="width: 540px;">';
  echo '<li style="width: 80px; float: left;">';
    echo 'MSG:NR';
  echo '</li>';
  echo '<li style="width: 160px; float: left;">';
    echo 'MSG:FROM';
  echo '</li>';
  echo '<li style="width: 140px; float: left;">';
    echo 'MSG:SUBJECT';
  echo '</li>';
  echo '<li style="width: 160px; float: left;">';
    echo 'MSG:DATE';
  echo '</li>';
  for($x = 1;$x<=$mboxinfo->Nmsgs; $x++){
    $header = imap_header($mbox,$x);
    echo '<a href="'.$_SERVER['PHP_SELF'].'?read='.trim($header->Msgno).'&uri=verwaltung&amp;nav=verwaltung&amp;dns=verwaltung" class="link4">';
      echo '<li style="width: 80px; float: left;">';
        echo trim($header->Msgno);
      echo '</li>';
      echo '<li style="width: 160px; float: left;">';
        echo $header->from[0]->mailbox.'@'.$header->from[0]->host;
      echo '</li>';
      echo '<li style="width: 140px; float: left;">';
        echo $header->subject;
      echo '</li>';
      echo '<li style="width: 160px; float: left;">';
        echo $header->MailDate;
      echo '</li>';
    echo '</a>';
    if(isset($_GET['read'])){
      if($_GET['read'] == trim($header->Msgno)){
		echo '<li style="width: 500px; float: left; border-top: 1px solid #000000;'
		      .'border-bottom: 1px solid #000000; padding: 8px 0 8px 20px;'
		      .'margin: 6px 0 6px 0;">';
		
		  $struct = imap_fetchstructure($mbox,$x);
          $parts = $struct->parts;
          $i = 0;
          if (!$parts){
            $attachment = array();
            $content = imap_body($mbox,$x);
          }else{
            $endwhile = false;
            $stack = array();
            $content = "";
            $attachment = array();
            while (!$endwhile){
              if (!$parts[$i]){
                if (count($stack) > 0){
                  $parts = $stack[count($stack)-1]["p"];
                  $i     = $stack[count($stack)-1]["i"] + 1;
                  array_pop($stack);
                }else{
                  $endwhile = true;
                }
              }
              if (!$endwhile){
                $partstring = "";
                foreach ($stack as $s) {
                  $partstring .= ($s["i"]+1) . ".";
                }
                $partstring .= ($i+1);
                if (strtoupper($parts[$i]->disposition) == "ATTACHMENT"){
                  $attachment[] = array("filename" => $parts[$i]->parameters[0]->value,
                                        "filedata" => imap_fetchbody($mbox, $x, $partstring));
                }elseif(strtoupper($parts[$i]->subtype) == "PLAIN"){
                  $content .= imap_fetchbody($mbox, $x, $partstring);
                }
              }
              if ($parts[$i]->parts){
                $stack[] = array("p" => $parts, "i" => $i);
                $parts   = $parts[$i]->parts;
                $i = 0;
              }else{
                $i++;
              }
            }
          }
          echo nl2br($content);
		echo '</li>';
	  }
    }
  }
echo '</ul>';

?>

Danke dir trozdem :)
 
Zurück