Example #1
0
 protected function _sendEmail(array $email, array $user, Zend_Mail_Transport_Abstract $transport)
 {
     if (!$user['email']) {
         return;
     }
     $phraseTitles = XenForo_Helper_String::findPhraseNamesFromStringSimple($email['email_title'] . $email['email_body']);
     /** @var XenForo_Model_Phrase $phraseModel */
     $phraseModel = XenForo_Model::create('XenForo_Model_Phrase');
     $phrases = $phraseModel->getPhraseTextFromPhraseTitles($phraseTitles, $user['language_id']);
     foreach ($phraseTitles as $search => $phraseTitle) {
         if (isset($phrases[$phraseTitle])) {
             $email['email_title'] = str_replace($search, $phrases[$phraseTitle], $email['email_title']);
             $email['email_body'] = str_replace($search, $phrases[$phraseTitle], $email['email_body']);
         }
     }
     $mailObj = new Zend_Mail('utf-8');
     $mailObj->setSubject($email['email_title'])->addTo($user['email'], $user['username'])->setFrom($email['from_email'], $email['from_name']);
     $options = XenForo_Application::getOptions();
     $bounceEmailAddress = $options->bounceEmailAddress;
     if (!$bounceEmailAddress) {
         $bounceEmailAddress = $options->defaultEmailAddress;
     }
     $toEmail = $user['email'];
     $bounceHmac = substr(hash_hmac('md5', $toEmail, XenForo_Application::getConfig()->globalSalt), 0, 8);
     $mailObj->addHeader('X-To-Validate', "{$bounceHmac}+{$toEmail}");
     if ($options->enableVerp) {
         $verpValue = str_replace('@', '=', $toEmail);
         $bounceEmailAddress = str_replace('@', "+{$bounceHmac}+{$verpValue}@", $bounceEmailAddress);
     }
     $mailObj->setReturnPath($bounceEmailAddress);
     if ($email['email_format'] == 'html') {
         $replacements = array('{name}' => htmlspecialchars($user['username']), '{email}' => htmlspecialchars($user['email']), '{id}' => $user['user_id']);
         $email['email_body'] = strtr($email['email_body'], $replacements);
         $text = trim(htmlspecialchars_decode(strip_tags($email['email_body'])));
         $mailObj->setBodyHtml($email['email_body'])->setBodyText($text);
     } else {
         $replacements = array('{name}' => $user['username'], '{email}' => $user['email'], '{id}' => $user['user_id']);
         $email['email_body'] = strtr($email['email_body'], $replacements);
         $mailObj->setBodyText($email['email_body']);
     }
     if (!$mailObj->getMessageId()) {
         $mailObj->setMessageId();
     }
     $thisTransport = XenForo_Mail::getFinalTransportForMail($mailObj, $transport);
     try {
         $mailObj->send($thisTransport);
     } catch (Exception $e) {
         if (method_exists($thisTransport, 'resetConnection')) {
             XenForo_Error::logException($e, false, "Email to {$user['email']} failed: ");
             $thisTransport->resetConnection();
             try {
                 $mailObj->send($thisTransport);
             } catch (Exception $e) {
                 XenForo_Error::logException($e, false, "Email to {$user['email']} failed (after retry): ");
             }
         } else {
             XenForo_Error::logException($e, false, "Email to {$user['email']} failed: ");
         }
     }
 }
Example #2
0
 protected function _sendAlert(array $alert, array $replacements, array $fromUser, array $user)
 {
     $body = $alert['alert_body'];
     /** @var XenForo_Model_Phrase $phraseModel */
     $phraseModel = XenForo_Model::create('XenForo_Model_Phrase');
     $phraseTitles = XenForo_Helper_String::findPhraseNamesFromStringSimple($body);
     $phrases = $phraseModel->getPhraseTextFromPhraseTitles($phraseTitles, $user['language_id']);
     foreach ($phraseTitles as $search => $phraseTitle) {
         if (isset($phrases[$phraseTitle])) {
             $body = str_replace($search, $phrases[$phraseTitle], $body);
         }
     }
     $replacements = array_merge($replacements, array('{name}' => htmlspecialchars($user['username']), '{id}' => $user['user_id']));
     $alert['alert_text'] = strtr($body, $replacements);
     XenForo_Model_Alert::alert($user['user_id'], $fromUser['user_id'], $fromUser['username'], 'user', $user['user_id'], 'from_admin', $alert);
 }
