Email-Postfach korrekt auslesen

Ich habe ein kleines php geschrieben, welches mir ein Postfach ausliest und den Inhalt der eingegangenen emails anzeigt.
Funzt auch gut.
Das Problem ist, daß HTML-Nachrichten mit Anhängen ein ziemliches Chaos erzeugen. Wie kann ich aus den HTML-Nachrichten den reinen Text extrahieren?

Hier das Skript bisher:

<?php $mailbox = imap_open ("{post.strato.de:110/pop3}", "[email protected], "TEST") or die("Keine Verbindung bzw. Login ins Postfach");
$check = imap\_check($mailbox); $Anzahl\_Nachrichten = $check-\>Nmsgs; $Anzahl\_Neuer\_Nachrichten = $check-\>Recent; $nMessages = imap\_num\_msg($mailbox); for($i = 1; $i Date; $m\_id = $header-\>message\_id; $empfaenger = $header-\>toaddress; $betreff = $header-\>subject; $absender = $header-\>from[0]-\>personal; $absender\_email = $header-\>from[0]-\>mailbox."@".$header-\>from[0]-\>host; $body = imap\_body($mailbox,$i); $fheader = imap\_fetchheader($mailbox,$i); echo $datum; echo " "; echo $absender; echo " "; echo $absender\_email; echo " "; echo $body; echo " "; echo " "; } imap\_close($mailbox); ?\> Und hier das Ausgaberesultat einer HTML-Nachricht mit Anhang: Tue, 01 Aug 2006 08:06:42 +0200 Dirk Liesenfeld [[email protected]](mailto:[email protected]) This is a multi-part message in MIME format. --------------060207070608030604010907 Content-Type: text/plain; charset=ISO-8859-2; format=flowed Content-Transfer-Encoding: 7bit \_Diesesmal \_in \*HTML\*, jawohl. sfs Dirk. --------------060207070608030604010907 Content-Type: multipart/related; boundary="------------000205030004040909060807" --------------000205030004040909060807 Content-Type: text/html; charset=ISO-8859-2 Content-Transfer-Encoding: 7bit Diesesmal in HTML, jawohl. sfs Dirk. --------------000205030004040909060807 Content-Type: image/gif; name="logo.gif" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="logo.gif" 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 u40bi0ACAgA7 --------------000205030004040909060807-- --------------060207070608030604010907-- Und eigentlich sollte nur das dastehen: Tue, 01 Aug 2006 08:06:42 +0200 Dirk Liesenfeld [[email protected]](mailto:[email protected]) Diesesmal in HTML, jawohl. sfs Dirk.

… und außerdem müßte ich noch wissen, wie ich das emaildatum umformatieren kann in z.B. „26.10.2006“

:wink:

was Dein hmtl-Problem betrifft - such Dir mal mimedecode classen auf
http://www.phpclasses.org/

Was das Datum betrifft…

bei mir ist da irgendwie sowas wie
$actual = imap_fetch_overview($this->mbox,$i);
$this->date[$i] = substr($actual[‚0‘]->date,0,strrpos($actual[‚0‘]->date,":")+3);

sind nur codeschnipsel…
aber in der imap_fetch_overview steht das Sendedatum drin - und das umformatieren sollte ja nicht allzu schwer sein…

Ja, hat gefunzt.
War aber ein ganz schönes gefuckel…
gnnnn…

Vielen Dank für die Hilfe.

Ist das Geld schon angekommen?
:wink:

Wußte gar nicht, daß Du auch php-Aktiv bist…

Gruß,

Dirk.

Ja, hat gefunzt.
War aber ein ganz schönes gefuckel…
gnnnn…

hast Du’s geschafft mit den html-mails?
Ich hab das damals nämlich nicht so ganz auf die Reihe bekommen *g*

Vielen Dank für die Hilfe.

gerne

Ist das Geld schon angekommen?
:wink:

aaaah Du warst das *fg*
garnicht auf den Namen geschaut…
*nachschau* Bist Du des Wahnsinns??? Das ist viel zu viel zu viel zu viel!!!

Wußte gar nicht, daß Du auch php-Aktiv bist…

noch lieber als Excel sogar *g*
damit kenn ich mich nämlich ne Ecke besser aus denk ich :wink:

Grüße
Munich

hast Du’s geschafft mit den html-mails?
Ich hab das damals nämlich nicht so ganz auf die Reihe
bekommen *g*

Ja.
Siehe unten

aaaah Du warst das *fg*
garnicht auf den Namen geschaut…
*nachschau* Bist Du des Wahnsinns??? Das ist viel zu viel zu
viel zu viel!!!

Wieso, waren doch nur 30,00€.
Oder habe ich mich beim Komma vertan und dir 3000 überwiesen :wink:
Du hast mir mindestens 3 Stunden Arbeit erspart und 10€/Stunde finde ich nicht viel.

Wußte gar nicht, daß Du auch php-Aktiv bist…

noch lieber als Excel sogar *g*
damit kenn ich mich nämlich ne Ecke besser aus denk ich :wink:

DAS ist sehr gut zu wissen.
Damit muß ich nämlich auch viel machen… (wie Du siehst)

Alles Liebe,

Dirk.

##################
email.php
##################

/*
* File: example.php
* Description: Recived Mail Example
* Created: 01-03-2006
* Author: Mitul Koradia
* Email: [email protected]
* Cell : +91 9879697592
*/
include(„receivemail.class.php“);
// Create Object For reciveMail Class
$obj= new receiveMail(‚xxx‘,‚xxx‘,‚xxx‘,‚post.strato.de‘,‚pop3‘,‚110‘);
//Connect to the Mail Box
$obj->connect();
// Get Total Number of Unread Email in mail box
$tot=$obj->getTotalMails(); //Total Mails in inbox Return interger value

if ($tot != 0){

$datum = date(„d.m.Y“);
$db = mysql_connect(„rdbms.strato.de“, „xxx“, „xxx“);
mysql_select_db(„xxx“,$db);

for($i=1;$igetHeaders($i); // Get Header Info Return Array Of Headers **Key Are (subject,to,toOth,toNameOth,from,fromName)
$absender = $head[‚fromName‘];
$geschlecht = „?“;
$absender_email = $head[‚from‘];
$betreff = $head[‚subject‘];
$body = $obj->getBody($i);
$body = ereg_replace(’"’," ",$body);

$sql2=„INSERT tantrazentrum_buchung VALUES (’’,’$datum’,’$absender’,’’,’$geschlecht’,’$absender_email’,’’,’$betreff’,’$body’,’’,’’,‚1‘,’’,’’,’’,’’,’’)“;
$geschafft = mysql_db_query(‚xxx‘,$sql2);
if ($geschafft == TRUE){
$obj->deleteMails($i);
}
else{
mail(„[email protected]“, „urgent“, „Die email.php5 ist defekt. Beweg Deinen Hintern und rufe Dirk an!“, „“);
}

}
$obj->close_mailbox(); //Close Mail Box
}
?>

##################
receivemail.class.php
##################

<?php // Main ReciveMail Class File - Version 1.0 (01-03-2006)
/\* \* File: recivemail.class.php \* Description: Reciving mail With Attechment \* Version: 1.0 \* Created: 01-03-2006 \* Author: Mitul Koradia \* Email: [[email protected]](mailto:[email protected]) \* Cell : +91 9879697592 \*/ class receiveMail { var $server='post.strato.de'; var $username='xxx'; var $password='xxx'; var $marubox=''; var $email=''; function receiveMail($username,$password,$EmailAddress,$mailserver='localhost',$servertype='pop',$port='110') //Constructure { if($servertype=='imap') { if($port=='') $port='143'; $strConnect='{'.$mailserver.':'.$port. '}INBOX'; } else { $strConnect='{'.$mailserver.':'.$port. '/pop3}INBOX'; } $this-\>server = $strConnect; $this-\>username = $username; $this-\>password = $password; $this-\>email = $EmailAddress; } function connect() //Connect To the Mail Box { $this-\>marubox=imap\_open($this-\>server,$this-\>username,$this-\>password); } function getHeaders($mid) // Get Header info { $mail\_header=imap\_header($this-\>marubox,$mid); $sender=$mail\_header-\>from[0]; $sender\_replyto=$mail\_header-\>reply\_to[0]; if(strtolower($sender-\>mailbox)!='mailer-daemon' && strtolower($sender-\>mailbox)!='postmaster') { $mail\_details=array( 'from'=\>strtolower($sender-\>mailbox).'@'.$sender-\>host, 'fromName'=\>$sender-\>personal, 'toOth'=\>strtolower($sender\_replyto-\>mailbox).'@'.$sender\_replyto-\>host, 'toNameOth'=\>$sender\_replyto-\>personal, 'subject'=\>$mail\_header-\>subject, 'to'=\>strtolower($mail\_header-\>toaddress) ); } return $mail\_details; } function get\_mime\_type(&$structure) //Get Mime type Internal Private Use { $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) //Get Part Of Message Internal Private Use { if(!$structure) { $structure = imap\_fetchstructure($stream, $msg\_number); } if($structure) { if($mime\_type == $this-\>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 = $this-\>get\_part($stream, $msg\_number, $mime\_type, $sub\_structure, $prefix . ($index + 1)); if($data) { return $data; } } } } return false; } function getTotalMails() //Get Total Number off Unread Email In Mailbox { $headers=imap\_headers($this-\>marubox); return count($headers); } function GetAttech($mid,$path) // Get Atteced File from Mail { $struckture = imap\_fetchstructure($this-\>marubox,$mid); $ar=""; foreach($struckture-\>parts as $key =\> $value) { $enc=$struckture-\>parts[$key]-\>encoding; if($struckture-\>parts[$key]-\>ifdparameters) { $name=$struckture-\>parts[$key]-\>dparameters[0]-\>value; $message = imap\_fetchbody($this-\>marubox,$mid,$key+1); if ($enc == 0) $message = imap\_8bit($message); if ($enc == 1) $message = imap\_8bit ($message); if ($enc == 2) $message = imap\_binary ($message); if ($enc == 3) $message = imap\_base64 ($message); if ($enc == 4) $message = quoted\_printable\_decode($message); if ($enc == 5) $message = $message; $fp=fopen($path.$name,"w"); fwrite($fp,$message); fclose($fp); $ar=$ar.$name.","; } } $ar=substr($ar,0,(strlen($ar)-1)); return $ar; } function getBody($mid) // Get Message Body { $body = $this-\>get\_part($this-\>marubox, $mid, "TEXT/HTML"); if ($body == "") $body = $this-\>get\_part($this-\>marubox, $mid, "TEXT/PLAIN"); if ($body == "") { return ""; } return $body; } function deleteMails($mid) // Delete That Mail { imap\_delete($this-\>marubox,$mid); } function close\_mailbox() //Close Mail Box { imap\_close($this-\>marubox,CL\_EXPUNGE); } } ?\>

hast Du’s geschafft mit den html-mails?
Ich hab das damals nämlich nicht so ganz auf die Reihe
bekommen *g*

Ja.
Siehe unten

klasse - werd ich daheim evtl auch mal probieren…

viel zu viel!!!

Wieso, waren doch nur 30,00€.
Oder habe ich mich beim Komma vertan und dir 3000 überwiesen
:wink:
Du hast mir mindestens 3 Stunden Arbeit erspart und 10€/Stunde
finde ich nicht viel.

mag sein, dass ich Dir die 3h erspart hab - aber ich hab dafür nur ca 15 min investiert und dafür ist es schon sehr viel!
Aber vielen Dank trotzdem dafür :smile:

Wußte gar nicht, daß Du auch php-Aktiv bist…

noch lieber als Excel sogar *g*
damit kenn ich mich nämlich ne Ecke besser aus denk ich :wink:

DAS ist sehr gut zu wissen.
Damit muß ich nämlich auch viel machen… (wie Du siehst)

naja - ich seh nicht, was Du alles machen musst - nur dass Du hier gerade ein Problem hattest :wink:

Liebe Grüße
Munich