2009-08-02 3 views
4

Im пытается настроить программу, которая будет принимать входящую электронную почту, а затем разбивать «отправителя» и «сообщение» на переменные php, которые затем я могу манипулировать по мере необходимости, но я не уверен, с чего начать.php email piping

Я уже адрес электронной почты, который поступает в файл PHP в вопросе (через CPanel)

ответ

2

Начать с:

$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 

Я просто написал, что от верхней части головы; не тестировались на синтаксис или ошибки. Просто отправная точка.

2

Посмотрите на класс eZ Components ezcMailParser класс. Вам понадобится реализовать интерфейс - ezcMailParserSet - использовать его.

+0

Мне нравится это решение лучше, чем у меня – Josh

2

Здесь рабочий раствор

#!/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; 
?> 

работает как шарм.

+0

Могу ли я быть таким грубым, чтобы попросить вас проверить мой вопрос: http://stackoverflow.com/questions/12619056/passing-paremeters-from-php-email-piping , просто нужна некоторая помощь, отфильтровывающая сообщение из всех деталей, которые отправляются через. Бесконечно благодарен. – Smudger