Example #3
0
 protected function _sendMessage(array $conversation, array $conversationUser, array $user)
 {
     $title = $conversation['message_title'];
     $body = $conversation['message_body'];
     $phraseTitles = XenForo_Helper_String::findPhraseNamesFromStringSimple($title . $body);
     /** @var XenForo_Model_Phrase $phraseModel */
     $phraseModel = XenForo_Model::create('XenForo_Model_Phrase');
     $phrases = $phraseModel->getPhraseTextFromPhraseTitles($phraseTitles, $user['language_id']);
     foreach ($phraseTitles as $search => $phraseTitle) {
         if (isset($phrases[$phraseTitle])) {
             $title = str_replace($search, $phrases[$phraseTitle], $title);
             $body = str_replace($search, $phrases[$phraseTitle], $body);
         }
     }
     $replacements = array('{name}' => $user['username'], '{id}' => $user['user_id']);
     $body = strtr($body, $replacements);
     /* @var $conversationModel XenForo_Model_Conversation */
     $conversationModel = XenForo_Model::create('XenForo_Model_Conversation');
     /** @var XenForo_DataWriter_ConversationMaster $conversationDw */
     $conversationDw = XenForo_DataWriter::create('XenForo_DataWriter_ConversationMaster');
     $conversationDw->setExtraData(XenForo_DataWriter_ConversationMaster::DATA_ACTION_USER, $conversationUser);
     $conversationDw->setExtraData(XenForo_DataWriter_ConversationMaster::DATA_MESSAGE, $body);
     $conversationDw->set('user_id', $conversationUser['user_id']);
     $conversationDw->set('username', $conversationUser['username']);
     $conversationDw->set('title', utf8_substr($title, 0, 100));
     $conversationDw->set('open_invite', $conversation['open_invite']);
     $conversationDw->set('conversation_open', $conversation['conversation_locked'] ? 0 : 1);
     $conversationDw->addRecipientUserIds(array($user['user_id']));
     // bypasses permissions
     $messageDw = $conversationDw->getFirstMessageDw();
     $messageDw->set('message', $body);
     $conversationDw->save();
     $conversationModel->markConversationAsRead($conversationDw->get('conversation_id'), $conversationUser['user_id'], XenForo_Application::$time);
     if ($conversation['delete_type']) {
         $conversationModel->deleteConversationForUser($conversationDw->get('conversation_id'), $conversationUser['user_id'], $conversation['delete_type']);
     }
 }
 public function execute(array $deferred, array $data, $targetRunTime, &$status)
 {
     $data = array_merge(array('start' => 0, 'count' => 0, 'criteria' => null, 'userIds' => null, 'conversation' => array()), $data);
     $s = microtime(true);
     /* @var $userModel XenForo_Model_User */
     /* @var $conversationModel XenForo_Model_Conversation */
     $userModel = XenForo_Model::create('XenForo_Model_User');
     $conversationModel = XenForo_Model::create('XenForo_Model_Conversation');
     if (is_array($data['criteria'])) {
         $userIds = $userModel->getUserIds($data['criteria'], $data['start'], 1000);
     } else {
         if (is_array($data['userIds'])) {
             $userIds = $data['userIds'];
         } else {
             $userIds = array();
         }
     }
     if (!$userIds) {
         return false;
     }
     $conversation = $data['conversation'];
     $limitTime = $targetRunTime > 0;
     foreach ($userIds as $key => $userId) {
         $data['count']++;
         $data['start'] = $userId;
         unset($userIds[$key]);
         $conversationUser = $userModel->getUserById($conversation['user_id']);
         if ($userId == $conversationUser['user_id']) {
             continue;
         }
         $user = $userModel->getUserById($userId);
         $title = $conversation['message_title'];
         $body = $conversation['message_body'];
         $phraseTitles = XenForo_Helper_String::findPhraseNamesFromStringSimple($title . $body);
         /** @var XenForo_Model_Phrase $phraseModel */
         $phraseModel = XenForo_Model::create('XenForo_Model_Phrase');
         $phrases = $phraseModel->getPhraseTextFromPhraseTitles($phraseTitles, $user['language_id']);
         foreach ($phraseTitles as $search => $phraseTitle) {
             if (isset($phrases[$phraseTitle])) {
                 $title = str_replace($search, $phrases[$phraseTitle], $title);
                 $body = str_replace($search, $phrases[$phraseTitle], $body);
             }
         }
         $replacements = array('{name}' => $user['username'], '{id}' => $user['user_id']);
         $body = strtr($body, $replacements);
         $body = XenForo_Helper_String::autoLinkBbCode($body);
         /** @var XenForo_DataWriter_ConversationMaster $conversationDw */
         $conversationDw = XenForo_DataWriter::create('XenForo_DataWriter_ConversationMaster');
         $conversationDw->setExtraData(XenForo_DataWriter_ConversationMaster::DATA_ACTION_USER, $conversationUser);
         $conversationDw->setExtraData(XenForo_DataWriter_ConversationMaster::DATA_MESSAGE, $body);
         $conversationDw->set('user_id', $conversationUser['user_id']);
         $conversationDw->set('username', $conversationUser['username']);
         $conversationDw->set('title', utf8_substr($title, 0, 100));
         $conversationDw->set('open_invite', $conversation['open_invite']);
         $conversationDw->set('conversation_open', $conversation['conversation_locked'] ? 0 : 1);
         $conversationDw->addRecipientUserIds(array($user['user_id']));
         // bypasses permissions
         $messageDw = $conversationDw->getFirstMessageDw();
         $messageDw->set('message', $body);
         $conversationDw->save();
         $conversationModel->markConversationAsRead($conversationDw->get('conversation_id'), $conversationUser['user_id'], XenForo_Application::$time);
         if ($conversation['delete_type']) {
             $conversationModel->deleteConversationForUser($conversationDw->get('conversation_id'), $conversationUser['user_id'], $conversation['delete_type']);
         }
         if ($limitTime && microtime(true) - $s > $targetRunTime) {
             break;
         }
     }
     if (is_array($data['userIds'])) {
         $data['userIds'] = $userIds;
     }
     $actionPhrase = new XenForo_Phrase('messaging');
     $typePhrase = new XenForo_Phrase('users');
     $status = sprintf('%s... %s (%d)', $actionPhrase, $typePhrase, $data['count']);
     return $data;
 }
