go-mailzu/lib/AmavisdEngine.class.php

128 lines
2.7 KiB
PHP
Raw Normal View History

2008-12-10 14:33:43 +01:00
<?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');
2008-12-10 14:33:43 +01:00
/**
* 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' ) {
2008-12-10 14:33:43 +01:00
$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;
}
}
?>