0) $PAUSE = 3600/$USER_DETAILS['PerHour']; // this is so we can find the right links, images, attachments etc. $CURRENTADMIN = $USER_DETAILS; // load up the newsletter to send! $send_result = mysql_query("SELECT * FROM " . $TABLEPREFIX . "sends WHERE SendID='".addslashes($SERVER_SEND['SendID'])."'"); $send=mysql_fetch_assoc($send_result); mysql_free_result($send_result); if($send['DateStarted']==0) { $result = mysql_query("UPDATE " . $TABLEPREFIX . "sends SET DateStarted='".addslashes(time())."' WHERE SendID='".addslashes($SERVER_SEND['SendID'])."'"); $send['DateStarted'] = $SYSTEMTIME; } // now make sure we have someone to send this to! $query = "SELECT COUNT(*) FROM " . $TABLEPREFIX . "send_recipients WHERE SendID='".addslashes($SERVER_SEND['SendID'])."' AND Problems='0'"; $count_check = mysql_query($query); $total_recips = mysql_result($count_check, 0, 0); mysql_free_result($count_check); if($total_recips == 0) { $update_result = mysql_query("UPDATE " . $TABLEPREFIX . "sends SET Completed='1', DateEnded='".addslashes(time())."' WHERE SendID='".addslashes($SERVER_SEND['SendID'])."'"); $query = "UPDATE " . $TABLEPREFIX . "server_sends SET InProgress=0, Notified=0, Finished='".addslashes($SYSTEMTIME)."' WHERE ServerSendID='".addslashes($SERVER_SEND['ServerSendID']) . "'"; $result = mysql_query($query); NotifySchedulerAdmin('finish', $SERVER_SEND['ServerSendID']); continue; } $query = "SELECT MemberID, Format, Problems FROM " . $TABLEPREFIX . "send_recipients WHERE SendID='".addslashes($SERVER_SEND['SendID'])."' AND Problems='0'"; $result = mysql_query($query); $using_sockets = false; if ($USER_DETAILS['EmailServer'] || $USER_DETAILS['EmailServer'] != '') $using_sockets = true; $per_socket = 0; $member_count = 0; while ($e = mysql_fetch_assoc($result)) { $member_count++; $per_socket++; $mark_as_problem_query = "UPDATE " . $TABLEPREFIX . "send_recipients SET Problems='1' WHERE MemberID='".addslashes($e['MemberID'])."' AND SendID='".addslashes($SERVER_SEND['SendID'])."'"; if($e['MemberID']>0) { //send the email! $TheEmail = CreateEmail($SERVER_SEND['SendID'], $e['MemberID'], $e['Format'], $send); // this will stop blank emails being sent to text subscribers if you send a html newsletter.. if (!$TheEmail) { $skip = true; if ($e['Format'] == 2) { $TheEmail = CreateEmail($SERVER_SEND['SendID'], $e['MemberID'], 1, $send); if ($TheEmail != '') { $skip = false; } } if ($skip) { $temp_mem = load_member($e['MemberID'], $list_details['ListID']); log_mailing_error(DisplayDate(time()) . ',' . $temp_mem['Email'] . ',' . 'Subscriber would have received a blank email (subscribed to receive ' . (($e['Format'] == 2) ? 'HTML' : 'TEXT') . ')'); $problem_result = mysql_query($mark_as_problem_query); continue; } } if (Banned($TheEmail['Email'], $send['ListID'])) { log_mailing_error(DisplayDate(time()) . ',' . $TheEmail['Email'] . ',' . 'Email address (or domain) is banned from the mailing list'); $problem_result = mysql_query($mark_as_problem_query); continue; } $subject = EmailBody('0', $e['MemberID'], $e['Format'], $TheEmail['Subject'], array(), $send['ListID']); $servermsg = false; if ($TheEmail['Email']) { // if they are using a specific server, use the SendEmail function... if ($using_sockets) { $emailmsg = "To: " . $TheEmail['Email'] . "\n" . "Subject: " . $subject . "\n" . $TheEmail['Headers'] . "\n" . $TheEmail['Body']; list($email_result, $servermsg) = SendEmail($TheEmail['Email'], $TheEmail['ReturnPath'], $emailmsg, $USER_DETAILS['EmailServer'], $USER_DETAILS['EmailServerPort']); } // if there is no email server set, then use the internal php function. if (!$using_sockets) { if (SAFE_MODE) { $email_result = mail($TheEmail['Email'], $subject, $TheEmail['Body'], $TheEmail['Headers']); } else { $email_result = mail($TheEmail['Email'], $subject, $TheEmail['Body'], $TheEmail['Headers'], '-f' . $TheEmail['ReturnPath']); } } if ($email_result) { //mark off as sent! $del_result = mysql_query("DELETE FROM " . $TABLEPREFIX . "send_recipients WHERE SendID='".addslashes($SERVER_SEND['SendID'])."' AND MemberID='".addslashes($e['MemberID'])."'"); if($e['Format'] == 1) { $s=", TextRecipients=TextRecipients+1"; } else { $s=", HTMLRecipients=HTMLRecipients+1"; } $update_result = mysql_query("UPDATE " . $TABLEPREFIX . "sends SET EmailsSent=EmailsSent+1 $s WHERE SendID='".addslashes($SERVER_SEND['SendID'])."'"); } else { $logmsg = 'Unable to Email'; if ($servermsg) $logmsg .= ': ' . $servermsg; log_mailing_error(DisplayDate(time()) . ',' . $TheEmail['Email'] . ',' . $logmsg); $mark_result = mysql_query($mark_as_problem_query); } } else { log_mailing_error(DisplayDate(time()) . ',' . $TheEmail['Email'] . ',' . 'Unable to find email address for subscriber'); $mark_result = mysql_query($mark_as_problem_query); } } else { log_mailing_error(DisplayDate(time()) . ',' . $TheEmail['Email'] . ',' . 'MemberID < 0! Notify System Administrator'); $mark_result = mysql_query($mark_as_problem_query); } if ($per_socket >= $PER_SOCKET_SEND && $using_sockets && isset($GLOBALS['EMAIL_SOCKET'])) { fputs($GLOBALS['EMAIL_SOCKET'], "quit"); sleep(1); fclose($GLOBALS['EMAIL_SOCKET']); unset($GLOBALS['EMAIL_SOCKET']); $per_socket = 0; } // check to make sure the scheduled event hasn't been paused.. $ss = FetchSend($SERVER_SEND['ServerSendID']); if ($ss['Paused']) { if ($using_sockets && isset($GLOBALS['EMAIL_SOCKET'])) { fputs($GLOBALS['EMAIL_SOCKET'], "quit"); sleep(1); fclose($GLOBALS['EMAIL_SOCKET']); unset($GLOBALS['EMAIL_SOCKET']); } continue; } if ($PAUSE > 0 && $PAUSE < 1) { $p = floor($PAUSE*1000000); usleep($p); } else { sleep(floor($PAUSE)); } } mysql_free_result($result); if ($using_sockets && isset($GLOBALS['EMAIL_SOCKET'])) { fputs($GLOBALS['EMAIL_SOCKET'], "quit"); sleep(1); fclose($GLOBALS['EMAIL_SOCKET']); unset($GLOBALS['EMAIL_SOCKET']); } $update_result = mysql_query("UPDATE " . $TABLEPREFIX . "sends SET Completed='1', DateEnded='".addslashes(time())."' WHERE SendID='".addslashes($SERVER_SEND['SendID'])."'"); $query = "UPDATE " . $TABLEPREFIX . "server_sends SET Finished='".addslashes($SYSTEMTIME)."', InProgress=0, Notified=0 WHERE ServerSendID='".addslashes($SERVER_SEND['ServerSendID'])."'"; $update_result = mysql_query($query); NotifySchedulerAdmin('finish', $SERVER_SEND['ServerSendID']); } exit(); ?>