示例#1
0
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;
    }
}
示例#2
0
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);
}
示例#3
0
	</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");
    }