package.xml100644 764 144 14466 100644 6250 Mail_Mbox pear.php.net Read and modify Unix MBOXes It can split messages inside a Mbox, return the number of messages, return, update or remove an specific message or add a message on the Mbox. Roberto Berto darkelder darkelder@php.net yes Christian Weiske cweiske cweiske@php.net yes 2009-11-11 0.6.3 0.6.2 beta beta LGPL - Fix bug: "From " lines were escaped midst of text, which violates the spec 4.3.3 1.4.1 0.6.3 0.6.2 beta beta 2009-11-11 - Fix bug: "From " lines were escaped midst of text, which violates the spec 0.6.2 0.6.2 beta beta 2009-11-10 - Fix bug #16758: Messages split incorrectly 0.6.1 0.6.0 beta beta 2009-10-09 - Fix bug #16668: Mbox doesn't work in suid/sgid scripts [vaceletm] 0.6.0 0.6.0 beta beta 2009-08-02 - Implement request #16487: Insert on new box throws warning [cweiske] 0.5.2 0.5.1 beta beta 2009-08-02 - Fix bug #15559: Inserting new message to a Mbox is not guaranteed to produce a valid Mbox [cweiske] 0.5.1 0.5.1 beta beta 2006-08-01 - Use copy/unlink internally instead of copying the file bit-by-bit - Added append() method since it's faster than the old insert() - Added autoReload property to make adding many messages faster 0.5.0 0.5.0 beta beta 2006-06-23 - Use class features (one mbox per instance) - Broke BC - Checks for file modification, so that mbox doesn't get corrupt. 0.3.0 0.3.0 beta beta 2004-11-01 o improved _process() speed to read line per line instead of byte per byte. (Joern) 0.2.0 0.2.0 alpha alpha 2004-10-06 o fixed mbox::size() bug that have never return 0 (Roger Keays) o mbox::remove() now accept arrays on $message param as well (Roger Keays) o declarated all vars to skip php warnings on high warning levels (Roger Keays) o some minor spelling errors (Roger Keays) o fwrite must use '===' false instead of !fwrite (Roger Keays) 0.1.5 0.1.5 alpha alpha 2002-12-29 o Security fix (changed umask on temp files) o Improved stylistcs with new Jon Parise patch o Fixed error on license at project.xml (it isnt really PHP license, it is LGPL) 0.1.4 0.1.4 alpha alpha 2002-12-28 o Joined mbox_test.php and mbox.php 0.1.3 0.1.3 alpha alpha 2002-12-28 o Changed Jon Parise stylistics things Mail_Mbox-0.6.3/Mail/Mbox.php100644 764 144 60132 100644 10733 * @author Christian Weiske * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 * @version CVS: $Id: Mbox.php 290486 2009-11-10 20:42:51Z cweiske $ * @link http://pear.php.net/package/Mail_Mbox */ require_once 'PEAR.php'; /** * The file has been modified since it has been opened. * You should close and re-open it. */ define('MAIL_MBOX_ERROR_MODIFIED', 2101); /** * The mail mbox file doesn't exist. */ define('MAIL_MBOX_ERROR_FILE_NOT_EXISTING', 2102); /** * There is no message with the given number. */ define('MAIL_MBOX_ERROR_MESSAGE_NOT_EXISTING', 2103); /** * No permission to access the file. */ define('MAIL_MBOX_ERROR_NO_PERMISSION', 2104); /** * The file cannot be opened. */ define('MAIL_MBOX_ERROR_CANNOT_OPEN', 2105); /** * The file cannot be closed due to some strange things. */ define('MAIL_MBOX_ERROR_CANNOT_CLOSE', 2106); /** * The file cannot be read. */ define('MAIL_MBOX_ERROR_CANNOT_READ', 2107); /** * Failed to create a temporary file. */ define('MAIL_MBOX_ERROR_CANNOT_CREATE_TMP', 2108); /** * The file cannot be written. */ define('MAIL_MBOX_ERROR_CANNOT_WRITE', 2109); /** * The file is not open. */ define('MAIL_MBOX_ERROR_NOT_OPEN', 2110); /** * The resource isn't valid anymore. */ define('MAIL_MBOX_ERROR_NO_RESOURCE', 2111); /** * Message is invalid and would trash the file */ define('MAIL_MBOX_ERROR_MSG_INVALID', 2112); /** * Class to read mbox mail files. * * An mbox mail file is contains plain emails concatenated in one * big file. Since each mail starts with "From ", and ends with a newline, * they can be separated from each other. * * This class takes a mbox filename in the constructor, generates an * index where the mails start and end when calling open() and returns * single mails with get(), using the positions in the index. * * With the help of this class, you also can add(), remove() and update() * messages in the mbox file. When calling one of this methods, the class * checks if the file has been modified since the index was created - * changing the file with the wrong positions in the index would very likely * corrupt it. * This check is not done when retrieving single messages via get(), as this * would slow down the process if you retrieve thousands of mails. You can, * however, call hasBeenModified() before using get() to check for modification * yourself. If the method returns true, you should close() and re-open() the * file. * * If something strange happens and you don't know why, activate debugging with * setDebug(true). You also can modify the temporary directory in which changed * mboxes are stored when adding/removing/modifying by using setTmpDir('/path/'); * * See @link tags for specifications. * * @category Mail * @package Mail_Mbox * @author Roberto Berto * @author Christian Weiske * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 * @link http://pear.php.net/package/Mail_Mbox * @link http://en.wikipedia.org/wiki/Mbox * @link http://www.qmail.org/man/man5/mbox.html */ class Mail_Mbox extends PEAR { /** * File resource / handle * * @var resource * @access protected */ var $_resource = null; /** * Message index. Each mail has its own subarray, * which contains the start position and end position * as first and second subindex. * * @var array * @access protected */ var $_index = null; /** * Timestamp at which the file has been modified last. * * @var int * @access protected */ var $_lastModified = null; /** * Debug mode * * Set to true to turn on debug mode. * * @var bool * @access public * @see setDebug() * @see getDebug() */ var $debug = false; /** * Directory in which the temporary mbox files are created. * Even if it's a unix directory, it does work on windows as * the only function it's used in is tempnam which automatically * chooses the right temp directory if this here doesn't exist. * So this variable is for special needs only. * * @var string * @access public * @see getTmpDir() * @see setTmpDir() */ var $tmpdir = '/tmp'; /** * Determines if the file is automatically re-opened and its * structure is parsed after modifying it. Setting this to false * makes you responsible for calling open() by hand, but is * *a lot* faster when appending many messages. * * @var bool * @access public */ var $autoReopen = true; /** * Create a new Mbox class instance. * After creating it, you should use open(). * * @param string $file Filename to open. * * @access public */ function Mail_Mbox($file) { $this->_file = $file; } /** * Open the mbox file * * Also, this function will process the Mbox and create a cache * that tells each message start and end bytes. * * @return boolean|PEAR_Error True if all went ok, PEAR_Error on failure * @access public */ function open($create = false) { // check if file exists else return pear error if (!is_file($this->_file)) { if ($create) { $ret = $this->_create(); if (PEAR::isError($ret)) { return $ret; } } else { return PEAR::raiseError( 'Cannot open the mbox file "' . $this->_file . '": file does not exist.', MAIL_MBOX_ERROR_FILE_NOT_EXISTING ); } } // opening the file $this->_lastModified = filemtime($this->_file); $this->_resource = fopen($this->_file, 'r'); if (!is_resource($this->_resource)) { return PEAR::raiseError( 'Cannot open the mbox file: maybe without permission.', MAIL_MBOX_ERROR_NO_PERMISSION ); } // process the file and get the messages bytes offsets $this->_process(); return true; } /** * Creates the file * * @return boolean True if it was created, false if it already * existed. PEAR_Error in case it could not * be created. * * @access protected */ function _create() { if (is_file($this->_file)) { return false; } //We should maybe try to check if the directory // is writable here. But that's too much fuss for now. touch($this->_file); if (is_file($this->_file)) { return true; } //error return PEAR::raiseError( 'File could not be created', MAIL_MBOX_ERROR_CANNOT_WRITE ); } /** * Re-opens the file and parses the messages again. * Used by other methods to be able to be able to prevent * re-opening the file. * * @return mixed See open() for return values. Returns true if * $this->autoReopen is false. * @access protected */ function _reopen() { if ($this->autoReopen) { return $this->open(); } return true; } /** * Close a Mbox * * Close the Mbox file opened by open() * * @return mixed true on success, else PEAR_Error * @access public */ function close() { if (!is_resource($this->_resource)) { return PEAR::raiseError( 'Cannot close the mbox file because it was not open.', MAIL_MBOX_ERROR_NOT_OPEN ); } if (!fclose($this->_resource)) { return PEAR::raiseError( 'Cannot close the mbox, maybe file is being used (?)', MAIL_MBOX_ERROR_CANNOT_CLOSE ); } return true; } /** * Get number of messages in this mbox * * @return int Number of messages on Mbox (starting on 1, * 0 if no message exists) * @access public */ function size() { if ($this->_index !== null) { return sizeof($this->_index); } else { return 0; } } /** * Get a message from the mbox * * Note: Message numbers start from 0. * * @param int $message The number of the message to retrieve * * @return string Return the message, PEAR_Error on error * @access public */ function get($message) { // checking if we have bytes locations for this message if (!is_array($this->_index[$message])) { return PEAR::raiseError( 'Message does not exist.', MAIL_MBOX_ERROR_MESSAGE_NOT_EXISTING ); } // getting bytes locations $bytesStart = $this->_index[$message][0]; $bytesEnd = $this->_index[$message][1]; // a debug feature to show the bytes locations if ($this->debug) { printf("%08d=%08d
", $bytesStart, $bytesEnd); } if (!is_resource($this->_resource)) { return PEAR::raiseError( 'Mbox resource is not valid. Maybe you need to re-open it?', MAIL_MBOX_ERROR_NO_RESOURCE ); } // seek to start of message if (fseek($this->_resource, $bytesStart) == -1) { return PEAR::raiseError( 'Cannot read message bytes', MAIL_MBOX_ERROR_CANNOT_READ ); } if ($bytesEnd - $bytesStart <= 0) { return PEAR::raiseError( 'Message byte length is negative', MAIL_MBOX_ERROR_CANNOT_READ ); } // reading and returning message // (bytes to read = difference of bytes locations) $msg = fread($this->_resource, $bytesEnd - $bytesStart); return $this->_unescapeMessage($msg); } /** * Remove a message from Mbox and save it. * * Note: messages start with 0. * * @param int $message The number of the message to remove, or * array of message ids to remove * * @return mixed Return true else PEAR_Error * @access public */ function remove($message) { if ($this->hasBeenModified()) { return PEAR::raiseError( 'File has been modified since loading. Re-open the file.', MAIL_MBOX_ERROR_MODIFIED ); } // convert single message to array if (!is_array($message)) { $message = array($message); } // checking if we have bytes locations for this message foreach ($message as $msg) { if (!isset($this->_index[$msg]) || !is_array($this->_index[$msg]) ) { return PEAR::raiseError( 'Message ' . $msg . 'does not exist.', MAIL_MBOX_ERROR_MESSAGE_NOT_EXISTING ); } } // changing umask for security reasons $umaskOld = umask(077); // creating temp file $ftempname = tempnam($this->tmpdir, 'Mail_Mbox'); // returning to old umask umask($umaskOld); $ftemp = fopen($ftempname, 'w'); if ($ftemp === false) { return PEAR::raiseError( 'Cannot create a temp file "' . $ftempname . '".', MAIL_MBOX_ERROR_CANNOT_CREATE_TMP ); } // writing only undeleted messages $messages = $this->size(); for ($x = 0; $x < $messages; $x++) { if (in_array($x, $message)) { continue; } $messageThis = $this->_escapeMessage($this->get($x)); if (is_string($messageThis)) { fwrite($ftemp, $messageThis, strlen($messageThis)); } } // closing file $this->close(); fclose($ftemp); return $this->_move($ftempname, $this->_file); } /** * Update a message * * Note: messages start with 0. * * @param int $message The number of Message to update * @param string $content The new content of the Message * * @return mixed Return true if all is ok, else PEAR_Error * @access public */ function update($message, $content) { if (!$this->_isValid($content)) { return PEAR::raiseError( 'Message is invalid', MAIL_MBOX_ERROR_MSG_INVALID ); } if ($this->hasBeenModified()) { return PEAR::raiseError( 'File has been modified since loading. Re-open the file.', MAIL_MBOX_ERROR_MODIFIED ); } // checking if we have bytes locations for this message if (!is_array($this->_index[$message])) { return PEAR::raiseError( 'Message does not exist.', MAIL_MBOX_ERROR_MESSAGE_NOT_EXISTING ); } // creating temp file $ftempname = tempnam($this->tmpdir, 'Mail_Mbox'); $ftemp = fopen($ftempname, 'w'); if ($ftemp === false) { return PEAR::raiseError( 'Cannot create temp file "' . $ftempname . '" .', MAIL_MBOX_ERROR_CANNOT_CREATE_TMP ); } $messages = $this->size(); for ($x = 0; $x < $messages; $x++) { if ($x == $message) { $messageThis = $content; } else { $messageThis = $this->get($x); } if (is_string($messageThis)) { $messageThis = $this->_escapeMessage($messageThis); fwrite($ftemp, $messageThis, strlen($messageThis)); } } // closing file $this->close(); fclose($ftemp); return $this->_move($ftempname, $this->_file); } /** * Insert a message * * PEAR::Mail_Mbox will insert the message according its offset. * 0 means before the actual message 0. 3 means before the message 3 * (Remember: message 3 is the fourth message). The default is put * AFTER the last message (offset = null). * * @param string $content The content of the new message * @param int $offset Before the offset. Default: last message (null) * * @return mixed Return true else PEAR_Error object * @access public */ function insert($content, $offset = null) { if (!$this->_isValid($content)) { return PEAR::raiseError( 'Message is invalid', MAIL_MBOX_ERROR_MSG_INVALID ); } if ($this->hasBeenModified()) { return PEAR::raiseError( 'File has been modified since loading. Re-open the file.', MAIL_MBOX_ERROR_MODIFIED ); } // optimize insert() to use append whenever possible if ($offset < 0 || $offset == $this->size() || $this->size() == 0) { return $this->append($content); } // creating temp file $ftempname = tempnam($this->tmpdir, 'Mail_Mbox'); $ftemp = fopen($ftempname, 'w'); if ($ftemp === false) { return PEAR::raiseError( 'Cannot create temp file "' . $ftempname . '".', MAIL_MBOX_ERROR_CANNOT_CREATE_TMP ); } // writing only undeleted messages $messages = $this->size(); $content = $this->_escapeMessage($content); if ($messages == 0 && $offset !== null) { fwrite($ftemp, $content, strlen($content)); } else { for ($x = 0; $x < $messages; $x++) { if ($offset !== null && $x == $offset) { fwrite($ftemp, $content, strlen($content)); } $messageThis = $this->_escapeMessage($this->get($x)); if (is_string($messageThis)) { fwrite($ftemp, $messageThis, strlen($messageThis)); } } } if ($offset === null) { fwrite($ftemp, $content, strlen($content)); } // closing file $this->close(); fclose($ftemp); return $this->_move($ftempname, $this->_file); } /** * Appends a message at the end of the file. * * This method is also used by insert() since it's faster. * * @param string $content The content of the new message * * @return mixed Return true else PEAR_Error object * @access public */ function append($content) { if (!$this->_isValid($content)) { return PEAR::raiseError( 'Message is invalid', MAIL_MBOX_ERROR_MSG_INVALID ); } $this->close(); $content = $this->_escapeMessage($content); $fp = fopen($this->_file, 'a'); if ($fp === false) { return PEAR::raiseError( 'Cannot open file "' . $this->_file . '" for appending.', MAIL_MBOX_ERROR_CANNOT_OPEN ); } if (fwrite($fp, $content, strlen($content)) === false) { return PEAR::raiseError( 'Cannot write to file "' . $this->_file. '".', MAIL_MBOX_ERROR_CANNOT_WRITE ); } return $this->_reopen(); } /** * Checks if the given message is valid. * If it was invalid and we'd add it to the file, * it would get unreadable * * @param string $content Message to be added or updated * * @return boolean True if it is valid, false if not */ function _isValid($content) { if (substr($content, 0, 5) != 'From ') { return false; } return true; } /** * Move a file to another. * * Used internally to move the content of the temp file to the mbox file. * Note that we can't use rename() internally, as it behaves very, very * strange on windows. * * @param string $ftempname Source file - will be removed * @param string $filename Output file * * @return boolean|PEAR_Error True if everything went fine, PEAR_Error when * an error happened. * @access protected */ function _move($ftempname, $filename) { if (!copy($ftempname, $filename)) { return PEAR::raiseError( 'Cannot copy "' . $ftempname . '" to "' . $filename . '".', MAIL_MBOX_ERROR_CANNOT_WRITE ); } unlink($ftempname); // open another resource and substitute it to the old one $this->_file = $filename; return $this->_reopen(); } /** * Process the Mbox * * Put start bytes and end bytes of each message into _index array * * @return boolean|PEAR_Error True if all went ok, PEAR_Error on failure * @access protected */ function _process() { $this->_index = array(); // sanity check if (!is_resource($this->_resource)) { return PEAR::raiseError( 'Resource is not valid. Maybe the file has not be opened?', MAIL_MBOX_ERROR_NOT_OPEN ); } // going to start if (fseek($this->_resource, 0) == -1) { return PEAR::raiseError( 'Cannot read mbox', MAIL_MBOX_ERROR_CANNOT_READ ); } // current start byte position $start = 0; // last start byte position $laststart = 0; // there aren't any message $hasmessage = false; while ($line = fgets($this->_resource, 4096)) { // if line start with "From ", it is a new message if (0 === strncmp($line, 'From ', 5)) { // save last start byte position $laststart = $start; // new start byte position is the start of the line $start = ftell($this->_resource) - strlen($line); // if it is not the first message add message positions if ($start > 0) { $this->_index[] = array($laststart, $start - 1); } else { // tell that there is really a message on the file $hasmessage = true; } } } // if there are just one message, or if it's the last one, // add it to messages positions if (($start == 0 && $hasmessage === true) || ($start > 0)) { $this->_index[] = array($start, ftell($this->_resource)); } return true; } /** * Quotes "From " lines in the midst of the message. * And quoted "From " lines, too :) * Also appends the trailing newline. * After escaping, the message can be written to file. * * @param string $message Message content * * @return string Escaped message * * @access protected * @see _unescapeMessage() */ function _escapeMessage($message) { if (substr($message, -1) == "\n") { $message .= "\n"; } else { $message .= "\n\n"; } return preg_replace( "/\n([>]*From )/", "\n>$1", $message ); } /** * Removes quoted "From " lines from the message * * @param string $message Message content * * @return string Unescaped message * * @access protected * @see _escapeMessage() */ function _unescapeMessage($message) { return preg_replace( "/\n>([>]*From )/", "\n$1", //the -1 drops the last newline substr($message, 0, -1) ); } /** * Checks if the file was modified since it has been loaded. * If this is true, the file needs to be re-opened. * * @return bool True if it has been modified. * @access public */ function hasBeenModified() { return filemtime($this->_file) > $this->_lastModified; } /* * Dumb getter and setter */ /** * Set the directory for temporary files. * * @param string $tmpdir The new temporary directory * * @return mixed True if all is ok, PEAR_Error if $tmpdir * is a dir but not writable * * @see Mail_Mbox::$tmpdir */ function setTmpDir($tmpdir) { if (is_dir($tmpdir) && !is_writable($tmpdir)) { return PEAR::raiseError( '"' . $tmpdir . '" is not writable.', MAIL_MBOX_ERROR_CANNOT_WRITE ); } else { $this->tmpdir = $tmpdir; return true; } } /** * Returns the temporary directory * * @return string The temporary directory */ function getTmpDir() { return $this->tmpdir; } /** * Set the debug flag * * @param bool $debug If debug is on or off * * @return void * @see Mail_Mbox::$debug */ function setDebug($debug) { $this->debug = (bool)$debug; } /** * Returns the debug flag setting * * @see Mail_Mbox::$debug * * @return bool If debug is enabled. */ function getDebug() { return $this->debug; } /** * Sets if the mbox is reloaded after modification * automatically. * * @param bool $autoReopen If the mbox is reloaded automatically * * @return void * @see Mail_Mbox::$autoReopen */ function setAutoReopen($autoReopen) { $this->autoReopen = (bool)$autoReopen; } /** * Returns the automatically reopening setting * * @return bool If the mbox is reloaded automatically. * * @see Mail_Mbox::$autoReopen */ function getAutoReopen() { return $this->autoReopen; } } ?> Mail_Mbox-0.6.3/examples/demobox100644 764 144 7764 100644 11625 From - Thu Jun 22 18:09:01 2006 X-Account-Key: account4 X-UIDL: UID20394-1133961700 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: X-Original-To: cweiske@cweiske.de Delivered-To: cweiske@cweiske.de X-Greylist: delayed 1778 seconds by postgrey-1.21 at d80-237-146-62.dds.hosteurope.de; Thu, 22 Jun 2006 18:07:43 CEST Received: from fallback-mx1.atl.registeredsite.com (fallback-mx1.atl.registeredsite.com [64.224.219.95]) by mail.cweiske.de (Postfix) with ESMTP id 92DF53F8A003 for ; Thu, 22 Jun 2006 18:07:43 +0200 (CEST) Received: from mail24.atl.registeredsite.com (mail24.atl.registeredsite.com [216.247.37.44]) by fallback-mx1.atl.registeredsite.com (8.12.11.20060308/8.12.11) with ESMTP id k5MFZecD006152 for ; Thu, 22 Jun 2006 11:35:40 -0400 Received: from imta01a2.registeredsite.com (imta01a2.registeredsite.com [64.225.255.10]) by mail24.atl.registeredsite.com (8.12.11.20060308/8.12.11) with ESMTP id k5MFZaUT012752 for ; Thu, 22 Jun 2006 11:35:36 -0400 Received: from [10.0.0.27] ([207.191.201.224]) by imta01a2.registeredsite.com with ESMTP id <20060622153536.OUNZ4714.imta01a2.registeredsite.com@[10.0.0.27]> for ; Thu, 22 Jun 2006 11:35:36 -0400 Message-ID: <449AB8C7.1000104@abcdefg-test.com> Date: Thu, 22 Jun 2006 10:35:35 -0500 From: Jay Vavra User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060516 Thunderbird/1.5.0.4 Mnenhy/0.7.4.0 MIME-Version: 1.0 To: cweiske@cweiske.de Subject: This is the first message Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit My own hands[TM] From - Thu Jun 22 22:10:17 2006 X-Account-Key: account4 X-UIDL: UID20419-1133961700 X-Mozilla-Status: 0000 X-Mozilla-Status2: 00000000 Return-Path: X-Original-To: cweiske@cweiske.de Delivered-To: cweiske@cweiske.de Received: from mail4.ewetel.de (mail4.ewetel.de [212.6.122.29]) by mail.cweiske.de (Postfix) with ESMTP id 9EB743F8A003 for ; Thu, 22 Jun 2006 22:02:25 +0200 (CEST) Received: from [192.168.178.25] (dynadsl-080-228-67-242.ewetel.net [80.228.67.242]) by mail4.ewetel.de (8.12.1/8.12.9) with ESMTP id k5MK2OS2006524 for ; Thu, 22 Jun 2006 22:02:24 +0200 (MEST) Message-ID: <449AF74D.3030803@gmx.de> Date: Thu, 22 Jun 2006 22:02:21 +0200 From: Some Name User-Agent: Thunderbird 1.5.0.4 (Windows/20060516) MIME-Version: 1.0 To: cweiske@cweiske.de Subject: Oh my god Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit X-CheckCompat: OK neXus MIME Mail - PHP/5.1.1 From - Fri Jun 23 06:55:39 2006 X-Account-Key: account4 X-UIDL: UID20427-1133961700 X-Mozilla-Status: 0000 X-Mozilla-Status2: 00000000 Return-Path: X-Original-To: cweiske@cweiske.de Delivered-To: cweiske@cweiske.de X-Greylist: delayed 720 seconds by postgrey-1.21 at d80-237-146-62.dds.hosteurope.de; Fri, 23 Jun 2006 00:32:12 CEST Received: from mx18.yandex.ru (smtp2.yandex.ru [213.180.200.18]) by mail.cweiske.de (Postfix) with ESMTP id 0E7213F8A003 for ; Fri, 23 Jun 2006 00:32:12 +0200 (CEST) Received: from ip16.174.adsl.wplus.ru ([195.131.174.16]:54797 "EHLO [195.131.174.16]" smtp-auth: "pluton131" TLS-CIPHER: TLS-PEER-CN1: ) by mail.yandex.ru with ESMTP id S3377100AbWFVWUF (ORCPT ); Fri, 23 Jun 2006 02:20:05 +0400 X-Comment: RFC 2476 MSA function at smtp2.yandex.ru logged sender identity as: pluton131 Message-ID: <449B1794.20706@yandex.ru> Date: Fri, 23 Jun 2006 02:20:04 +0400 From: Spari User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.4) Gecko/20060516 Mozilla Thunderbird/1.5 Mnenhy/0.7.4.0 MIME-Version: 1.0 To: cweiske@cweiske.de Subject: Hello my dear! X-Enigmail-Version: 0.94.0.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit I just wanted to say hello Mail_Mbox-0.6.3/examples/mimedecode.php100644 764 144 1255 100644 13036 open(); for ($n = 0; $n < $mbox->size(); $n++) { $message = $mbox->get($n); $decode = new Mail_mimeDecode($message, "\r\n"); $structure = $decode->decode(); echo 'Mail #' . $n . "\n"; // print_r($structure); echo 'Subject: ' . $structure->headers['subject'] . "\n"; echo 'From: ' . $structure->headers['from'] . "\n"; echo "\n"; } $mbox->close(); ?>Mail_Mbox-0.6.3/examples/modify.php100644 764 144 2403 100644 12226 size() . ' messages.' . "\n"; for ($n = 0; $n < $mbox->size(); $n++) { $message = $mbox->get($n); preg_match('/Subject: (.*)$/m', $message, $matches); $subject = $matches[1]; echo 'Mail #' . $n . ': ' . $subject . "\n"; } echo "\n"; } //make a copy of the demo file $original = dirname(__FILE__) . '/demobox'; $file = tempnam('/tmp', 'mbox-copy-'); copy($original, $file); echo 'Using file ' . $file . "\n"; $mbox = new Mail_Mbox($file); $mbox->open(); listSubjects($mbox); echo 'append a message to the end of the box' . "\n"; $message = $mbox->get(0) . "\n" . 'This is a copy of the mail'; $mbox->insert($message); listSubjects($mbox); echo 'insert a message before the second message' . "\n"; $message = $mbox->get(0) . "\n" . 'This is another copy of the mail'; $mbox->insert($message, 1); listSubjects($mbox); echo 'remove the last message' . "\n"; $mbox->remove( $mbox->size() - 1 ); listSubjects($mbox); echo 'remove the first two messages' . "\n"; $mbox->remove(array(0, 1)); listSubjects($mbox); $mbox->close(); //remove the tmp file unlink($file); ?>Mail_Mbox-0.6.3/examples/read.php100644 764 144 677 100644 11645 open(); for ($n = 0; $n < $mbox->size(); $n++) { $message = $mbox->get($n); preg_match('/Subject: (.*)$/m', $message, $matches); $subject = $matches[1]; echo 'Mail #' . $n . ': ' . $subject . "\n"; } $mbox->close(); ?>Mail_Mbox-0.6.3/tests/AllTests.php100644 764 144 1143 100644 12016 addTestSuite('Mail_MboxTest'); return $suite; } } if (PHPUnit_MAIN_METHOD == 'Mail_Mbox_AllTests::main') { Mail_Mbox_AllTests::main(); } ?>Mail_Mbox-0.6.3/tests/Mail_MboxTest.php100644 764 144 36446 100644 13030 */ class Mail_MboxTest extends PHPUnit_Framework_TestCase { protected static $file = null; protected static $filecopy = null; /** * Runs the test methods of this class. * * @access public * @static */ public static function main() { require_once 'PHPUnit/TextUI/TestRunner.php'; $suite = new PHPUnit_Framework_TestSuite('Mail_MboxTest'); $result = PHPUnit_TextUI_TestRunner::run($suite); } /** * Sets up the fixture, for example, open a network connection. * This method is called before a test is executed. * * @access protected */ protected function setUp() { chdir(dirname(__FILE__) . '/../'); Mail_MboxTest::$file = dirname(__FILE__) . '/testbox'; Mail_MboxTest::$filecopy = tempnam('/tmp', 'Mail_MboxTestcopy'); $this->mbox = new Mail_Mbox(Mail_MboxTest::$file); $this->assertTrue($this->mbox->open()); } /** * Tears down the fixture, for example, close a network connection. * This method is called after a test is executed. * * @access protected */ protected function tearDown() { $this->mbox->close(); //remove the tmp file unlink(Mail_MboxTest::$filecopy); } /** * opens the file */ public function testOpen() { $this->assertEquals(11, $this->mbox->size()); } /** * closes the file pointer */ public function testClose() { $this->assertTrue($this->mbox->close()); $this->assertType('PEAR_Error', $this->mbox->close()); } /** * returns the number of messages */ public function testSize() { $this->assertEquals(11, $this->mbox->size()); } /** * Returns a message */ public function testGet() { $msg = $this->mbox->get(0); $this->assertContains('My own hands[TM]', $msg); $msg = $this->mbox->get(2); $this->assertContains('somebody@yandex.ru', $msg); $mbox2 = new Mail_Mbox(Mail_MboxTest::$file); $this->assertType('PEAR_Error', $mbox2->get(0)); } /** * Removes a message */ public function testRemove() { $this->copy(); $mbox = new Mail_Mbox(Mail_MboxTest::$filecopy); $this->assertTrue($mbox->open()); $this->assertTrue($mbox->remove(0)); $this->assertEquals(10, $mbox->size()); //Shouldn't exist any more $this->assertNotContains('My own hands[TM]', $mbox->get(0)); $this->assertContains('neXus MIME Mail', $mbox->get(0)); $this->assertTrue($mbox->remove( array(0, 1, 2, 3, 4, 5, 9) )); $this->assertEquals(3, $mbox->size()); $this->assertContains('CME-V6.5.4.3', $mbox->get(0)); $this->assertTrue($mbox->close()); } /** * Update a message */ public function testUpdate() { $this->copy(); $mbox = new Mail_Mbox(Mail_MboxTest::$filecopy); $this->assertTrue($mbox->open()); $this->assertEquals(11, $mbox->size()); $this->assertNotContains('Hoppla', $mbox->get(0)); $this->assertTrue( $mbox->update(0, $mbox->get(0) . 'Hoppla') ); $this->assertContains('Hoppla', $mbox->get(0)); $this->assertTrue($mbox->close()); } /** * Insert a new email */ public function testInsert() { $this->copy(); $mbox = new Mail_Mbox(Mail_MboxTest::$filecopy); $this->assertTrue($mbox->open()); $this->assertEquals(11, $mbox->size()); //insert at the end $this->assertTrue($mbox->insert( $mbox->get(0) )); $this->assertEquals(12, $mbox->size()); $this->assertContains('My own hands', $mbox->get(11)); //insert at the end $this->assertTrue($mbox->insert( $mbox->get(0), -1 )); $this->assertEquals(13, $mbox->size()); $this->assertContains('My own hands', $mbox->get(12)); //insert at the end $this->assertTrue($mbox->insert( $mbox->get(0), null )); $this->assertEquals(14, $mbox->size()); $this->assertContains('My own hands', $mbox->get(13)); //insert after first message $this->assertNotContains('My own hands', $mbox->get(1)); $this->assertTrue($mbox->insert( $mbox->get(0), 1 )); $this->assertEquals(15, $mbox->size()); $this->assertContains('My own hands', $mbox->get(1)); $this->assertTrue($mbox->close()); } /** * Insert and invalid message */ public function testInsertInvalid() { $this->copy(); $mbox = new Mail_Mbox(Mail_MboxTest::$filecopy); $this->assertTrue($mbox->open()); $err = $mbox->insert('this is not valid', 0); $this->assertType('PEAR_Error', $err); $this->assertEquals(MAIL_MBOX_ERROR_MSG_INVALID, $err->getCode()); } /** * Append an email to the end of the thingy */ public function testAppend() { $this->copy(); $mbox = new Mail_Mbox(Mail_MboxTest::$filecopy); $this->assertTrue($mbox->open()); $this->assertEquals(11, $mbox->size()); $this->assertTrue($mbox->append( $mbox->get(0) )); $this->assertEquals(12, $mbox->size()); $this->assertContains('My own hands', $mbox->get(11)); $this->assertTrue($mbox->append( $mbox->get(0) )); $this->assertTrue($mbox->append( $mbox->get(0) )); $this->assertTrue($mbox->append( $mbox->get(0) )); $this->assertEquals(15, $mbox->size()); $this->assertContains('My own hands', $mbox->get(12)); $this->assertContains('My own hands', $mbox->get(13)); $this->assertContains('My own hands', $mbox->get(14)); } /** * Append an invalid message */ public function testAppendInvalid() { $this->copy(); $mbox = new Mail_Mbox(Mail_MboxTest::$filecopy); $this->assertTrue($mbox->open()); $err = $mbox->append('this is invalid'); $this->assertType('PEAR_Error', $err); $this->assertEquals(MAIL_MBOX_ERROR_MSG_INVALID, $err->getCode()); } /** * Append an email to the end of the thingy * without using auto-reopen. */ public function testAppendNoReopen() { $this->copy(); $mbox = new Mail_Mbox(Mail_MboxTest::$filecopy); $mbox->setAutoReopen(false); $this->assertTrue($mbox->open()); $this->assertEquals(11, $mbox->size()); $zero = $mbox->get(0); $this->assertTrue($mbox->append( $zero )); //should still be 11, since not reloaded $this->assertEquals(11, $mbox->size()); $this->assertTrue($mbox->open()); $this->assertEquals(12, $mbox->size()); $this->assertContains('My own hands', $mbox->get(11)); $this->assertTrue($mbox->append( $zero )); $this->assertTrue($mbox->append( $zero )); $this->assertTrue($mbox->append( $zero )); //still 12 $this->assertEquals(12, $mbox->size()); $this->assertTrue($mbox->open()); $this->assertEquals(15, $mbox->size()); $this->assertContains('My own hands', $mbox->get(12)); $this->assertContains('My own hands', $mbox->get(13)); $this->assertContains('My own hands', $mbox->get(14)); } /** * Update to an invalid message */ public function testUpdateInvalid() { $this->copy(); $mbox = new Mail_Mbox(Mail_MboxTest::$filecopy); $this->assertTrue($mbox->open()); $err = $mbox->update(0, 'this is invalid'); $this->assertType('PEAR_Error', $err); $this->assertEquals(MAIL_MBOX_ERROR_MSG_INVALID, $err->getCode()); } /** * Moves a file */ public function test_move() { $file = tempnam('/tmp', 'Mail_MboxTest'); $file2 = $file . 'second'; $this->assertTrue(file_exists($file)); $this->assertFalse(file_exists($file2)); $mbox = new Mail_Mbox($file); $this->assertTrue(file_exists($file)); $this->assertEquals(0, $mbox->size()); $this->assertTrue($mbox->_move($file, $file2)); $this->assertTrue(file_exists($file2)); $this->assertFalse(file_exists($file)); $this->assertEquals(0, $mbox->size()); //remove the tmp file unlink($file2); } /** * Checks if a file has been modified */ public function testHasBeenModified() { $this->copy(); $mbox = new Mail_Mbox(Mail_MboxTest::$filecopy); $this->assertTrue($mbox->open()); $this->assertFalse($mbox->hasBeenModified()); //get a new timestamp for the change sleep(1); $mbox2 = new Mail_Mbox(Mail_MboxTest::$filecopy); $this->assertTrue($mbox2->open()); $this->assertTrue($mbox2->remove(0)); $this->assertTrue($mbox2->close()); $this->assertTrue($mbox->hasBeenModified()); //This methods should not allow modifying a changed file. $err = $mbox->remove(0); $this->assertType('PEAR_Error', $err); $this->assertEquals(MAIL_MBOX_ERROR_MODIFIED, $err->getCode()); $err = $mbox->insert('From Test'); $this->assertType('PEAR_Error', $err); $this->assertEquals(MAIL_MBOX_ERROR_MODIFIED, $err->getCode()); $err = $mbox->update(0, 'From Test'); $this->assertType('PEAR_Error', $err); $this->assertEquals(MAIL_MBOX_ERROR_MODIFIED, $err->getCode()); $this->assertTrue($mbox->close()); } public function testSetTmpDir() { $this->assertEquals('/tmp', $this->mbox->tmpdir); $this->assertTrue($this->mbox->setTmpDir('/this/is/a/tmp/dir')); $this->assertEquals('/this/is/a/tmp/dir', $this->mbox->tmpdir); $this->assertTrue($this->mbox->setTmpDir('/tmp')); $this->assertEquals('/tmp', $this->mbox->tmpdir); } public function testGetTmpDir() { $this->assertEquals('/tmp', $this->mbox->tmpdir); $this->assertEquals('/tmp', $this->mbox->getTmpDir()); $this->assertTrue($this->mbox->setTmpDir('/this/is/a/tmp/dir')); $this->assertEquals('/this/is/a/tmp/dir', $this->mbox->tmpdir); $this->assertEquals('/this/is/a/tmp/dir', $this->mbox->getTmpDir()); } public function testSetDebug() { $this->assertFalse($this->mbox->debug); $this->mbox->setDebug(true); $this->assertTrue($this->mbox->debug); $this->mbox->setDebug(false); $this->assertFalse($this->mbox->debug); } public function testGetDebug() { $this->assertFalse($this->mbox->debug); $this->assertFalse($this->mbox->getDebug()); $this->mbox->setDebug(true); $this->assertTrue($this->mbox->debug); $this->assertTrue($this->mbox->getDebug()); $this->mbox->setDebug(false); $this->assertFalse($this->mbox->debug); $this->assertFalse($this->mbox->getDebug()); } /** * Test message escaping * * @return void */ public function test_escapeMessage() { $this->assertEquals( <<From now on, no more bugs! >>From what I said... >>>From where are you coming? MBX , $this->mbox->_escapeMessage( <<From what I said... >>From where are you coming? MBX ) ); } /** * Test message escaping with "From " midst of the text * * @return void */ public function test_escapeMessageFromMid() { $this->assertEquals( <<From now on, no more bugs! >>From what I said... >>>From where are you coming? >From From From From what? MBX , $this->mbox->_escapeMessage( <<From what I said... >>From where are you coming? From From From From what? MBX ) ); } /** * Test message unescaping with ">From " midst of the text * * @return void */ public function test_unescapeMessageFromMid() { $this->assertEquals( <<From what I said... >>From where are you coming? From >From >From >From what? MBX , $this->mbox->_unescapeMessage( <<From now on, no more bugs! >>From what I said... >>>From where are you coming? >From >From >From >From what? MBX ) ); } /** * Opening a non-existing mbox file does not succeed, and * there was no way to create one. * With bug #16487, open() accepts a $create parameter now. * * @link http://pear.php.net/bugs/bug.php?id=16487 * * @return void */ public function testBug16487() { //file does not exist yet $file = tempnam(sys_get_temp_dir(), 'mail_mbox'); unlink($file); $mbox = new Mail_Mbox($file); //open without parameter does not create anything $err = $mbox->open(); $this->assertType('PEAR_Error', $err); $this->assertEquals( MAIL_MBOX_ERROR_FILE_NOT_EXISTING, $err->getCode() ); //with true as first parameter the file gets created $err = $mbox->open(true); $this->assertTrue($err); $mbox->insert('From someone who loves you'); $mbox->close(); $this->assertFileExists($file); unlink($file); } /** * While the bug was incorrect, it showed that we do not * escape messages properly. * Here we test that escaped messages are stored and read * properly. * * @link http://pear.php.net/bugs/bug.php?id=16758 * * @return void */ public function testBug16758() { $msg =<<From what I said... >>From where are you coming? MBX; //file does not exist yet $mbox = new Mail_Mbox(self::$filecopy); $this->assertTrue($mbox->open()); $this->assertTrue($mbox->append($msg)); $mbox->close(); $mbox = new Mail_Mbox(self::$filecopy); $this->assertTrue($mbox->open()); $this->assertEquals(1, $mbox->size()); $this->assertEquals($msg, $mbox->get(0)); }//public function testBug16758() /** * Helper method to copy $file to $filecopy */ protected function copy() { copy(Mail_MboxTest::$file, Mail_MboxTest::$filecopy); } } // Call Mail_MboxTest::main() if this source file is executed directly. if (PHPUnit_MAIN_METHOD == "Mail_MboxTest::main") { Mail_MboxTest::main(); } ?> Mail_Mbox-0.6.3/tests/testbox100644 764 144 34530 100644 11213 From - Thu Jun 22 18:09:01 2006 X-Account-Key: account4 X-UIDL: UID20394-1133961700 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: X-Original-To: cweiske@cweiske.de Delivered-To: cweiske@cweiske.de X-Greylist: delayed 1778 seconds by postgrey-1.21 at d80-237-146-62.dds.hosteurope.de; Thu, 22 Jun 2006 18:07:43 CEST Received: from fallback-mx1.atl.registeredsite.com (fallback-mx1.atl.registeredsite.com [64.224.219.95]) by mail.cweiske.de (Postfix) with ESMTP id 92DF53F8A003 for ; Thu, 22 Jun 2006 18:07:43 +0200 (CEST) Received: from mail24.atl.registeredsite.com (mail24.atl.registeredsite.com [216.247.37.44]) by fallback-mx1.atl.registeredsite.com (8.12.11.20060308/8.12.11) with ESMTP id k5MFZecD006152 for ; Thu, 22 Jun 2006 11:35:40 -0400 Received: from imta01a2.registeredsite.com (imta01a2.registeredsite.com [64.225.255.10]) by mail24.atl.registeredsite.com (8.12.11.20060308/8.12.11) with ESMTP id k5MFZaUT012752 for ; Thu, 22 Jun 2006 11:35:36 -0400 Received: from [10.0.0.27] ([207.191.201.224]) by imta01a2.registeredsite.com with ESMTP id <20060622153536.OUNZ4714.imta01a2.registeredsite.com@[10.0.0.27]> for ; Thu, 22 Jun 2006 11:35:36 -0400 Message-ID: <449AB8C7.1000104@abcdefg-test.com> Date: Thu, 22 Jun 2006 10:35:35 -0500 From: Jay Vavra User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060516 Thunderbird/1.5.0.4 Mnenhy/0.7.4.0 MIME-Version: 1.0 To: cweiske@cweiske.de Subject: dispMUA: new header Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit My own hands[TM] From - Thu Jun 22 22:10:17 2006 X-Account-Key: account4 X-UIDL: UID20419-1133961700 X-Mozilla-Status: 0000 X-Mozilla-Status2: 00000000 Return-Path: X-Original-To: cweiske@cweiske.de Delivered-To: cweiske@cweiske.de Received: from mail4.ewetel.de (mail4.ewetel.de [212.6.122.29]) by mail.cweiske.de (Postfix) with ESMTP id 9EB743F8A003 for ; Thu, 22 Jun 2006 22:02:25 +0200 (CEST) Received: from [192.168.178.25] (dynadsl-080-228-67-242.ewetel.net [80.228.67.242]) by mail4.ewetel.de (8.12.1/8.12.9) with ESMTP id k5MK2OS2006524 for ; Thu, 22 Jun 2006 22:02:24 +0200 (MEST) Message-ID: <449AF74D.3030803@gmx.de> Date: Thu, 22 Jun 2006 22:02:21 +0200 From: Some Name User-Agent: Thunderbird 1.5.0.4 (Windows/20060516) MIME-Version: 1.0 To: cweiske@cweiske.de Subject: dispMUA: new header Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit X-CheckCompat: OK neXus MIME Mail - PHP/5.1.1 From - Fri Jun 23 06:55:39 2006 X-Account-Key: account4 X-UIDL: UID20427-1133961700 X-Mozilla-Status: 0000 X-Mozilla-Status2: 00000000 Return-Path: X-Original-To: cweiske@cweiske.de Delivered-To: cweiske@cweiske.de X-Greylist: delayed 720 seconds by postgrey-1.21 at d80-237-146-62.dds.hosteurope.de; Fri, 23 Jun 2006 00:32:12 CEST Received: from mx18.yandex.ru (smtp2.yandex.ru [213.180.200.18]) by mail.cweiske.de (Postfix) with ESMTP id 0E7213F8A003 for ; Fri, 23 Jun 2006 00:32:12 +0200 (CEST) Received: from ip16.174.adsl.wplus.ru ([195.131.174.16]:54797 "EHLO [195.131.174.16]" smtp-auth: "pluton131" TLS-CIPHER: TLS-PEER-CN1: ) by mail.yandex.ru with ESMTP id S3377100AbWFVWUF (ORCPT ); Fri, 23 Jun 2006 02:20:05 +0400 X-Comment: RFC 2476 MSA function at smtp2.yandex.ru logged sender identity as: pluton131 Message-ID: <449B1794.20706@yandex.ru> Date: Fri, 23 Jun 2006 02:20:04 +0400 From: Spari User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.4) Gecko/20060516 Mozilla Thunderbird/1.5 Mnenhy/0.7.4.0 MIME-Version: 1.0 To: cweiske@cweiske.de Subject: dispMUA: new header X-Enigmail-Version: 0.94.0.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit SMF From - Fri Jun 23 06:55:40 2006 X-Account-Key: account4 X-UIDL: UID20428-1133961700 X-Mozilla-Status: 0000 X-Mozilla-Status2: 00000000 Return-Path: X-Original-To: cweiske@cweiske.de Delivered-To: cweiske@cweiske.de Received: from mx18.yandex.ru (smtp2.yandex.ru [213.180.200.18]) by mail.cweiske.de (Postfix) with ESMTP id 8647F3F8A003 for ; Fri, 23 Jun 2006 00:32:13 +0200 (CEST) Received: from ip16.174.adsl.wplus.ru ([195.131.174.16]:55053 "EHLO [195.131.174.16]" smtp-auth: "pluton131" TLS-CIPHER: TLS-PEER-CN1: ) by mail.yandex.ru with ESMTP id S3377170AbWFVWUX (ORCPT ); Fri, 23 Jun 2006 02:20:23 +0400 X-Comment: RFC 2476 MSA function at smtp2.yandex.ru logged sender identity as: pluton131 Message-ID: <449B17A6.3020608@yandex.ru> Date: Fri, 23 Jun 2006 02:20:22 +0400 From: Spari User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.4) Gecko/20060516 Mozilla Thunderbird/1.5 Mnenhy/0.7.4.0 MIME-Version: 1.0 To: cweiske@cweiske.de Subject: dispMUA: new header X-Enigmail-Version: 0.94.0.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit MailList Mailer From - Fri Jun 23 06:55:41 2006 X-Account-Key: account4 X-UIDL: UID20431-1133961700 X-Mozilla-Status: 0000 X-Mozilla-Status2: 00000000 Return-Path: X-Original-To: cweiske@cweiske.de Delivered-To: cweiske@cweiske.de Received: from hotmail.com (bay106-f1.bay106.hotmail.com [65.54.161.11]) by mail.cweiske.de (Postfix) with ESMTP id E94DD3F8A003 for ; Fri, 23 Jun 2006 01:50:37 +0200 (CEST) Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Thu, 22 Jun 2006 16:50:35 -0700 Message-ID: Received: from 65.54.161.200 by by106fd.bay106.hotmail.msn.com with HTTP; Thu, 22 Jun 2006 23:50:31 GMT X-Originating-IP: [202.183.243.131] X-Originating-Email: [upluto@hotmail.com] X-Sender: upluto@hotmail.com From: "Pluto ..." To: cweiske@cweiske.de Subject: dispMUA: new header Date: Fri, 23 Jun 2006 06:50:31 +0700 Mime-Version: 1.0 Content-Type: text/plain; format=flowed X-OriginalArrivalTime: 22 Jun 2006 23:50:35.0643 (UTC) FILETIME=[A7FDF4B0:01C69656] CME-V6.5.4.3; MSN _________________________________________________________________ Express yourself instantly with MSN Messenger! Download today it's FREE! http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/ From - Fri Jun 23 13:07:07 2006 X-Account-Key: account4 X-UIDL: UID20442-1133961700 X-Mozilla-Status: 0000 X-Mozilla-Status2: 00000000 Return-Path: X-Original-To: cweiske@cweiske.de Delivered-To: cweiske@cweiske.de Received: from max000.maxhosting.de (max000.maxhosting.de [212.91.248.70]) by mail.cweiske.de (Postfix) with ESMTP id 42C223F8A003 for ; Fri, 23 Jun 2006 07:17:35 +0200 (CEST) Received: from [85.176.217.240] (helo=[192.168.2.120]) by max000.maxhosting.de with asmtp (Exim premium (Debian)) id 1Fte1j-0002Eh-00 for ; Fri, 23 Jun 2006 07:16:19 +0200 Message-ID: <449B796A.3040807@toobusy.de> Date: Fri, 23 Jun 2006 07:17:30 +0200 From: Mirko Keilwerth User-Agent: Thunderbird 1.5.0.4 (Windows/20060516) MIME-Version: 1.0 To: cweiske@cweiske.de Subject: dispMUA: new header Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit mainpean html2mail From - Fri Jun 23 13:07:16 2006 X-Account-Key: account4 X-UIDL: UID20458-1133961700 X-Mozilla-Status: 0000 X-Mozilla-Status2: 00000000 Return-Path: X-Original-To: cweiske@cweiske.de Delivered-To: cweiske@cweiske.de Received: from s4859.smaitec.de (s48593.smaitec.de [212.112.231.136]) by mail.cweiske.de (Postfix) with ESMTP id D33C83F8A004 for ; Fri, 23 Jun 2006 09:11:42 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by s4859.smaitec.de (Postfix) with ESMTP id C1C06468021 for ; Fri, 23 Jun 2006 09:11:12 +0200 (CEST) Received: from s4859.smaitec.de ([127.0.0.1]) by localhost (s4859.smaitec.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 05015-06 for ; Fri, 23 Jun 2006 09:11:12 +0200 (CEST) Received: from [192.168.178.24] (p548EBFA9.dip0.t-ipconnect.de [84.142.191.169]) by s4859.smaitec.de (Postfix) with ESMTP id 73E72468020 for ; Fri, 23 Jun 2006 09:11:12 +0200 (CEST) Message-ID: <449B9422.6060200@identity-compass.com> Date: Fri, 23 Jun 2006 09:11:30 +0200 From: "Hello You" User-Agent: Thunderbird 1.5.0.4 (Windows/20060516) MIME-Version: 1.0 To: cweiske@cweiske.de Subject: dispMUA: new header Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at s4859.smaitec.de fPost 4.1 (C) 2004 SalesEmotion GmbH From - Fri Jun 23 13:07:17 2006 X-Account-Key: account4 X-UIDL: UID20460-1133961700 X-Mozilla-Status: 0000 X-Mozilla-Status2: 00000000 Return-Path: X-Original-To: cweiske@cweiske.de Delivered-To: cweiske@cweiske.de X-Greylist: delayed 17391 seconds by postgrey-1.21 at d80-237-146-62.dds.hosteurope.de; Fri, 23 Jun 2006 09:30:11 CEST Received: from mx-fall.zoominternet.net (mx-fall.zoominternet.net [24.154.1.28]) by mail.cweiske.de (Postfix) with ESMTP id 920583F8A004 for ; Fri, 23 Jun 2006 09:30:11 +0200 (CEST) Received: from mx-8.zoominternet.net ([10.16.16.27]) by mx-fall.zoominternet.net (8.12.11/8.12.11) with ESMTP id k5N2eKEi025255 for ; Thu, 22 Jun 2006 22:40:21 -0400 Received: from mua-4.zoominternet.net (mua-4.zoominternet.net [24.154.1.47]) by mx-8.zoominternet.net (8.13.1/8.13.1) with ESMTP id k5N2e8BU030513 for ; Thu, 22 Jun 2006 22:40:12 -0400 Received: from [127.0.0.1] (unknown [24.239.116.162]) by mua-4.zoominternet.net (Postfix) with ESMTP id 4D6187F403 for ; Thu, 22 Jun 2006 22:40:12 -0400 (EDT) Message-ID: <449B5496.5010505@zoominternet.net> Date: Thu, 22 Jun 2006 22:40:22 -0400 From: Christopher Kindergarten User-Agent: Thunderbird 1.5.0.4 (Windows/20060516) MIME-Version: 1.0 To: cweiske@cweiske.de Subject: dispMUA: new header Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Antivirus: avast! (VPS 0625-6, 06/22/2006), Outbound message X-Antivirus-Status: Clean X-Spam-Score: 0.00 () [Tag at 15.00] X-CanItPRO-Stream: outgoing X-Scanned-By: CanIt (www . roaringpenguin . com) on 24.154.1.27 CME-V6.5.4.3; MSN From - Fri Jun 23 13:07:20 2006 X-Account-Key: account4 X-UIDL: UID20466-1133961700 X-Mozilla-Status: 0000 X-Mozilla-Status2: 00000000 Return-Path: X-Original-To: cweiske@cweiske.de Delivered-To: cweiske@cweiske.de X-Greylist: delayed 721 seconds by postgrey-1.21 at d80-237-146-62.dds.hosteurope.de; Fri, 23 Jun 2006 10:47:29 CEST Received: from greco2.grecotel.gr (greco2.grecotel.gr [213.249.61.40]) by mail.cweiske.de (Postfix) with ESMTP id 27A3B3F8A003 for ; Fri, 23 Jun 2006 10:47:29 +0200 (CEST) Received: from [10.8.1.99] ([10.8.1.99]) by greco2.grecotel.gr with Microsoft SMTPSVC(5.0.2195.6713); Fri, 23 Jun 2006 11:38:59 +0300 Message-ID: <449BA7DD.6090506@panafonet.gr> Date: Fri, 23 Jun 2006 11:35:41 +0300 From: Mama Papa User-Agent: Thunderbird 1.5.0.4 (Windows/20060516) MIME-Version: 1.0 To: cweiske@cweiske.de Subject: dispMUA: new header X-Enigmail-Version: 0.94.0.0 Content-Type: text/plain; charset=ISO-8859-7 Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 23 Jun 2006 08:38:59.0698 (UTC) FILETIME=[7914D520:01C696A0] -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 MSCRM Version 1.0 - -- -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (MingW32) iD8DBQFEm6fdpu0NeBnSiRkRAndqAJ9E3eSBBSO+Upov8FgAla55O6wo5gCfRnbG MgfiX593mPBVC7gedPoXOSc= =sKvo -----END PGP SIGNATURE----- From - Fri Jun 23 13:07:21 2006 X-Account-Key: account4 X-UIDL: UID20468-1133961700 X-Mozilla-Status: 0000 X-Mozilla-Status2: 00000000 Return-Path: X-Original-To: cweiske@cweiske.de Delivered-To: cweiske@cweiske.de X-Greylist: delayed 1417 seconds by postgrey-1.21 at d80-237-146-62.dds.hosteurope.de; Fri, 23 Jun 2006 11:33:24 CEST Received: from mgate25.so-net.ne.jp (mgate25.so-net.ne.jp [202.238.84.125]) by mail.cweiske.de (Postfix) with ESMTP id 55CAC3F8A003 for ; Fri, 23 Jun 2006 11:33:23 +0200 (CEST) Received: from mx51.ms.so-net.ne.jp (mx51.ms.so-net.ne.jp [202.238.83.1]) by mgate25.so-net.ne.jp with ESMTP id k5N99XfD007824 for ; Fri, 23 Jun 2006 18:09:33 +0900 (JST) Received: from [127.0.0.1] (p6e57cf.sigant01.ap.so-net.ne.jp [218.110.87.207]) by mx51.ms.so-net.ne.jp with ESMTP id k5N993dV010879 for ; Fri, 23 Jun 2006 18:09:15 +0900 (JST) Message-ID: <449BAFB1.1010707@cf7.so-net.ne.jp> Date: Fri, 23 Jun 2006 18:09:05 +0900 From: Daigo Reply-To: dais@sonett.jp User-Agent: Thunderbird 1.5.0.4 (Windows/20060516) MIME-Version: 1.0 To: cweiske@cweiske.de Subject: dispMUA: new header Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit http://www.postblitz.net From - Fri Jun 23 15:00:31 2006 X-Account-Key: account4 X-UIDL: UID20488-1133961700 X-Mozilla-Status: 0000 X-Mozilla-Status2: 00000000 Return-Path: X-Original-To: cweiske@cweiske.de Delivered-To: cweiske@cweiske.de X-Greylist: delayed 1163 seconds by postgrey-1.21 at d80-237-146-62.dds.hosteurope.de; Fri, 23 Jun 2006 14:55:54 CEST Received: from natreg.rzone.de (natreg.rzone.de [81.169.145.183]) by mail.cweiske.de (Postfix) with ESMTP id 7CC253F8A003 for ; Fri, 23 Jun 2006 14:55:53 +0200 (CEST) Received: from [192.168.0.26] (p5498564A.dip.t-dialin.net [84.152.86.74]) (authenticated bits=0) by post.webmailer.de (8.13.6/8.13.6) with ESMTP id k5NCaS4g019393 for ; Fri, 23 Jun 2006 14:36:29 +0200 (MEST) Message-ID: <449BE050.8010302@somehost.de> Date: Fri, 23 Jun 2006 14:36:32 +0200 From: Oliver Olli User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.0.4) Gecko/20060516 Thunderbird/1.5.0.4 Mnenhy/0.7.4.0 MIME-Version: 1.0 To: cweiske@cweiske.de Subject: dispMUA: new header X-Enigmail-Version: 0.94.0.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit BueroWARE MailClient 1.0.241 (aus Angebotstool Fa. gotomaxx.de)