MTAなどからキックしたエラーメールを、phpで標準入力から受け取って、メールアドレスを抽出して、emailリストから削除したりする際の処理のサンプル。

require_once('Mail/mimeDecode.php');

$params['include_bodies'] = true;
$params['decode_bodies']  = true;
$params['decode_headers'] = true;
$params['input'] = file_get_contents("php://stdin");
$params['crlf'] = "\r\n";

$structure = Mail_mimeDecode::decode($params);
if( !count($structure->headers) ){
  trigger_error('invalid email format');
  exit;
}

$body = array();
if( isset($structure->parts) &&  is_array($structure->parts) ){
  foreach($structure->parts as $part){
    if(!isset($part->body) || !$part->body){
      continue;
    }
    if(isset($part->ctype_parameters['charset']) && $part->ctype_parameters['charset']){
      $body[] = mb_convert_encoding(
        $part->body,
        "UTF-8",
        $part->ctype_parameters['charset']
      );
    }else{
      $body[] = $part->body;
    }
  }
}else{
  $body[] = mb_convert_encoding(
    $structure->body,
    "UTF-8",
    $structure->ctype_parameters['charset']
  );
  $body[] = $structure->body;
}

$email = false;
foreach($body as $b){
  if($str = getemail($b)){
    $email = $str;
  }
}

if($email){
 // エラーメールアドレス$emailに対する処理
}

exit;

function getemail($body){
  $email = false;
  $regex  = "[-!#$%&\'*+\\./0-9A-Z^_`a-z{|}~]";
  $regex .= "+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]";
  $regex .= "+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]";
  $regex .= "+";
  switch (true) {
    case (eregi("To:[ \t]*([^\n]+)",                      $body, $lineMatch)):
    case (eregi("Final-Recipient: RFC822;[ \t]*([^\n]+)", $body, $lineMatch)):
    case (eregi("<[ \t]*([^\n]+)>: user unknown",         $body, $lineMatch)):
      eregi($regex, $lineMatch[1], $strMatch);
      $email = $strMatch[0];
      break;
    case (eregi("次のあて先へのメッセージはエラーのため送信できませんでした", $body, $lineMatch)):
      eregi("<[ \t]*([^\n]+)>", $body, $regs);
      eregi($regex, $lineMatch[1], $strMatch);
      $email = $strMatch[0];
      break;
    default:
      break;
  }
  return $email;
}