Файл: DESURE-dcms-f12de01ac63e/sys/plugins/classes/mail.class.php
Строк: 73
<?php
/**
* Формирование очереди писем email и поэтапная отправка.
*/
abstract class mail
{
/**
* отправка писем из очереди
* @param boolean $all Отправка сразу всех писем
* @return boolean
*/
static function queue_process($all = false)
{
// кто-то уже занялся отправкой сообщений
if (!$all && cache_events::get('mail.send_is_process')) {
return false;
}
// остальные запросы пусть пропускают отправку
cache_events::set('mail.send_is_process', true, 60);
$limit = $all ? '' : ' LIMIT 100';
$q = DB::me()->query("SELECT * FROM `mail_queue` " . $limit);
$res = DB::me()->prepare("DELETE FROM `mail_queue` WHERE `id` = ? LIMIT 1");
$started_time = time();
while ($started_time > time() - 2 && $queue = $q->fetch()) {
if (function_exists('set_time_limit')) {
@set_time_limit(30);
}
// другие запросы не должны мешать отправке текущих сообщений
cache_events::set('mail.send_is_process', true, 30);
if (mail::send($queue ['to'], $queue ['title'], $queue ['content'])) {
$res->execute(Array($queue['id']));
}
}
// разрешаем другим запросам отправлять сообщения
cache_events::set('mail.send_is_process', false);
return true;
}
/**
* Отправка Email или поставнока в очередь, если писем несколько
* @param string|array $toi Адресат или массив адресатов
* @param string $title заголовок сообщения
* @param string|array $content Содержимое письма
* @return boolean
*/
static function send($toi, $title, $content)
{
// если сообщение одно, то отправляем сразу
if (is_string($toi)) {
return self::sendOfMail($toi, $title, $content);
}
// если сообщений несколько, то ставим в очередь
$toi = (array)$toi;
if (!$toi) {
return false;
}
if (function_exists('set_time_limit')) {
set_time_limit(min(600, max(30, count($toi) / 2)));
}
$res = DB::me()->prepare("INSERT INTO `mail_queue` (`to`, `title`, `content`) VALUES (?, ?, ?)");
foreach ($toi as $k => $to) {
$res->execute(Array($to, $title, is_array($content) ? $content[$k] : $content));
}
return true;
}
/**
* Непосредственная отправка сообщения
* @global dcms $dcms
* @param string $to
* @param string $title
* @param string $content
* @return boolean
*/
static function sendOfMail($to, $title, $content)
{
global $dcms;
// отправка сообщения функцией mail
$EOL = "rn";
$headers = "From: "" . $dcms->sitename . "" <dcms@{$_SERVER['HTTP_HOST']}>$EOL";
$headers .= "Subject: $title$EOL";
$headers .= "Mime-Version: 1.0$EOL";
$headers .= "Content-Type: text/html; charset="utf-8"$EOL";
return mail($to, '=?utf-8?B?' . base64_encode($title) . '?=', $content, $headers);
}
}
?>