function sendQueue($pQueueMixed) { global $gBitSmarty, $gBitSystem, $gBitLanguage; static $body = array(); if (is_array($pQueueMixed)) { $pick = $pQueueMixed; } elseif (is_numeric($pQueueMixed)) { $pick = $this->mDb->GetRow("SELECT * FROM `" . BIT_DB_PREFIX . "mail_queue` mq WHERE `mail_queue_id` = ? " . $this->mDb->SQLForUpdate(), array($pQueueMixed)); } if (!empty($pick)) { $startTime = microtime(TRUE); $this->mDb->query("UPDATE `" . BIT_DB_PREFIX . "mail_queue` SET `begin_date`=? WHERE `mail_queue_id` = ? ", array(time(), $pick['mail_queue_id'])); if (!empty($pick['user_id'])) { $userHash = $this->mDb->getRow("SELECT * FROM `" . BIT_DB_PREFIX . "users_users` WHERE `user_id`=?", array($pick['user_id'])); $pick['full_name'] = BitUser::getDisplayName(FALSE, $userHash); } else { $pick['full_name'] = NULL; } if (!isset($body[$pick['content_id']])) { $gBitSmarty->assign('sending', TRUE); // We only support sending of newsletters currently $content = new BitNewsletterEdition(NULL, $pick['content_id']); if ($content->load()) { $body[$pick['content_id']]['body'] = $content->render(); $body[$pick['content_id']]['subject'] = $content->getTitle(); $body[$pick['content_id']]['reply_to'] = $content->getField('reply_to', $gBitSystem->getConfig('site_sender_email', $_SERVER['SERVER_ADMIN'])); $body[$pick['content_id']]['object'] = $content; } else { bit_error_log($this->mErrors); } // $content[$pick['content_id']] = LibertyBase::getLibertyObject(); } print "[ {$pick['mail_queue_id']} ] {$pick['content_id']} TO: {$pick['email']}\t"; $unsub = $this->getUnsubscription($pick['email'], $pick['nl_content_id']); if (!empty($unsub)) { print " SKIPPED (unsubscribed) <br/>\n"; $this->mDb->query("DELETE FROM `" . BIT_DB_PREFIX . "mail_queue` WHERE `mail_queue_id`=?", array($pick['mail_queue_id'])); } elseif (!empty($body[$pick['content_id']])) { $pick['url_code'] = md5($pick['content_id'] . $pick['email'] . $pick['queue_date']); $unsub = ''; if ($body[$pick['content_id']]['object']->mNewsletter->getField('unsub_msg')) { $gBitSmarty->assign('url_code', $pick['url_code']); } $gBitSystem->preDisplay(''); $gBitSmarty->assign('sending', TRUE); $gBitSmarty->assign('unsubMessage', $unsub); $gBitSmarty->assign('trackCode', $pick['url_code']); $gBitSmarty->assign('mid', 'bitpackage:newsletters/view_edition.tpl'); $htmlBody = $gBitSmarty->fetch('bitpackage:newsletters/mail_edition.tpl'); $htmlBody = bit_add_clickthrough($htmlBody, $pick['url_code']); $mailer = new PHPMailer(); if ($gBitSystem->getConfig('bitmailer_errors_to')) { $mailer->Sender = $gBitSystem->getConfig('bitmailer_errors_to'); $mailer->addCustomHeader("Errors-To: " . $gBitSystem->getConfig('bitmailer_errors_to')); } $mailer->From = $gBitSystem->getConfig('bitmailer_sender_email', $gBitSystem->getConfig('site_sender_email', $_SERVER['SERVER_ADMIN'])); $mailer->FromName = $gBitSystem->getConfig('bitmailer_from', $gBitSystem->getConfig('site_title')); $mailer->Host = $gBitSystem->getConfig('bitmailer_servers', $gBitSystem->getConfig('kernel_server_name', '127.0.0.1')); $mailer->Mailer = $gBitSystem->getConfig('bitmailer_protocol', 'smtp'); // Alternative to IsSMTP() $mailer->CharSet = 'UTF-8'; if ($gBitSystem->getConfig('bitmailer_smtp_username')) { $mailer->SMTPAuth = TRUE; $mailer->Username = $gBitSystem->getConfig('bitmailer_smtp_username'); } if ($gBitSystem->getConfig('bitmailer_smtp_password')) { $mailer->Password = $gBitSystem->getConfig('bitmailer_smtp_password'); } $mailer->WordWrap = $gBitSystem->getConfig('bitmailer_word_wrap', 75); if (!$mailer->SetLanguage($gBitLanguage->getLanguage(), UTIL_PKG_PATH . 'phpmailer/language/')) { $mailer->SetLanguage('en'); } $mailer->ClearReplyTos(); $mailer->AddReplyTo($body[$pick['content_id']]['reply_to'], $gBitSystem->getConfig('bitmailer_from')); $mailer->Body = $htmlBody; $mailer->Subject = $body[$pick['content_id']]['subject']; $mailer->IsHTML(TRUE); $mailer->AltBody = ''; $mailer->AddAddress($pick['email'], $pick["full_name"]); if ($mailer->Send()) { print " SENT " . round(microtime(TRUE) - $startTime, 2) . " secs<br/>\n"; flush(); $updateQuery = "UPDATE `" . BIT_DB_PREFIX . "mail_queue` SET `sent_date`=?,`url_code`=? WHERE `content_id`=? AND `email`=?"; $this->mDb->query($updateQuery, array(time(), $pick['url_code'], $pick['content_id'], $pick['email'])); } else { $updateQuery = "UPDATE `" . BIT_DB_PREFIX . "mail_queue` SET `mail_error`=?,`sent_date`=? WHERE `content_id`=? AND `email`=?"; $this->mDb->query($updateQuery, array($mailer->ErrorInfo, time(), $pick['content_id'], $pick['email'])); $pick['error'] = $mailer->ErrorInfo; $this->logError($pick); } } } }
<?php /** * Copyright (c) 2005 bitweaver.org * All Rights Reserved. See below for details and a complete list of authors. * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See http://www.gnu.org/copyleft/lesser.html for details * * created 2005/12/10 * * @package newsletters * @author spider <*****@*****.**> */ /** * Initialization */ require_once NEWSLETTERS_PKG_PATH . 'BitNewsletterEdition.php'; if (empty($gContent) || !is_object($gContent) || !$gContent->isValid()) { $editionId = !empty($_REQUEST['edition_id']) ? $_REQUEST['edition_id'] : NULL; $conId = !empty($_REQUEST['content_id']) ? $_REQUEST['content_id'] : NULL; $nlId = !empty($_REQUEST['nl_id']) ? $_REQUEST['nl_id'] : NULL; $gContent = new BitNewsletterEdition($editionId, $conId, $nlId); $gContent->load(); $gBitSmarty->assignByRef('gContent', $gContent); }