CAB |
Отправлено: 25 июня 2013 — 20:49
|
Super Member
Покинул форум
Сообщений всего: 629
Дата рег-ции: Февр. 2011
Откуда: Москва
Репутация: 30
|
CAB пишет:Предупреждения об удалении модом так и не отправляются. Мне кажется я нашёл решение.
1. Код выложенный мной в этих сообщениях http://exbb.info/community/topic...67451#1370467451 и http://exbb.info/community/topic...47514#1370547514 не использовать! Если уже его использовали - верните всё как было до этого.
2. В файле modules/mailer/Mailer.class.php функцию _toQueue заменяем на следующий кодCODE: function _toQueue($args, $priority) {
global $fm;
$skip_mails = (file_exists(FM_SKIP_MAILS)) ? file(FM_SKIP_MAILS) : array();
if (count($skip_mails) !== 0) {
unset($skip_mails[0]);
$skip_mails = preg_replace("#(\r\n|\|$)#","",trim(implode("|",$skip_mails)));
} else {
$skip_mails = "@";
}
$users = $fm->_Read(FM_USERS);
if (is_array($args[2])) {
foreach ($args[2] as $user_id => $flag) {
if (isset($users[$user_id]['m']) && !preg_match("#(".$skip_mails.")$#is",$users[$user_id]['m'])) {
$args_temp[$user_id] = $users[$user_id]['m'];
}
}
$args[2] = array();
$args[2] = $args_temp;
} else if (!isset($args[2]) || preg_match("#(".$skip_mails.")$#is",$args[2])) {
return;
}
// Config start
$config = $this->getConfig();
$id = $config['id'] = isset($config['id']) ? $config['id'] : 1;
// List start
$list = $fm->_Read2Write($fpList, FM_MAILER_LIST_FILE);
$list[$id] = array($priority, true);
if (is_array($args[2])) {
$list[$id][2] = count($args[2]);
}
// Mail
$fm->_Read2Write($fpMail, sprintf(FM_MAILER_MAIL_FORMAT, $id));
$fm->_Write($fpMail, array($args[0], $args[1], $args[2], $args[3], $args[4]));
// List end
ksort($list);
uasort($list, create_function('$a, $b', 'if ($a[0] == $b[0]) return 0; return $a[0] < $b[0] ? -1 : 1;'));
$fm->_Write($fpList, $list);
// Config end
$config['id']++;
$this->saveConfig($config);
return true;
}
Как обычно прошу Юру проверить правильность написания и всех протестировать на своих форумах. |
|
|
CAB |
Отправлено: 10 июля 2013 — 20:33
|
Super Member
Покинул форум
Сообщений всего: 629
Дата рег-ции: Февр. 2011
Откуда: Москва
Репутация: 30
|
Parapsixolog пишет:Я вот смотрю и смотрю на этот мод, но так и не пойму зачем он нужен. А точнее, в каком случае есть потребность для его установки. Этот мод нужен, если на хостинге есть ограничения на отправку писем. Как, например, здесь http://hosting.agava.ru/tp_normal.shtmlАгава пишет:Максимальное число писем в час 300
Время между отправкой писем 0.3 c.
Parapsixolog пишет:И я так же не понял доработку CAB, что она даёт Две вещи:
1. Устраняет ошибку в моде (некоторые письма не отправлялись с форума, в частности уведомления об удалении);
2. Позволяет запрещать отправку всех писем с форума на конкретные почтовые адреса и почтовые домены с помощью файла data/skip_mails.php аналогично данному функционалу без мода.
Parapsixolog пишет:как её вообще поставить. Нужно код _toQueue заменить на вышеприведённый код? Да. Я привёл полностью код функции _toQueue в моей модификации.
Parapsixolog пишет:И так несколько раз? Чего несколько раз?? |
|
|
Parapsixolog |
Отправлено: 11 июля 2013 — 04:40
|
Advanced Member
Покинул форум
Сообщений всего: 487
Дата рег-ции: Сент. 2011
Репутация: 14
|
CAB пишет:Parapsixolog пишет:
И так несколько раз?
Чего несколько раз??
Я по моему понял. В файле modules/mailer/Mailer.class.php нужно код:
CODE: function _toQueue($args, $priority) {
global $fm;
// Config start
$config = $this->getConfig();
$id = $config['id'] = isset($config['id']) ? $config['id'] : 1;
// List start
$list = $fm->_Read2Write($fpList, FM_MAILER_LIST_FILE);
$list[$id] = array($priority, true);
if (is_array($args[2])) {
$list[$id][2] = count($args[2]);
}
// Mail
$fm->_Read2Write($fpMail, sprintf(FM_MAILER_MAIL_FORMAT, $id));
$fm->_Write($fpMail, array($args[0], $args[1], $args[2], $args[3], $args[4]));
// List end
ksort($list);
uasort($list, create_function('$a, $b', 'if ($a[0] == $b[0]) return 0; return $a[0] < $b[0] ? -1 : 1;'));
$fm->_Write($fpList, $list);
// Config end
$config['id']++;
$this->saveConfig($config);
return true;
}
Заменить на ваш код. Правильно? |
|
|
Zeg |
Отправлено: 27 июля 2014 — 10:16
|
Super Member
Покинул форум
Сообщений всего: 891
Дата рег-ции: Март 2009
Откуда: Беларусь
Репутация: 89
|
Так не получится. Скажем, у хостера ограничение - 2000 сообщений в день, но не более 100 штук за раз. Значит, примерно 2000/24 = 82 в час. Значит, настройки будут какие-то такие:
Время накопления, например 15 минут (1/4 часа). Значит, за этот период 82/4 = не более 20 штук. Я бы поставил так:
"Количество e-mail для отправки за один период": 15
"Резервные места в периоде для первоочередных e-mail": 5
--------------
Итого 20 штук за 15 минут или 80 за час или 1920 за сутки, т.е. в ограничение влазим.
А вот параметр "Количество e-mail для отправки за один процесс" я ставлю примерно в 2 раза меньше, общего числа отправки сообщений за период, т.е. 10 штук. Как я понял - это кол-во писем, отсылаемых разово скриптом при его вызове. Т.о. 10 штук не превышает установленного ограничения в 100 штук за раз.
Первый момент. После настроек нужно в первые пару суток последить, чтобы в очереди не скапливались письма, особенно там, где есть большая посещаемость (300 человек в сутки и выше). Есть шанс, что при большом количестве отсылаемых писем, они не будут успевать отправляться. Тогда нужно говорить с хостером (увеличить кол-во писем в сутки/час) и менять настройки в бОльшую сторону.
Второй момент. У меня, например, этот мод пришлось отключить и вернуться к старыму методу рассылки (благо писем не много рассылается). Письмо накапливаются в очереди, отсылаются, никаких ошибок нигде не вылазит, но письма перестали доставляться. Просто тупо перестали доходить (возможно, какие-то настройки изменились на хостинге). Старый механизм при этом работает исправно.
(Добавление)
Большой период для накопления тоже не стОит делать, пользователь просто заждется письма
Я бы рекомендовал 5-15 минут. |
|
|
|