Jump to content

Pipe to php script


Recommended Posts

Posted

I have tried, but can't seem to get my php pipe to work. Any suggestions.

 

#!/usr/bin/php -q
<?php
    include("./main-inc.php");

try{    
    //fetchdata from stdin
    $data = file_get_contents("php://stdin");
    
    
    // extract the body
    // NOTE: a properly formatted email's first empty line defines the separation between the headers and the message body
    list($data, $body) = explode("\n\n", $data, 2);
    
    
    // explode on new line
    $data = explode("\n", $data);
    
    // define a variable map of known headers
    $patterns = array(
      'Return-Path',
      'X-Original-To',
      'Delivered-To',
      'Received',
      'To',
      'Message-Id',
      'Date',
      'From',
      'Subject',
    
    );
    
    // define a variable to hold parsed headers
    $headers = array();
    
    // loop through data
    foreach ($data as $data_line) {
    
      // for each line, assume a match does not exist yet
      $pattern_match_exists = false;
    
      // check for lines that start with white space
      // NOTE: if a line starts with a white space, it signifies a continuation of the previous header
      if ((substr($data_line,0,1)==' ' || substr($data_line,0,1)=="\t") && $last_match) {
    
        // append to last header
        $headers[$last_match][] = $data_line;
        continue;
    
      }
    
      // loop through patterns
      foreach ($patterns as $key => $pattern) {
    
        // create preg regex
        $preg_pattern = '/^' . $pattern .': (.*)$/';
    
        // execute preg
        preg_match($preg_pattern, $data_line, $matches);
    
    
        // check if preg matches exist
        if (count($matches)) { 
    
          $headers[$pattern][] = $matches[1];
          $pattern_match_exists = true;
          $last_match = $pattern;
    
    
        }
    
    
      }
    
    
      // check if a pattern did not match for this line
      if (!$pattern_match_exists) {
        $headers['UNMATCHED'][] = $data_line;
      }
    
    
    }
    
    
    $body = $body;
    $from = $headers["From"][0];
    $to = $headers["To"][0];
    
    
    
    
    function extract_emails_from($string){
     preg_match_all("/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $string, $matches);
     return $matches[0];
    }
    
    
    $to = extract_emails_from($to);
    $from = extract_emails_from($from);
    
    $to = $to[0];
    $from = $from[0];

         .. 

}
catch(Exception $err)
{
    logToFile(PHP_ACCESS_DIR."db/errors.log", $err);
}

Posted

I have tried and tried, but the mail still keeps 'bouncing' back.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...