1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
<?php
/**
* The IMP_Sentmail:: class contains all functions related to handling
* logging of sent mail and retrieving sent mail statistics.
*
* $Horde: imp/lib/Sentmail.php,v 1.16.2.2 2008/01/02 11:31:18 jan Exp $
*
* Copyright 2005-2008 The Horde Project (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
*
* @author Jan Schneider <jan@horde.org>
* @since IMP 4.2
* @package IMP
*/
class IMP_Sentmail {
/**
* Logs an attempt to send a message.
*
* @param string $action Why the message was sent, i.e. "new",
* "reply", "forward", etc.
* @param string $message_id The Message-ID.
* @param string|array $recipients The list of message recipients.
* @param boolean $success Whether the attempt was successful.
*/
function log($action, $message_id, $recipients, $success = true)
{
if (!is_array($recipients)) {
$recipients = array($recipients);
}
foreach ($recipients as $addresses) {
$addresses = IMP::bareAddress($addresses, true);
foreach ($addresses as $recipient) {
$this->_log($action, $message_id, $recipient, $success);
}
}
$this->gc();
}
/**
* Logs an attempt to send a message per recipient.
*
* @param string $action Why the message was sent, i.e. "new",
* "reply", "forward", etc.
* @param string $message_id The Message-ID.
* @param string $recipients A message recipient.
* @param boolean $success Whether the attempt was successful.
*/
function _log($action, $message_id, $recipient, $success)
{
}
/**
* Returns the most favourite recipients.
*
* @param integer $limit Return this number of recipients.
* @param array $filter A list of messages types that should be returned.
* A value of null returns all message types.
*
* @return array A list with the $limit most favourite recipients.
*/
function favouriteRecipients($limit, $filter = array('new', 'forward', 'reply', 'redirect'))
{
return array();
}
/**
* Returns the number of recipients within a certain time period.
*
* @param integer $hours Time period in hours.
* @param boolean $user Return the number of recipients for the current
* user?
*
* @return integer The number of recipients in the given time period.
*/
function numberOfRecipients($hours, $user = false)
{
return 0;
}
/**
* Garbage collect log entries with a probability of 1%.
*/
function gc()
{
/* A 1% chance we will run garbage collection during a call. */
if (rand(0, 99) == 0) {
$this->_deleteOldEntries(time() - $this->_params['threshold'] * 86400);
}
}
/**
* Deletes all log entries older than a certain date.
*
* @param integer $before Unix timestamp before that all log entries
* should be deleted.
*/
function _deleteOldEntries($before)
{
}
/**
* Attempts to return a concrete IMP_Sentmail instance based on $driver.
*
* @param string $driver The type of the concrete IMP_Sentmail subclass
* to return. The class name is based on the
* storage driver ($driver). The code is
* dynamically included.
*
* @param array $params A hash containing any additional configuration
* or connection parameters a subclass might need.
*
* @return mixed The newly created concrete IMP_Sentmail instance, or
* false on an error.
*/
function factory($driver = null, $params = null)
{
if ($driver === null) {
$driver = $GLOBALS['conf']['sentmail']['driver'];
}
if ($params === null) {
$params = Horde::getDriverConfig('sentmail', $driver);
}
$driver = basename($driver);
$class = 'IMP_Sentmail_' . $driver;
if (!class_exists($class)) {
@include dirname(__FILE__) . '/Sentmail/' . $driver . '.php';
}
if (class_exists($class)) {
$sentmail = new $class($params);
$result = $sentmail->initialize();
if (!is_a($result, 'PEAR_Error')) {
return $sentmail;
}
}
return new IMP_Sentmail();
}
}
|