| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

04-11-2007, 15:28
|
|
quidam
Newbie
|
|
Registriert seit: Nov 2007
Beiträge: 1
|
|
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
Zitat:
|
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":
Zitat:
|
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
|

05-11-2007, 13:46
|
|
dani_o
PHP Senior
|
|
Registriert seit: Jun 2003
Ort: Lichtenstein/Sa.
Beiträge: 1.599
|
|
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);
__________________
Signatur-Text ...
Geändert von dani_o (05-11-2007 um 13:49 Uhr)
|

05-11-2007, 13:53
|
|
dani_o
PHP Senior
|
|
Registriert seit: Jun 2003
Ort: Lichtenstein/Sa.
Beiträge: 1.599
|
|
hätteste aba auch ergoogeln oder im forum hier zusammensuchen können ;-)
__________________
Signatur-Text ...
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|