2009-08-02 16 views
4

Ich versuche, ein Programm einzurichten, das eine eingehende E-Mail akzeptiert und dann die "Absender" und "Nachricht" in PHP-Variablen zerlegen, die ich dann nach Bedarf manipulieren kann, aber ich bin nicht sicher, wo ich anfangen soll.php email piping

Ich habe bereits die E-Mail-Adresse an die PHP-Datei in Frage geleitet (über cPanel)

Antwort

2

beginnen mit:

$lines = explode("\n",$message_data); 
$headers = array(); 
$body = ''; 

$in_body = false; 

foreach($lines as $line) 
{ 
    if($in_body) 
    { 
      $body .= $line; 
    } 
    elseif($line == '') 
    { 
      $in_body = true; 
    } 
    else 
    { 
      list($header_name,$header_value) = explode(':',$line,2); 
      $headers[$header_name] = $header_body; 
    } 
} 

// now $headers is an array of all headers and you could get the from address via $headers['From'] 
// $body contains just the body 

Ich schrieb nur, dass aus der Spitze von meinem Kopf; habe nicht auf Syntax oder Fehler getestet. Nur ein Ausgangspunkt.

2

Werfen Sie einen Blick auf die eZ-Komponenten ezcMailParser Klasse. Sie müssen eine Schnittstelle implementieren - ezcMailParserSet - um es zu verwenden.

+0

Ich mag diese Lösung besser als meine eigene – Josh

2

Hier arbeitet Lösung

#!/usr/bin/php -q 
<?php 
// read from stdin 
$fd = fopen("php://stdin", "r"); 
$email = ""; 
while (!feof($fd)) { 
$email .= fread($fd, 1024); 
} 
fclose($fd); 

// handle email 

$lines = explode("\n", $email); 

// empty vars 

$from = ""; 
$subject = ""; 
$headers = ""; 
$message = ""; 
$splittingheaders = true; 

for ($i=0; $i < count($lines); $i++) { 
if ($splittingheaders) { 
// this is a header 
$headers .= $lines[$i]."\n"; 
// look out for special headers 
if (preg_match("/^Subject: (.*)/", $lines[$i], $matches)) { 
$subject = $matches[1]; 
} 
if (preg_match("/^From: (.*)/", $lines[$i], $matches)) { 
$from = $matches[1]; 
} 
} else { 
// not a header, but message 
$message .= $lines[$i]."\n"; 
} 

if (trim($lines[$i])=="") { 
// empty line, header section has ended 
$splittingheaders = false; 
} 
} 
echo $from; 
echo $subject; 
echo $headers; 
echo $message; 
?> 

Arbeiten wie ein Charme.

+0

kann ich so unhöflich sein, um Sie zu bitten, meine Frage zu überprüfen: http://stackoverflow.com/questions/12619056/passing-paremeters-from-php-email-piping , brauchen Sie nur Hilfe, um die Nachricht von allen Details, die gesendet werden, herauszufiltern. Tausend Dank. – Smudger