function digestTest() { header("Content-type: text/html"); $rv = prepare_headlines_digest($this->link, $_SESSION['uid'], 1, 1000); $rv[3] = "<pre>" . $rv[3] . "</pre>"; print_r($rv); }
/** * Send by mail a digest of last articles. * * @param mixed $link The database connection. * @param integer $limit The maximum number of articles by digest. * @return boolean Return false if digests are not enabled. */ function send_headlines_digests($debug = false) { require_once 'classes/ttrssmailer.php'; $user_limit = 15; // amount of users to process (e.g. emails to send out) $limit = 1000; // maximum amount of headlines to include if ($debug) { _debug("Sending digests, batch of max {$user_limit} users, headline limit = {$limit}"); } if (DB_TYPE == "pgsql") { $interval_query = "last_digest_sent < NOW() - INTERVAL '1 days'"; } elseif (DB_TYPE == "mysql") { $interval_query = "last_digest_sent < DATE_SUB(NOW(), INTERVAL 1 DAY)"; } $result = db_query("SELECT id,email FROM ttrss_users\n WHERE email != '' AND (last_digest_sent IS NULL OR {$interval_query})"); while ($line = db_fetch_assoc($result)) { if (@get_pref('DIGEST_ENABLE', $line['id'], false)) { $preferred_ts = strtotime(get_pref('DIGEST_PREFERRED_TIME', $line['id'], '00:00')); // try to send digests within 2 hours of preferred time if ($preferred_ts && time() >= $preferred_ts && time() - $preferred_ts <= 7200) { if ($debug) { _debug("Sending digest for UID:" . $line['id'] . " - " . $line["email"]); } $do_catchup = get_pref('DIGEST_CATCHUP', $line['id'], false); global $tz_offset; // reset tz_offset global to prevent tz cache clash between users $tz_offset = -1; $tuple = prepare_headlines_digest($line["id"], 1, $limit); $digest = $tuple[0]; $headlines_count = $tuple[1]; $affected_ids = $tuple[2]; $digest_text = $tuple[3]; if ($headlines_count > 0) { $mail = new ttrssMailer(); $rc = $mail->quickMail($line["email"], $line["login"], DIGEST_SUBJECT, $digest, $digest_text); if (!$rc && $debug) { _debug("ERROR: " . $mail->ErrorInfo); } if ($debug) { _debug("RC={$rc}"); } if ($rc && $do_catchup) { if ($debug) { _debug("Marking affected articles as read..."); } catchupArticlesById($affected_ids, 0, $line["id"]); } } elseif ($debug) { _debug("No headlines"); } db_query("UPDATE ttrss_users SET last_digest_sent = NOW()\n WHERE id = " . $line["id"]); } } } if ($debug) { _debug("All done."); } }
function digestTest() { header("Content-type: text/html"); require_once "digest.php"; $rv = prepare_headlines_digest($_SESSION['uid'], 1, 1000); $rv[3] = "<pre>" . $rv[3] . "</pre>"; print_r($rv); }
/** * Send by mail a digest of last articles. * * @param mixed $link The database connection. * @param integer $limit The maximum number of articles by digest. * @return boolean Return false if digests are not enabled. */ function send_headlines_digests($link, $limit = 100) { if (!DIGEST_ENABLE) { return false; } $user_limit = DIGEST_EMAIL_LIMIT; $days = 1; print "Sending digests, batch of max {$user_limit} users, days = {$days}, headline limit = {$limit}\n\n"; if (DB_TYPE == "pgsql") { $interval_query = "last_digest_sent < NOW() - INTERVAL '{$days} days'"; } else { if (DB_TYPE == "mysql") { $interval_query = "last_digest_sent < DATE_SUB(NOW(), INTERVAL {$days} DAY)"; } } $result = db_query($link, "SELECT id,email FROM ttrss_users \n\t\t\t\tWHERE email != '' AND (last_digest_sent IS NULL OR {$interval_query})"); while ($line = db_fetch_assoc($result)) { if (get_pref($link, 'DIGEST_ENABLE', $line['id'], false)) { print "Sending digest for UID:" . $line['id'] . " - " . $line["email"] . " ... "; $do_catchup = get_pref($link, 'DIGEST_CATCHUP', $line['id'], false); $tuple = prepare_headlines_digest($link, $line["id"], $days, $limit); $digest = $tuple[0]; $headlines_count = $tuple[1]; $affected_ids = $tuple[2]; $digest_text = $tuple[3]; if ($headlines_count > 0) { $mail = new PHPMailer(); $mail->PluginDir = "lib/phpmailer/"; $mail->SetLanguage("en", "lib/phpmailer/language/"); $mail->CharSet = "UTF-8"; $mail->From = DIGEST_FROM_ADDRESS; $mail->FromName = DIGEST_FROM_NAME; $mail->AddAddress($line["email"], $line["login"]); if (DIGEST_SMTP_HOST) { $mail->Host = DIGEST_SMTP_HOST; $mail->Mailer = "smtp"; $mail->SMTPAuth = DIGEST_SMTP_LOGIN != ''; $mail->Username = DIGEST_SMTP_LOGIN; $mail->Password = DIGEST_SMTP_PASSWORD; } $mail->IsHTML(true); $mail->Subject = DIGEST_SUBJECT; $mail->Body = $digest; $mail->AltBody = $digest_text; $rc = $mail->Send(); if (!$rc) { print "ERROR: " . $mail->ErrorInfo; } print "RC={$rc}\n"; if ($rc && $do_catchup) { print "Marking affected articles as read...\n"; catchupArticlesById($link, $affected_ids, 0, $line["id"]); } db_query($link, "UPDATE ttrss_users SET last_digest_sent = NOW() \n\t\t\t\t\t\t\tWHERE id = " . $line["id"]); } else { print "No headlines\n"; } } } print "All done.\n"; }
$uid = db_fetch_result($result, 0, "id"); print getGlobalUnread($link, $uid); if ($fresh) { print ";"; print getFeedArticles($link, -3, false, true, $uid); } } else { print "-1;User not found"; } $print_exec_time = false; break; // getUnread // getUnread case "digestTest": header("Content-Type: text/plain"); print_r(prepare_headlines_digest($link, $_SESSION["uid"])); $print_exec_time = false; break; // digestTest // digestTest case "digestSend": header("Content-Type: text/plain"); send_headlines_digests($link); $print_exec_time = false; break; // digestSend // digestSend case "getProfiles": $login = db_escape_string($_REQUEST["login"]); $password = db_escape_string($_REQUEST["password"]); if (authenticate_user($link, $login, $password)) {
/** * Send by mail a digest of last articles. * * @param mixed $link The database connection. * @param integer $limit The maximum number of articles by digest. * @return boolean Return false if digests are not enabled. */ function send_headlines_digests($link, $debug = false) { require_once 'lib/phpmailer/class.phpmailer.php'; $user_limit = 15; // amount of users to process (e.g. emails to send out) $limit = 1000; // maximum amount of headlines to include if ($debug) { _debug("Sending digests, batch of max {$user_limit} users, headline limit = {$limit}"); } if (DB_TYPE == "pgsql") { $interval_query = "last_digest_sent < NOW() - INTERVAL '1 days'"; } else { if (DB_TYPE == "mysql") { $interval_query = "last_digest_sent < DATE_SUB(NOW(), INTERVAL 1 DAY)"; } } $result = db_query($link, "SELECT id,email FROM ttrss_users\n\t\t\t\tWHERE email != '' AND (last_digest_sent IS NULL OR {$interval_query})"); while ($line = db_fetch_assoc($result)) { if (get_pref($link, 'DIGEST_ENABLE', $line['id'], false)) { $preferred_ts = strtotime(get_pref($link, 'DIGEST_PREFERRED_TIME', $line['id'], '00:00')); // try to send digests within 2 hours of preferred time if ($preferred_ts && time() >= $preferred_ts && time() - $preferred_ts <= 7200) { if ($debug) { print "Sending digest for UID:" . $line['id'] . " - " . $line["email"] . " ... "; } $do_catchup = get_pref($link, 'DIGEST_CATCHUP', $line['id'], false); global $tz_offset; // reset tz_offset global to prevent tz cache clash between users $tz_offset = -1; $tuple = prepare_headlines_digest($link, $line["id"], 1, $limit); $digest = $tuple[0]; $headlines_count = $tuple[1]; $affected_ids = $tuple[2]; $digest_text = $tuple[3]; if ($headlines_count > 0) { $mail = new PHPMailer(); $mail->PluginDir = "lib/phpmailer/"; $mail->SetLanguage("en", "lib/phpmailer/language/"); $mail->CharSet = "UTF-8"; $mail->From = SMTP_FROM_ADDRESS; $mail->FromName = SMTP_FROM_NAME; $mail->AddAddress($line["email"], $line["login"]); if (SMTP_HOST) { $mail->Host = SMTP_HOST; $mail->Mailer = "smtp"; $mail->SMTPAuth = SMTP_LOGIN != ''; $mail->Username = SMTP_LOGIN; $mail->Password = SMTP_PASSWORD; } $mail->IsHTML(true); $mail->Subject = DIGEST_SUBJECT; $mail->Body = $digest; $mail->AltBody = $digest_text; $rc = $mail->Send(); if (!$rc && $debug) { print "ERROR: " . $mail->ErrorInfo; } if ($debug) { print "RC={$rc}\n"; } if ($rc && $do_catchup) { if ($debug) { print "Marking affected articles as read...\n"; } catchupArticlesById($link, $affected_ids, 0, $line["id"]); } } else { if ($debug) { print "No headlines\n"; } } db_query($link, "UPDATE ttrss_users SET last_digest_sent = NOW()\n\t\t\t\t\t\tWHERE id = " . $line["id"]); } } } if ($debug) { _debug("All done."); } }