Mailinglisten-Archive |
Michael Borchers schrieb: >hallo frank, >hast du schon eine lösung gefunden? >ich arbeite z zt auch an einer art mailing liste, >die nach einem ähnlichen prinzip funktioniert. > >bisher konnte ich auch einzelne mails auslesen >und deren inhalt je nach subject zum ein- >oder austragen verwenden, >nur das säubern des headers bereitet mir noch >schwierigkeiten! > >wie sieht's bei dir aus? > > >MfG >Michael Borchers >borchers at tridem.de >0491 96 06 71 63 >Tridem Internet Services GmbH >Reimersstraße 41b >26789 Leer > > > > >>-----Ursprüngliche Nachricht----- >>Von: Frank Rust [mailto:frust at iti.cs.tu-bs.de] >>Gesendet: Mittwoch, 9. März 2005 08:36 >>An: deutschsprachige PHP-Mailingliste >>Betreff: [php] Mit PHP Emails beantworten? >> >> >> >>Gibt es ein Programmpaket mit dem ich mittels PHP Emails >>_empfangen_ und >>darauf irgendwie >>reagieren kann? Ich habe ein Umfangreiches Programmsystem >>dass über die >>Website bedient >>wird und (unter anderem) Emails aussendet. Die Leute sollen >>nun mittels >>Reply auf eine solche >>Mail Aktionen im PHP System auslösen. >> >>Gruß Frank >> >>-- >>______________________________________________________________ >>__________ >>Frank Rust, Technische Universität, Institut für Theoretische >>Informatik >>Tel.: +49 531 391 9525 Postfach 3329, D-38023 >>Braunschweig >>Fax.: +49 531 391 9529 Mühlenpfordtstr. 22-23, D-38106 >>Braunschweig >> >>-- >>** Allgemeine deutschsprachige PHP-Liste: php at phpbar.de ** >>Informationen: http://www.phpbar.de >>http://lists.phpbar.de/mailman/listinfo/php >> >> >> > > > > > Hi, habe mir inzwischen etwas programmiert. Sehr simpel, tut aber was es soll... parseMail.php: <?php // parse an incoming mail // Version 0.5, 2005/03/16 // Copyright (c) Frank Rust, TU Braunschweig (f.rust at tu-bs.de) // // This code is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This code is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // Since this is a very short Program the GNU General Public License // is not included. Please find it on the website of the Open Software // Foundation at // http://www.fsf.org/licensing/licenses/lgpl.txt // or write to the Free Software Foundation, Inc., 59 Temple Place, // Suite 330, Boston, MA 02111-1307 USA class parseMail { var $from=""; var $to=""; var $subject=""; var $received=""; var $date=""; var $message_id=""; var $content_type=""; var $part =array(); // decode a mail header function parseMail($text="") { $start=0; $lastheader=""; while (true) { $end=strpos($text,"\n",$start); $line=substr($text,$start,$end-$start); $start=$end+1; if ($line=="") break; // end of headers! if (substr($line,0,1)=="\t") { $$last.="\n".$line; } if (preg_match("/^(From:)\s*(.*)$/",$line,$matches)) { $last="from"; $$last=$matches[2]; } if (preg_match("/^(Received:)\s*(.*)$/",$line,$matches)) { $last="received"; $$last=$matches[2]; } if (preg_match("/^(To:)\s*(.*)$/",$line,$matches)) { $last="to"; $$last=$matches[2]; } if (preg_match("/^(Subject:)\s*(.*)$/",$line,$matches)) { $last="subject"; $$last=$matches[2]; } if (preg_match("/^(Date:)\s*(.*)$/",$line,$matches)) { $last="date"; $$last=$matches[2]; } if (preg_match("/^(Content-Type:)\s*(.*)$/",$line,$matches)) { $last="content_type"; $$last=$matches[2]; } if (preg_match("/^(Message-Id:)\s*(.*)$/",$line,$matches)) { $last="message_id"; $$last=$matches[2]; } } $this->from=$from; $this->received=$received; $this->to=$to; $this->subject=$subject; $this->date=$date; $this->content_type=$content_type; $this->message_id=$message_id; if (preg_match("/^multipart\/mixed;/",$content_type)) { $b=strpos($content_type,"boundary="); $boundary=substr($content_type,$b+strlen("boundary=")); $boundary=substr($boundary,1,strlen($boundary)-2); $this->multipartSplit($boundary,substr($text,$start)); } else { $this->part[0]['Content-Type']=$content_type; $this->part[0]['content']=substr($text,$start); } } // decode a multipart header function multipartHeaders($partid,$mailbody) { $text=substr($mailbody,$this->part[$partid]['start'], $this->part[$partid]['ende']-$this->part[$partid]['start']); $start=0; $lastheader=""; while (true) { $end=strpos($text,"\n",$start); $line=substr($text,$start,$end-$start); $start=$end+1; if ($line=="") break; // end of headers! if (substr($line,0,1)=="\t") { $$last.="\n".$line; } if (preg_match("/^(Content-Type:)\s*(.*)$/",$line,$matches)) { $last="c_t"; $$last=$matches[2]; } if (preg_match("/^(Content-Transfer-Encoding:)\s*(.*)$/",$line,$matches)) { $last="c_t_e"; $$last=$matches[2]; } if (preg_match("/^(Content-Description:)\s*(.*)$/",$line,$matches)) { $last="c_desc"; $$last=$matches[2]; } if (preg_match("/^(Content-Disposition:)\s*(.*)$/",$line,$matches)) { $last="c_disp"; $$last=$matches[2]; } } if ($c_t_e=="base64") { $this->part[$partid]['content']=base64_decode(substr($text,$start)); $c_t_e="8bit"; } else { $this->part[$partid]['content']=substr($text,$start); } $this->part[$partid]['Content-Type']=$c_t; $this->part[$partid]['Content-Transfer-Encoding']=$c_t_e; $this->part[$partid]['Content-Description']=$c_desc; $this->part[$partid]['Content-Disposition']=$c_disp; unset($this->part[$partid]['start']); unset($this->part[$partid]['ende']); } // we have a multipart message body // split the parts function multipartSplit($boundary,$text) { $start=0; $b_len=strlen("--".$boundary); $partcount=0; while (true) { // should have an emergency exit... $end=strpos($text,"--".$boundary,$start); if (substr($text,$end+$b_len,1)=="\n") { // '\n' => part boundary $this->part[$partcount]['start']=$end+$b_len+1; if ($partcount) { $this->part[$partcount-1]['ende']=$end-1; $this->multipartHeaders($partcount-1,$text); } $start=$end+$b_len+1; $partcount++; } else { // '--' => end boundary $this->part[$partcount-1]['ende']=$end-1; $this->multipartHeaders($partcount-1,$text); break; } } } } ?> getEmail.php: <?php // get an email from a post request and parse it using parseMail class // Version 0.1, 2005/03/16 // Copyright (c) Frank Rust, TU Braunschweig (f.rust at tu-bs.de) // require("parseMail.php"); // could be a bit more safety here: // get the contents of the uploaded email file $mailtext=file_get_contents($_FILES['postfile']['tmp_name']); // parse that file $email=new parseMail($mailtext); // show the results (or do anything useful...) print_r($email); ?> PostNewMail.php <?php // Very simple example: // receive an email file on stdin and post that file to an url // (e.g. on a Unix-like server create an entry in /etc/aliases: // phpmail: |PostNewMail.php // PostNewMail.php should be executable and have the // #!/path/to/console-php -q // in the first line. Don't forget to allow // the execution of this program to smrsh) // // Version 0.1, 2005/03/13 // Copyright (c) Frank Rust, TU Braunschweig (f.rust at tu-bs.de) // // This code is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This code is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // Since this is a very short Program the GNU General Public License // is not included. Please find it on the website of the Open Software // Foundation at // http://www.fsf.org/licensing/licenses/lgpl.txt // or write to the Free Software Foundation, Inc., 59 Temple Place, // Suite 330, Boston, MA 02111-1307 USA // create temporary file to store the mail $tmpnam=tempnam("/tmp","MAIL"); $tmpfile=fopen($tmpnam,"w"); // read mail from stdin $input=fopen("php://stdin","r"); // read complete mail and write it to tmpfile while (!feof($input)) { $line = fgets($input,4096); fwrite($tmpfile,$line); } fclose($input); fclose($tmpfile); // use cURL to post the file to the Websystem $postvars=array("postfile" => "@".$tmpnam ); $URL="http://www.mywebhost.org/getEmail.php"; $ch=curl_init($URL); $user_agent="Franks Email POSTer"; curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_VERBOSE, 0); // 1 for debugging curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $x=curl_exec($ch); $info=curl_getinfo($ch); curl_close($ch); //for debugging the console program: echo $x; print_r($info); // cleanup unlink($tmpnam); ?> -- ________________________________________________________________________ Frank Rust, Technische Universität, Institut für Theoretische Informatik Tel.: +49 531 391 9525 Postfach 3329, D-38023 Braunschweig Fax.: +49 531 391 9529 Mühlenpfordtstr. 22-23, D-38106 Braunschweig
php::bar PHP Wiki - Listenarchive