function send_mass_email($subject, $message, $target = false) { global $mybb, $db, $lang; $new_email = array("uid" => 1, "subject" => $db->escape_string($subject), "message" => $db->escape_string($message), "htmlmessage" => '', "format" => 0, "type" => 0, "dateline" => TIME_NOW, "senddate" => 0, "status" => 0, "sentcount" => 0, "totalcount" => 0, "conditions" => "", "perpage" => 50); $mid = $db->insert_query("massemails", $new_email); $conditions = array('email' => '', 'postnum' => '', 'postnum_dir' => 'greater_than', 'username' => '', 'usergroup' => array()); if ($target) { $conditions['email'] = $target; } $member_query = build_mass_mail_query($conditions); $query = $db->simple_select("users u", "COUNT(uid) AS num", $member_query); $num = $db->fetch_field($query, "num"); if ($num == 0) { return $lang->error_no_users; } else { $updated_email = array("totalcount" => $num, "conditions" => $db->escape_string(serialize($conditions))); $db->update_query("massemails", $updated_email, "mid='{$mid}'"); $delivery_date = TIME_NOW; $updated_email = array("status" => 1, "senddate" => $delivery_date); $db->update_query("massemails", $updated_email, "mid='{$mid}'"); return $num; } }
function task_massmail($task) { global $db, $mybb, $lang; $query = $db->simple_select("massemails", "*", "senddate <= '" . TIME_NOW . "' AND status IN (1,2)"); while ($mass_email = $db->fetch_array($query)) { if ($mass_email['status'] == 1) { $db->update_query("massemails", array('status' => 2), "mid='{$mass_email['mid']}'", 1); } $sentcount = 0; if (!$mass_email['perpage']) { $mass_email['perpage'] = 50; } if (strpos($mass_email['htmlmessage'], '<br />') === false && strpos($mass_email['htmlmessage'], '<br>') === false) { $mass_email['htmlmessage'] = nl2br($mass_email['htmlmessage']); } $mass_email['orig_message'] = $mass_email['message']; $mass_email['orig_htmlmessage'] = $mass_email['htmlmessage']; // Need to perform the search to fetch the number of users we're emailing $member_query = build_mass_mail_query(unserialize($mass_email['conditions'])); $count_query = $db->simple_select("users u", "COUNT(uid) AS num", $member_query); $mass_email['totalcount'] = $db->fetch_field($count_query, "num"); $query2 = $db->simple_select("users u", "u.uid, u.language, u.pmnotify, u.lastactive, u.username, u.email", $member_query, array('limit_start' => $mass_email['sentcount'], 'limit' => $mass_email['perpage'], 'order_by' => 'u.uid', 'order_dir' => 'asc')); while ($user = $db->fetch_array($query2)) { $replacement_fields = array("{uid}" => $user['uid'], "{username}" => $user['username'], "{email}" => $user['email'], "{bbname}" => $mybb->settings['bbname'], "{bburl}" => $mybb->settings['bburl'], "[" . $lang->massmail_username . "]" => $user['username'], "[" . $lang->email_addr . "]" => $user['email'], "[" . $lang->board_name . "]" => $mybb->settings['bbname'], "[" . $lang->board_url . "]" => $mybb->settings['bburl']); foreach ($replacement_fields as $find => $replace) { $mass_email['message'] = str_replace($find, $replace, $mass_email['message']); $mass_email['htmlmessage'] = str_replace($find, $replace, $mass_email['htmlmessage']); } // Private Message if ($mass_email['type'] == 1) { $pm_handler = new PMDataHandler(); $pm_handler->admin_override = true; $pm = array("subject" => $mass_email['subject'], "message" => $mass_email['message'], "fromid" => $mass_email['uid'], "options" => array("savecopy" => 0)); $pm['to'] = explode(",", $user['username']); $pm_handler->set_data($pm); if (!$pm_handler->validate_pm()) { $friendly_errors = implode('\\n', $pm_handler->get_friendly_errors()); add_task_log($task, $lang->sprintf($lang->task_massmail_ran_errors, htmlspecialchars_uni($user['username']), $friendly_errors)); $friendly_errors = ""; } else { $pm_handler->insert_pm(); } } else { switch ($mass_email['format']) { case 2: $format = "both"; $text_message = $mass_email['message']; $mass_email['message'] = $mass_email['htmlmessage']; break; case 1: $format = "html"; $text_message = ""; $mass_email['message'] = $mass_email['htmlmessage']; break; default: $format = "text"; $text_message = ""; } my_mail($user['email'], $mass_email['subject'], $mass_email['message'], "", "", "", false, $format, $text_message); } ++$sentcount; $mass_email['message'] = $mass_email['orig_message']; $mass_email['htmlmessage'] = $mass_email['orig_htmlmessage']; } $update_array = array(); $update_array['sentcount'] = $mass_email['sentcount'] + $sentcount; $update_array['totalcount'] = $mass_email['totalcount']; if ($update_array['sentcount'] >= $mass_email['totalcount']) { $update_array['status'] = 3; } $db->update_query("massemails", $update_array, "mid='{$mass_email['mid']}'", 1); } add_task_log($task, $lang->task_massmail_ran); }
</div> </body> </html> <?php exit; } if ($mybb->input['action'] == "resend") { // Copy and resend an email $query = $db->simple_select("massemails", "*", "mid='" . intval($mybb->input['mid']) . "'"); $mass_email = $db->fetch_array($query); if (!$mass_email['mid']) { flash_message($lang->error_invalid_mid, 'error'); admin_redirect("index.php?module=user-mass_mail"); } // Need to perform the search to fetch the number of users we're emailing $member_query = build_mass_mail_query(unserialize($mass_email['conditions'])); $query = $db->simple_select("users u", "COUNT(uid) AS num", $member_query); $total_recipients = $db->fetch_field($query, "num"); // Create the new email based off the old one. $new_email = array("uid" => $mass_email['uid'], "subject" => $db->escape_string($mass_email['subject']), "message" => $db->escape_string($mass_email['message']), "htmlmessage" => $db->escape_string($mass_email['htmlmessage']), "type" => $db->escape_string($mass_email['type']), "format" => $db->escape_string($mass_email['format']), "dateline" => TIME_NOW, "senddate" => '0', "status" => 0, "sentcount" => 0, "totalcount" => $total_recipients, "conditions" => $db->escape_string($mass_email['conditions']), "perpage" => $mass_email['perpage']); $mid = $db->insert_query("massemails", $new_email); // Redirect the user to the summary page so they can select when to deliver this message flash_message($lang->success_mass_mail_resent, 'success'); admin_redirect("index.php?module=user-mass_mail&action=send&step=4&mid={$mid}"); exit; } if ($mybb->input['action'] == "cancel") { if (!verify_post_check($mybb->input['my_post_key'])) { flash_message($lang->invalid_post_verify_key2, 'error'); admin_redirect("index.php?module=user-users"); }