Example #5
0
 protected function _sendWelcomeEmail(array $user, array $option)
 {
     $fromName = $option['emailFromName'];
     $fromEmail = $option['emailFromEmail'];
     $title = $option['emailTitle'];
     $format = $option['emailFormat'];
     $body = $option['emailBody'];
     $phraseTitles = XenForo_Helper_String::findPhraseNamesFromStringSimple($title . $body);
     /** @var XenForo_Model_Phrase $phraseModel */
     $phraseModel = $this->getModelFromCache('XenForo_Model_Phrase');
     $phrases = $phraseModel->getPhraseTextFromPhraseTitles($phraseTitles, $user['language_id']);
     foreach ($phraseTitles as $search => $phraseTitle) {
         if (isset($phrases[$phraseTitle])) {
             $title = str_replace($search, $phrases[$phraseTitle], $title);
             $body = str_replace($search, $phrases[$phraseTitle], $body);
         }
     }
     if ($format == 'html') {
         $tokens = array('{name}' => htmlspecialchars($user['username']), '{email}' => htmlspecialchars($user['email']), '{id}' => $user['user_id']);
         $body = strtr($body, $tokens);
         $text = trim(htmlspecialchars_decode(strip_tags($body)));
     } else {
         $tokens = array('{name}' => $user['username'], '{email}' => $user['email'], '{id}' => $user['user_id']);
         $text = strtr($body, $tokens);
         $body = nl2br(htmlspecialchars($text));
     }
     $mail = XenForo_Mail::create('welcome_email', array('title' => $title, 'htmlBody' => $body, 'textBody' => $text), $user['language_id']);
     return $mail->queue($user['email'], $user['username'], array(), $fromEmail, $fromName);
 }
 public function execute(array $deferred, array $data, $targetRunTime, &$status)
 {
     $data = array_merge(array('start' => 0, 'count' => 0, 'criteria' => null, 'userIds' => null, 'alert' => array()), $data);
     $s = microtime(true);
     /* @var $userModel XenForo_Model_User */
     $userModel = XenForo_Model::create('XenForo_Model_User');
     /** @var XenForo_Model_Phrase $phraseModel */
     $phraseModel = XenForo_Model::create('XenForo_Model_Phrase');
     if (is_array($data['criteria'])) {
         $userIds = $userModel->getUserIds($data['criteria'], $data['start'], 1000);
     } else {
         if (is_array($data['userIds'])) {
             $userIds = $data['userIds'];
         } else {
             $userIds = array();
         }
     }
     if (!$userIds) {
         return false;
     }
     $replacements = array();
     $alert = $data['alert'];
     if ($alert['link_url']) {
         $link = '<a href="' . $alert['link_url'] . '" class="PopupItemLink">' . ($alert['link_title'] ? $alert['link_title'] : $alert['link_url']) . '</a>';
         $replacements['{link}'] = $link;
         if (strpos($alert['alert_body'], '{link}') === false) {
             $alert['alert_body'] .= ' {link}';
         }
     }
     $limitTime = $targetRunTime > 0;
     foreach ($userIds as $key => $userId) {
         $data['count']++;
         $data['start'] = $userId;
         unset($userIds[$key]);
         $user = $userModel->getUserById($userId);
         $body = $alert['alert_body'];
         $phraseTitles = XenForo_Helper_String::findPhraseNamesFromStringSimple($body);
         $phrases = $phraseModel->getPhraseTextFromPhraseTitles($phraseTitles, $user['language_id']);
         foreach ($phraseTitles as $search => $phraseTitle) {
             if (isset($phrases[$phraseTitle])) {
                 $body = str_replace($search, $phrases[$phraseTitle], $body);
             }
         }
         $replacements = array_merge($replacements, array('{name}' => htmlspecialchars($user['username']), '{id}' => $user['user_id']));
         $alert['alert_text'] = strtr($body, $replacements);
         if ($alert['user_id']) {
             $fromUser = $userModel->getUserById($alert['user_id']);
         } else {
             $fromUser = array('user_id' => 0, 'username' => '');
         }
         XenForo_Model_Alert::alert($user['user_id'], $fromUser['user_id'], $fromUser['username'], 'user', $user['user_id'], 'from_admin', $alert);
         if ($limitTime && microtime(true) - $s > $targetRunTime) {
             break;
         }
     }
     if (is_array($data['userIds'])) {
         $data['userIds'] = $userIds;
     }
     $actionPhrase = new XenForo_Phrase('alerting');
     $typePhrase = new XenForo_Phrase('users');
     $status = sprintf('%s... %s (%d)', $actionPhrase, $typePhrase, $data['count']);
     return $data;
 }
 public function execute(array $deferred, array $data, $targetRunTime, &$status)
 {
     $data = array_merge(array('start' => 0, 'count' => 0, 'criteria' => null, 'userIds' => null, 'email' => array()), $data);
     if (!XenForo_Application::get('config')->enableMail) {
         return false;
     }
     $s = microtime(true);
     /* @var $userModel XenForo_Model_User */
     $userModel = XenForo_Model::create('XenForo_Model_User');
     if (is_array($data['criteria'])) {
         $userIds = $userModel->getUserIds($data['criteria'], $data['start'], 1000);
     } else {
         if (is_array($data['userIds'])) {
             $userIds = $data['userIds'];
         } else {
             $userIds = array();
         }
     }
     if (!$userIds) {
         return false;
     }
     $options = XenForo_Application::getOptions();
     $email = $data['email'];
     $transport = XenForo_Mail::getTransport();
     $limitTime = $targetRunTime > 0;
     foreach ($userIds as $key => $userId) {
         $data['count']++;
         $data['start'] = $userId;
         unset($userIds[$key]);
         $user = $userModel->getUserById($userId);
         if (!$user['email']) {
             continue;
         }
         $phraseTitles = XenForo_Helper_String::findPhraseNamesFromStringSimple($email['email_title'] . $email['email_body']);
         /** @var XenForo_Model_Phrase $phraseModel */
         $phraseModel = XenForo_Model::create('XenForo_Model_Phrase');
         $phrases = $phraseModel->getPhraseTextFromPhraseTitles($phraseTitles, $user['language_id']);
         foreach ($phraseTitles as $search => $phraseTitle) {
             if (isset($phrases[$phraseTitle])) {
                 $email['email_title'] = str_replace($search, $phrases[$phraseTitle], $email['email_title']);
                 $email['email_body'] = str_replace($search, $phrases[$phraseTitle], $email['email_body']);
             }
         }
         $mailObj = new Zend_Mail('utf-8');
         $mailObj->setSubject($email['email_title'])->addTo($user['email'], $user['username'])->setFrom($email['from_email'], $email['from_name']);
         $bounceEmailAddress = $options->bounceEmailAddress;
         if (!$bounceEmailAddress) {
             $bounceEmailAddress = $options->defaultEmailAddress;
         }
         $toEmail = $user['email'];
         $bounceHmac = substr(hash_hmac('md5', $toEmail, XenForo_Application::getConfig()->globalSalt), 0, 8);
         $mailObj->addHeader('X-To-Validate', "{$bounceHmac}+{$toEmail}");
         if ($options->enableVerp) {
             $verpValue = str_replace('@', '=', $toEmail);
             $bounceEmailAddress = str_replace('@', "+{$bounceHmac}+{$verpValue}@", $bounceEmailAddress);
         }
         $mailObj->setReturnPath($bounceEmailAddress);
         if ($email['email_format'] == 'html') {
             $replacements = array('{name}' => htmlspecialchars($user['username']), '{email}' => htmlspecialchars($user['email']), '{id}' => $user['user_id']);
             $email['email_body'] = strtr($email['email_body'], $replacements);
             $text = trim(htmlspecialchars_decode(strip_tags($email['email_body'])));
             $mailObj->setBodyHtml($email['email_body'])->setBodyText($text);
         } else {
             $replacements = array('{name}' => $user['username'], '{email}' => $user['email'], '{id}' => $user['user_id']);
             $email['email_body'] = strtr($email['email_body'], $replacements);
             $mailObj->setBodyText($email['email_body']);
         }
         if (!$mailObj->getMessageId()) {
             $mailObj->setMessageId();
         }
         $thisTransport = XenForo_Mail::getFinalTransportForMail($mailObj, $transport);
         try {
             $mailObj->send($thisTransport);
         } catch (Exception $e) {
             XenForo_Error::logException($e, false, "Email to {$user['email']} failed: ");
             continue;
         }
         if ($limitTime && microtime(true) - $s > $targetRunTime) {
             break;
         }
     }
     if (is_array($data['userIds'])) {
         $data['userIds'] = $userIds;
     }
     $actionPhrase = new XenForo_Phrase('emailing');
     $typePhrase = new XenForo_Phrase('users');
     $status = sprintf('%s... %s (%d)', $actionPhrase, $typePhrase, $data['count']);
     return $data;
 }