/**
  * Basics parse
  *
  * @return array / boolean
  */
 public function parse()
 {
     // parse set to mailobject
     $set = new ezcMailVariableSet($this->MailboxItem->getRawMailMessageContent());
     try {
         $ezcMailObjectArray = $this->MailParser->parseMail($set);
     } catch (Exception $e) {
         CjwNewsletterLog::writeError('CjwNewsletterMailparser::parse', 'parseMail', 'ezcMailParser->parseMail-failed', array('error-code' => $e->getMessage()));
         return false;
     }
     if (count($ezcMailObjectArray) > 0) {
         $this->EzcMailObject = $ezcMailObjectArray[0];
         // return standard email headers
         $parsedMailInfosArray = $this->getHeaders();
         // return x-cwl- email headers
         $parsedCjwMailHeaderArray = $this->getCjwHeaders();
         // merge header arrays
         $parseArray = array_merge($parsedMailInfosArray, $parsedCjwMailHeaderArray);
         return $parseArray;
     } else {
         return false;
     }
 }
     //    no   -> create new one with status """confirmed"""
     //         -> subscribe to nl list with status """approved"""
     //    yes  -> subscribe to nl list with status """approved"""
     $existingNewsletterUserObject = CjwNewsletterUser::fetchByEmail($email);
 } else {
     // user wurde bereits importiert?
     // zuerst nach remote_id suchen
     $existingNewsletterUserObject = CjwNewsletterUser::fetchByRemoteId($remote_id);
     if (is_object($existingNewsletterUserObject)) {
         // sicherstellen, dass wir keine duplicate emails haben
         if ($email != $existingNewsletterUserObject->attribute('email')) {
             $tmpUserObject = CjwNewsletterUser::fetchByEmail($email);
             if (is_object($tmpUserObject)) {
                 // houston, we've got a problem - $tmpUserObject löschen???
                 // ToDo
                 CjwNewsletterLog::writeError('CSV Import: duplicate E-Mail Adress', 'user', 'email', array('email_cur' => $existingNewsletterUserObject->attribute('email'), 'email_imp' => $email, 'remote_id' => $remoteId));
             }
         }
     }
     // user hat sich selbst per subscription angelegt?
     // sonst nach email suchen
     if (!is_object($existingNewsletterUserObject)) {
         $existingNewsletterUserObject = CjwNewsletterUser::fetchByEmail($email);
     }
 }
 // update existing
 if (is_object($existingNewsletterUserObject)) {
     $userObject = $existingNewsletterUserObject;
     $updateUserDataIfExists = true;
     $existingUserStatus = $userObject->attribute('status');
     if ($userObject->isOnBlacklist() || $userObject->isRemovedSelf()) {
Ejemplo n.º 3
0
 /**
  * Used in subscription_list_csvimport
  *
  * @param string $remoteId
  * @return array / boolean
  */
 static function fetchByRemoteId($remoteId)
 {
     $db = eZDB::instance();
     $objectList = eZPersistentObject::fetchObjectList(CjwNewsletterUser::definition(), null, array('remote_id' => $db->escapeString($remoteId)), null, null, true);
     $count = count($objectList);
     if ($count == 1) {
         return $objectList[0];
     } elseif ($count > 1) {
         $userIdArray = array();
         foreach ($objectList as $nlUser) {
             $userIdArray[] = $nlUser->attribute('id');
         }
         CjwNewsletterLog::writeError('email existing more than 1 time CjwNewsletterUser::fetchByRemoteId', 'user', 'email', array('email' => $objectList[0]->attribute('email'), 'email_count' => $count, 'nl_user_ids' => implode(',', $userIdArray), 'modifier' => eZUser::currentUserID(), 'remote_id' => $remoteId));
         return $objectList;
     } else {
         return false;
     }
 }
Ejemplo n.º 4
0
 /**
  * Mainfunction for mail send
  *
  * @param unknown_type $emailSender
  * @param unknown_type $emailSenderName
  * @param unknown_type $emailReceiver
  * @param unknown_type $emailReceiverName
  * @param unknown_type $emailSubject
  * @param unknown_type $emailBodyArray
  * @param boolean $isPreview
  * @param string $emailCharset
  * @return array
  */
 public function sendEmail($emailSender, $emailSenderName, $emailReceiver, $emailReceiverName, $emailSubject, $emailBodyArray, $isPreview = false, $emailCharset = 'utf-8')
 {
     $transportMethod = $this->transportMethod;
     //$mail = new ezcMailComposer();
     $mail = new CjwNewsletterMailComposer();
     $mail->charset = $emailCharset;
     $mail->subjectCharset = $emailCharset;
     // from and to addresses, and subject
     $mail->from = new ezcMailAddress(trim($emailSender), $emailSenderName);
     // returnpath for email bounces
     $mail->returnPath = new ezcMailAddress(trim($emailSender));
     if ($isPreview) {
         $explodeReceiverArr = explode(';', $emailReceiver);
         foreach ($explodeReceiverArr as $index => $receiver) {
             // check if email
             if ($receiver != '') {
                 $mail->addTo(new ezcMailAddress(trim($receiver), 'NL Test Receiver' . $index));
             }
         }
     } else {
         $mail->addTo(new ezcMailAddress(trim($emailReceiver), $emailReceiverName));
     }
     if (array_key_exists('html', $emailBodyArray) == false) {
         $emailBodyArray['html'] = '';
     }
     if (array_key_exists('text', $emailBodyArray) == false) {
         $emailBodyArray['text'] = '';
     }
     $mail->subject = $emailSubject;
     if ($emailBodyArray['html'] == '') {
         // tue nix - da kein html da ist
     } else {
         $mail->htmlText = $emailBodyArray['html'];
     }
     // body: plain
     // $mail->plainText = "Here is the text version of the mail.";
     if ($emailBodyArray['text'] == '') {
         // $mail->plainText = "Text version of this mail does not exists.";
     } else {
         $mail->plainText = $emailBodyArray['text'];
     }
     $emailContentType = '';
     if ($emailBodyArray['html'] != '' && $emailBodyArray['text'] != '') {
         $emailContentType = 'multipart/alternative';
     } else {
         if ($emailBodyArray['html'] != '') {
             $emailContentType = 'text/html';
         } elseif ($emailBodyArray['text'] != '') {
             $emailContentType = 'text/plain';
         }
     }
     // http://ezcomponents.org/docs/api/latest/introduction_Mail.html#mta-qmail
     // HeaderLineEnding=auto
     // CRLF - windows - \r\n
     // CR - mac - \r
     // LF - UNIX-MACOSX - \n
     // default LF
     //ezcMailTools::setLineBreak( "\n" );
     ezcMailTools::setLineBreak($this->HeaderLineEnding);
     // set 'x-cjwnl-' mailheader
     foreach ($this->ExtraEmailHeaderItemArray as $key => $value) {
         $mail->setHeader($key, $value);
     }
     $mail->build();
     $transport = new CjwNewsletterTransport($transportMethod);
     $sendResult = $transport->send($mail);
     $emailResult = array('send_result' => $sendResult, 'email_sender' => $emailSender, 'email_receiver' => $emailReceiver, 'email_subject' => $emailSubject, 'email_content_type' => $emailContentType, 'email_charset' => $emailCharset, 'transport_method' => $transportMethod);
     // ok
     if ($sendResult) {
         CjwNewsletterLog::writeInfo('email send ok', 'CjwNewsletterMail', 'sendEmail', $emailResult);
     } else {
         CjwNewsletterLog::writeError('email send failed', 'CjwNewsletterMail', 'sendEmail', $emailResult);
     }
     // $LogFile->write( $message, $logName, $logFolder );
     return $emailResult;
 }
Ejemplo n.º 5
0
 /**
  * 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;
 }
Ejemplo n.º 6
0
 /**
  * Mainfunction for mail send
  *
  * @param unknown_type $emailSender
  * @param unknown_type $emailSenderName
  * @param unknown_type $emailReceiver
  * @param unknown_type $emailReceiverName
  * @param unknown_type $emailSubject
  * @param unknown_type $emailBodyArray
  * @param boolean $isPreview
  * @param string $emailCharset
  * @return array
  */
 public function sendEmail($emailSender, $emailSenderName, $emailReceiver, $emailReceiverName, $emailSubject, $emailBodyArray, $isPreview = false, $emailCharset = 'utf-8', $emailReplyTo = false, $emailReturnPath = false)
 {
     $transportMethod = $this->transportMethod;
     //$mail = new ezcMailComposer();
     $mail = new CjwNewsletterMailComposer();
     // Encode the UTF-8 as base64 or QUOTED_PRINTABLE for 7 bit MTAs
     // $mail->encoding = ezcMail::BASE64;
     // $mail->encoding = ezcMail::QUOTED_PRINTABLE;
     $mail->encoding = $this->ContentTransferEncoding;
     $mail->charset = $emailCharset;
     $mail->subjectCharset = $emailCharset;
     // from and to addresses, and subject
     $mail->from = new ezcMailAddress(trim($emailSender), $emailSenderName, $mail->charset);
     // returnpath for email bounces
     if (!($emailReturnPath && $emailReturnPath != '')) {
         $mail->returnPath = $mail->from;
     } else {
         $mail->returnPath = new ezcMailAddress(trim($emailReturnPath), '', $mail->charset);
     }
     $mail->setHeader('Errors-To', $mail->returnPath);
     // reply-to
     if (!($emailReplyTo && $emailReplyTo != '')) {
         $mail->setHeader('Reply-To', $mail->from);
     } else {
         $mail->setHeader('Reply-To', new ezcMailAddress(trim($emailReplyTo), '', $mail->charset));
     }
     if ($isPreview) {
         $explodeReceiverArr = explode(';', $emailReceiver);
         foreach ($explodeReceiverArr as $index => $receiver) {
             // check if email
             if ($receiver != '') {
                 $mail->addTo(new ezcMailAddress(trim($receiver), 'NL Test Receiver' . $index, $mail->charset));
             }
         }
     } else {
         $mail->addTo(new ezcMailAddress(trim($emailReceiver), $emailReceiverName, $mail->charset));
     }
     if (array_key_exists('html', $emailBodyArray) == false) {
         $emailBodyArray['html'] = '';
     }
     if (array_key_exists('text', $emailBodyArray) == false) {
         $emailBodyArray['text'] = '';
     }
     $mail->subject = $emailSubject;
     if ($emailBodyArray['html'] == '') {
         // tue nix - da kein html da ist
     } else {
         $mail->htmlText = $emailBodyArray['html'];
     }
     // body: plain
     // $mail->plainText = "Here is the text version of the mail.";
     if ($emailBodyArray['text'] == '') {
         // $mail->plainText = "Text version of this mail does not exists.";
     } else {
         $mail->plainText = $emailBodyArray['text'];
     }
     $emailContentType = '';
     if ($emailBodyArray['html'] != '' && $emailBodyArray['text'] != '') {
         $emailContentType = 'multipart/alternative';
     } else {
         if ($emailBodyArray['html'] != '') {
             $emailContentType = 'text/html';
         } elseif ($emailBodyArray['text'] != '') {
             $emailContentType = 'text/plain';
         }
     }
     // http://ezcomponents.org/docs/api/latest/introduction_Mail.html#mta-qmail
     // HeaderLineEnding=auto
     // CRLF - windows - \r\n
     // CR - mac - \r
     // LF - UNIX-MACOSX - \n
     // default LF
     //ezcMailTools::setLineBreak( "\n" );
     ezcMailTools::setLineBreak($this->HeaderLineEnding);
     // set 'x-cjwnl-' mailheader
     foreach ($this->ExtraEmailHeaderItemArray as $key => $value) {
         $mail->setHeader($key, $value, $mail->charset);
     }
     $mail->build();
     $transport = new CjwNewsletterTransport($transportMethod);
     $sendResult = $transport->send($mail);
     $emailResult = array('send_result' => $sendResult, 'email_sender' => $emailSender, 'email_receiver' => $emailReceiver, 'email_subject' => $emailSubject, 'email_content_type' => $emailContentType, 'email_charset' => $emailCharset, 'transport_method' => $transportMethod);
     // ok
     if ($sendResult === true) {
         CjwNewsletterLog::writeInfo('email send ok', 'CjwNewsletterMail', 'sendEmail', $emailResult);
     } else {
         // An error occured while sending or receiving mail. RCPT TO failed with error: 450 4.1.2
         // <*****@*****.**>: Recipient address rejected: Domain not found
         // is string ' 450 ' included in emailResult
         $searchString = ' 450 ';
         $addErrorMessage = '';
         if (strpos($sendResult, $searchString) !== false) {
             // check if we found an email nl user for emailReceiver
             $nlUserToBounce = CjwNewsletterUser::fetchByEmail($emailReceiver);
             if (is_object($nlUserToBounce)) {
                 // hardbounce user
                 // alle active element will be aborted, too
                 $nlUserToBounce->setBounced(true);
                 $emailResult['nluser_id'] = $nlUserToBounce->attribute('id');
                 $addErrorMessage = ' - HARD BOUNCE (450)';
             } else {
                 $addErrorMessage = ' - NL User for email not found';
             }
         }
         CjwNewsletterLog::writeError('email send failed to ' . $emailReceiver . $addErrorMessage, 'CjwNewsletterMail', 'sendEmail', $emailResult);
     }
     // $LogFile->write( $message, $logName, $logFolder );
     return $emailResult;
 }