go-mailzu/lib/AmavisdEngine.class.php

123 lines
2.7 KiB
PHP
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* AmavisdEngine class
* @author Samuel Tran
* @author Jeremy Fowler
* @version 03-22-07
* @package AmavisdEngine
*
* Copyright (C) 2005 - 2007 MailZu
* License: GPL, see LICENSE
*/
/**
* Base directory of application
*/
@define('BASE_DIR', dirname(__FILE__) . '/..');
/**
* CmnFns class
*/
include_once('lib/CmnFns.class.php');
/**
* PEAR::Net_Socket Library
*/
if ($GLOBALS['conf']['app']['safeMode']) {
ini_set('include_path', ( dirname(__FILE__) . '/pear/' . PATH_SEPARATOR . ini_get('include_path') ));
include_once('pear/PEAR.php');
include_once('pear/Net/Socket.php');
}
else {
include_once 'PEAR.php';
include_once 'Net/Socket.php';
}
/**
* Provide all access/communication to Amavisd AM.PDP
*/
class AmavisdEngine {
var $socket; // Reference to socket
var $port; // Amavisd spam release port
var $connected; // Connection status
var $last_error; // Last error message
/**
* AmavisdEngine object constructor
* $param none
* $return object Amavisd object
*/
function AmavisdEngine($host) {
$this->socket = new Net_Socket();
$this->port = $GLOBALS['conf']['amavisd']['spam_release_port'];
$this->connected = false;
$this->last_error = '';
// Connect to the Amavisd Port or wait 5 seconds and timeout
$result = $this->socket->connect($host, $this->port, true, 5);
if (PEAR::isError($result)) {
$this->last_error = "Error connecting to $host:$this->port, " . $result->getMessage();
} else {
$this->connected = true;
}
}
/**
* Shutdown and close socket
* @param none
*/
function disconnect() {
$this->socket->disconnect();
}
/**
* Release message from quarantine
* @param $mail_id
* @param $secret_id
* @param $recipient
* @result response
*/
function release_message($mail_id, $secret_id, $recipient, $quar_type, $quar_loc) {
if (! $this->connected) {
return $this->last_error;
}
$in = "request=release\r\n";
$in .= "mail_id=$mail_id\r\n";
$in .= "secret_id=$secret_id\r\n";
$in .= "quar_type=$quar_type\r\n";
# If it is file-based quarantine, lets provide the filename on the host
if ( $quar_type == 'F' || quar_type == 'Z' ) {
$in .= "mail_file=$quar_loc\r\n";
}
$in .= "recipient=<$recipient>\r\n";
$in .= "\r\n";
// Sending request ...
$out = $this->socket->write($in);
if (PEAR::isError($out)) {
$this->last_error = 'Error writing to socket: ' . $out->getMessage();
return $this->last_error;
}
// Set timeout of 5 seconds
$this->socket->setTimeout(5);
// Reading response
$out = $this->socket->read(512);
if (PEAR::isError($out)) {
$this->last_error = 'Error reading from socket: ' . $out->getMessage();
return $this->last_error;
}
return $out;
}
}
?>