/**
  * adding an mailobject fetched from imap or pop3
  * it will store it to db and local filesystem
  *
  * @todo parse created from mail header
  * @param integer $mailboxId
  * @param integer $messageId
  * @param string $messageString
  * @return object / false if not create
  */
 public static function addMailboxItem($mailboxId, $messageIdentifier, $messageId, $messageString)
 {
     $foundMessage = self::fetchByMailboxIdMessageIdentifier($mailboxId, $messageIdentifier);
     if (!is_object($foundMessage)) {
         // object with fetch id not exists, than start the store progress
         $row = array('created' => time(), 'mailbox_id' => $mailboxId, 'message_id' => $messageId, 'message_identifier' => $messageIdentifier, 'message_size' => strlen($messageString));
         $newMailboxItemObject = new CjwNewsletterMailboxItem($row);
         $newMailboxItemObject->store();
         $newMailboxItemObject->MessageString = $messageString;
         // store message on filesystem
         $newMailboxItemObject->storeMessageToFilesystem();
         return $newMailboxItemObject;
     } else {
         return false;
     }
 }
$http = eZHTTPTool::instance();
$tpl = templateInit();
if ($http->hasVariable('ConnectMailboxButton')) {
    $collectMailResult = CjwNewsletterMailbox::collectMailsFromActiveMailboxes();
    $tpl->setVariable('collect_mail_result', $collectMailResult);
}
if ($http->hasVariable('BounceMailItemButton')) {
    $parseResultArray = CjwNewsletterMailbox::parseActiveMailboxItems();
    $tpl->setVariable('parse_result', $parseResultArray);
}
$http = eZHTTPTool::instance();
$db = eZDB::instance();
$viewParameters = array('offset' => 0, 'namefilter' => '');
$userParameters = $Params['UserParameters'];
$viewParameters = array_merge($viewParameters, $userParameters);
$limit = 10;
$limitArray = array(10, 10, 25, 50);
$limitArrayKey = eZPreferences::value('admin_mailbox_item_list_limit');
// get user limit preference
if (isset($limitArray[$limitArrayKey])) {
    $limit = $limitArray[$limitArrayKey];
}
$mailboxItemList = CjwNewsletterMailboxItem::fetchAllMailboxItems($limit, $viewParameters['offset']);
$mailboxItemListCount = CjwNewsletterMailboxItem::fetchAllMailboxItemsCount();
$tpl->setVariable('view_parameters', $viewParameters);
$tpl->setVariable('mailbox_item_list', $mailboxItemList);
$tpl->setVariable('mailbox_item_list_count', $mailboxItemListCount);
$tpl->setVariable('limit', $limit);
$Result = array();
$Result['content'] = $tpl->fetch($templateFile);
$Result['path'] = array(array('url' => 'newsletter/index', 'text' => ezi18n('cjw_newsletter/path', 'Newsletter')), array('url' => false, 'text' => ezi18n('cjw_newsletter/mailbox_item_list', 'Bounces')));
 * @license http://ez.no/licenses/gnu_gpl GNU GPL v2
 * @version //autogentag//
 * @package cjw_newsletter
 * @subpackage modules
 * @filesource
 */
