> Its a PHP simple script: 
> 
> #!/usr/bin/php
> <?php
> print_r("action=PERMIT\n\n");
> ?> 


As Wietse stated, the policy server is designed to be recycled to avoid a 
script start up expense for each email. I created this in PHP before deciding 
to use a milter instead. Here is an example of how i was able to get PHP to 
process multiple emails before exiting the script.


#!/usr/bin/php
<?php
#
#   Install Script At
#   /usr/libexec/postfix/<POLICY_SCRIPT_NAME>
#
#   Postfix Creates Socket At
#   /var/spool/postfix/private/<POLICY_SERVICE_NAME>
#
#   master.cf:
#   <POLICY_SERVICE_NAME>   unix   -   n   n   -   0   spawn user=<LINUX_USER> 
argv=/usr/libexec/postfix/<POLICY_SCRIPT_NAME>
#
#   main.cf:
#   <POLICY_SERVICE_NAME>_time_limit = 3600
#   smtpd_recipient_restrictions =
#      check_policy_service unix:private/<POLICY_SERVICE_NAME>
#
set_time_limit(0);
ignore_user_abort(true);
stream_set_timeout(STDIN, 30);

while (true) {
        $buffer = array();
        while (true) {
                $line = trim(fgets(STDIN));
                if (connection_status() == 1) exit(0);
                if ($line == "") break;
                $key = "";
$value = "";
                if (strpos($line, "=")) list($key, $value) = explode("=", 
$line, 2);
                if ($key) $buffer[$key] = $value;
        }
        processInput($buffer);
        unset($buffer);
}

function allow () {
        echo "action=dunno" . PHP_EOL;
        echo PHP_EOL;
        return null;
}

function reject ($reason = "Policy Violation") {
        echo "action=550 $reason" . PHP_EOL;
        echo PHP_EOL;
        return null;
}

function noreply () {
        echo PHP_EOL;
        return null;
}

function processInput (&$buffer) {
        if (count($buffer) < 1) return noreply();

        # Example To Reject
        if (isset($buffer['recipient']) && $buffer['recipient'] == 
"u...@example.com") return reject("User not accepting email.");

        # Accept Email
        return allow();
}
?>

Reply via email to