/** * 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; }