// newsletter/mailbox_item_view/ $mailboxItemId => show details of message
// newsletter/mailbox_item_view/ $mailboxItemId ?GetRawMailContent => show raw message as text
// newsletter/mailbox_item_view/ $mailboxItemId ?DownloadRawMailContent => download raw message
$http = eZHTTPTool::instance();
$module = $Params['Module'];
$templateFile = 'design:newsletter/mailbox_item_view.tpl';
require_once 'kernel/common/i18n.php';
include_once 'kernel/common/template.php';
$mailboxItemId = (int) $Params['MailboxItemId'];
$mailboxItemObject = CjwNewsletterMailboxItem::fetch($mailboxItemId);
if (!is_object($mailboxItemObject)) {
    return $module->handleError(eZError::KERNEL_NOT_AVAILABLE, 'kernel');
}
if ($http->hasVariable('GetRawMailContent')) {
    header('Content-Type: text/plain');
    echo $mailboxItemObject->getRawMailMessageContent();
    eZExecution::cleanExit();
} elseif ($http->hasVariable('DownloadRawMailContent')) {
    downloadFile($mailboxItemObject->getFilePath());
} else {
    $cjwNewsletterMailParserObject = new CjwNewsletterMailParser($mailboxItemObject);
    if (is_object($cjwNewsletterMailParserObject)) {
        $parseHeaderArray = $cjwNewsletterMailParserObject->parse();
    }
    $tpl = templateInit();
 /**
  * fetch mails to parse and/or store
  *
  * @return void
  */
 public function fetchMails()
 {
     $statusArray = array('added' => array(), 'exists' => array(), 'failed' => array());
     $mailboxId = $this->attribute('id');
     $mailboxDeleteMailsFromServer = (bool) $this->attribute('delete_mails_from_server');
     if (is_object($this->TransportObject)) {
         $transport = $this->TransportObject;
         try {
             // it is possible that not all pop3 server understand this
             // array( message_num => unique_id );
             // array( 1 => '000001fc4420e93a', 2 => '000001fd4420e93a' );
             $uniqueIdentifierArray = $transport->listUniqueIdentifiers();
         } catch (Exception $e) {
             $uniqueIdentifiers = false;
             CjwNewsletterLog::writeError('CjwNewsletterMailbox::fetchMails', 'mailbox', 'listUniqueIdentifiers-failed', array('error-code' => $e->getMessage()));
         }
         try {
             // array( message_id => message_size );
             // array( 2 => 1700, 5 => 1450 );
             $messageIdArray = $transport->listMessages();
         } catch (Exception $e) {
             $messageIdNumbers = false;
             CjwNewsletterLog::writeError('CjwNewsletterMailbox::fetchMails', 'mailbox', 'listMessages-failed', array('error-code' => $e->getMessage()));
         }
         // array( message_id => message_identifier )
         $messageNumberArray = array();
         // only fetch messages from server which are not in the db
         // use message_identifier for check
         $existingMessageIdentifierArray = $this->extractAllExistingIdentifiers($uniqueIdentifierArray);
         foreach ($messageIdArray as $messageId => $messageSize) {
             if (isset($uniqueIdentifierArray[$messageId])) {
                 $uniqueIdentifier = $uniqueIdentifierArray[$messageId];
             } else {
                 $uniqueIdentifier = false;
             }
             if (array_key_exists($uniqueIdentifier, $existingMessageIdentifierArray)) {
                 $statusArray['exists'][$messageId] = $uniqueIdentifier;
             } else {
                 $messageNumberArray[$messageId] = $uniqueIdentifier;
             }
         }
         if (count($messageNumberArray) > 0) {
             // only fetch x item at once to avoid script timeout ... if call from admin frontend
             // the cronjob may be has other settings
             $fetchLimit = 50;
             $counter = 0;
             foreach ($messageNumberArray as $messageId => $messageIdentifier) {
                 if ($counter >= $fetchLimit) {
                     break;
                 } else {
                     // create mailobject from message id
                     // $mailboxDeleteMailsFromServer == true, set delete flag for current message
                     $mailObject = $transport->fetchByMessageNr($messageId, $mailboxDeleteMailsFromServer);
                     // convert mailobject to string with own function
                     $messageString = $this->convertMailToString($mailObject);
                     if ($messageIdentifier === false) {
                         $messageIdentifier = 'cjwnl_' . md5($messageString);
                     }
                     // if messageString has content
                     if ($messageString != null) {
                         // add item to DB / Filesystem
                         $addResult = CjwNewsletterMailboxItem::addMailboxItem($mailboxId, $messageIdentifier, $messageId, $messageString);
                         if (is_object($addResult)) {
                             $statusArray['added'][$messageId] = $messageIdentifier;
                         } else {
                             $statusArray['exists'][$messageId] = $messageIdentifier;
                         }
                         unset($addResult);
                     } else {
                         $statusArray['failed'][$messageId] = $messageIdentifier;
                     }
                     unset($messageString);
                     unset($mailObject);
                 }
                 $counter++;
             }
             // delete messages with delete flag from mailbox
             switch ($this->attribute('type')) {
                 case 'imap':
                     $transport->expunge();
                     break;
             }
         } else {
             return $statusArray;
         }
     }
     return $statusArray;
 }