Riko: IMAP eMail Body als Plain-Text

Hallo,

habe mir was zusammengbaut um mein eMail-Postfach online auflisten zu lassen, siehe:

$mbox = imap_open("{$mailserver}INBOX",$username,$password);

for ($i = 1; $i <= imap_num_msg($mbox); $i++)
{
  $header = imap_headerinfo($mbox, $i, 80, 80);
  $subject= $header->fetchsubject;

$messageBody = imap_body($mbox, $i);

echo "Nr.<b>".$i."</b><br>".$subject."<br>".$messageBody."<br><br>";
 }

Das klappt auch prima. Allerdings gibt es Probleme, wenn mir jemand eine eMail mit HTML-Inhalt sendet, dann wird mein ganzes Layout zerstossen :-((
Wie kann ich das realisieren, das der eMail-Body nur als Plain-Text angezeigt wird - Bilder und co interessieren mich eh nicht, ich will nur die ersten 500 Zeichen des Textes ausgeben.

Danke für Euren Rat,

Riko

  1. Holladiewaldfee,

    Wie kann ich das realisieren, das der eMail-Body nur als Plain-Text angezeigt wird - Bilder und co interessieren mich eh nicht, ich will nur die ersten 500 Zeichen des Textes ausgeben.

    Lösung 1: Alle Sonderzeichen konvertieren: htmlspecialchars()
    Lösung 2: Alle Tags rausschmeissen strip_tags() oder passender RegExp

    Ciao,

    Harry

    --
      Hä? Was? Signatur?! Kann man das essen?
    1. Hallo Harry,

      habe den passenden RegExp gefunden:

      preg_match_all("=<body[^>]*>(.*)</body>=siU", $messageBody, $a);
      $messageBody = strip_tags($a[1][0]);

      So klappts.
      Kannst Du mir evtl noch weiter helfen.
      Einiger Header-Daten lasse ich so auswerten:

      $from = $header->from;
          foreach ($from as $id => $object)
          {
             $name = $object->personal;
             $email = $object->mailbox . "@" . $object->host;
          }

      $subject = $header->fetchsubject;
      $date = $header->udate;
      $messageBody = imap_body($mbox, $i);

      Das ist auch ok - nur wenn Sonderzeichen im Subjekt vorkommen, werden die irgendwie "komisch" umgebaut - jedenfalls sagt mir das nichts. Sieht dann so aus:

      =?iso-8859-1?Q?:_D=FClmen?=

      eigentlich sollte das Dülmen heißen ????

      Danke schon jetzt für Deine Hilfe!

      Riko

      1. Holladiewaldfee,

        =?iso-8859-1?Q?:_D=FClmen?=

        Tja äh, das ist codiert. Vorne dran steht der Zeichensatz iso-8859-1, hinten dran das codierte Wort. Die Codierung ist quoted-printable, sollte aber im Header angegeben sein (Content-Transfer-Encoding: quoted-printable;).

        Jetzt kannst Du mit Hilfe eines geeigneten RegExp den String auseinander nehmen und dann wieder mit Hilfe einer geeigneten Zeichentabelle die codierten Zeichen ins richtige Format bringen (codiertes Format ist =HH, H:0-9A-F)-

        Ciao,

        Harry

        --
          Hä? Was? Signatur?! Kann man das essen?