Версия 1.9 Недочет при массовой рассылке.

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

При массовой рассылке Личных сообщений отправляется всего около 130 сообщений.

#1 26 ноября 2011 в 14:28
При массовой рассылке Личных сообщений отправляется всего около 130 сообщений. Бывает 133, бывает 129.
Скорее всего связано с set_time_limit();

Проверяю на DENWER`е.
В настройках админки указано Способ отправки: Функция mail в PHP
Увеличил до 120 (set_time_limit(120);). Отправилось 495 сообщений.
Установил set_time_limit(0); (т.е. снял ограничение).
Для рассылки сообщений 2049 пользователям потребовалось 9 мин. 41 сек.

Вряд ли какой-нибудь хостер разрешит устанавливать set_time_limit(0); или например, ini_set("max_execution_time", "600");

Как исправить?
#2 26 ноября 2011 в 14:39
в чем ошибка то?
#3 26 ноября 2011 в 14:48
Ошибка в том, что невозможно отправить сообщения ВСЕМ пользователям, если их больше 200.
Как исправить, что бы сообщения могли получить ВСЕ пользователи?
#4 26 ноября 2011 в 14:50
вопрос к вашему серверу/хостингу, cms здесь не причем.
тем более вы сами ответили на свой вопрос

Установил set_time_limit(0); (т.е. снял ограничение).

Александр
#5 26 ноября 2011 в 14:52
Мда… не ожидал такого ответа.
#6 26 ноября 2011 в 14:56
Fuze, вы знаете хосетра, который позволяет увеличить set_time_limit(); хотя бы до 600 сек.?
#7 26 ноября 2011 в 14:57
Чтобы другие пользователям не создавать такие темы и не спрашивать совета, уважаемый Fuze, измените, пожалуйста, в архиве с обновлением данное изменение. :)
#8 26 ноября 2011 в 14:59
Александр, нет не знаю.

не ожидал такого ответа

Александр
а что вы ожидали? у вас есть решение на уровне CMS? поделитесь.
#9 26 ноября 2011 в 15:00

измените в архиве с обновлением данное изменение

Korvin
какое? я что-то пропустил?)
#10 26 ноября 2011 в 15:08
Fuze, в каких файлах искать отправку сообщений пользователям.
#11 26 ноября 2011 в 15:18
\components\users\model.php
public function sendNotificationByEmail
#12 26 ноября 2011 в 15:35
Извиняюсь, пропустил информацию, что это было на денвере.
Лично я, когда занимался рассылкой спама по ящикам (сейчас забросил), использовал программу, в которой можно было настроить количество писем, отправляемых за определенный интервал времени.

Т.е. если в инстанте есть функция, в которой задан интервал, то её можно убрать (понимаю, что тогда это может привести к определенным последствиям со стороны почтовых серверов). Это пока то, что в голову пришло.
#13 26 ноября 2011 в 15:59
Korvin, ничего такого нет. Письма отправляются через foreach без каких либо задержек. Просто и тупо.
  1. foreach ($userlist as $key=>$usr){
  2. $msg_id = cmsUser::sendMessage(USER_MASSMAIL, $usr['id'], $message);
  3. $model->sendNotificationByEmail($usr['id'], $from_id, $msg_id);
  4. }
Естественно, что нужно писать код, который будет делать задержку на отправку кол-ва писем за 1 раз, проверять, отправились все письма или нет, если нет, отправить следующую "порцию" и т.д. до отправки ВСЕХ писем ВСЕМ пользователям.
Fuze решил, что это не проблема InstantCMS, а проблема юзера, который пользует "не правильного" хостера.
"Костыль", в виде set_time_limit(0), можно использовать только при тестах на Денвере, но никак не на работающем проекте.

у вас есть решение на уровне CMS? поделитесь.

Fuze
На данный момент у меня решения нет. В ближайшее время займусь этой проблемой.
Не сомневайтесь Fuze, поделюсь обязательно, т.к. в настоящее время пользоваться массовой рассылкой, тем у кого больше 130 юзеров, не предоставляется возможным.

Временное решение, для тех у кого больше 130 пользователей.
Массовая рассылка сообщений без отправки оповещения на email о новом сообщении:
В файле ../components/users/frontend.php найдите код
  1. foreach ($userlist as $key=>$usr){
  2. $msg_id = cmsUser::sendMessage(USER_MASSMAIL, $usr['id'], $message);
  3. $model->sendNotificationByEmail($usr['id'], $from_id, $msg_id);
  4. }
и замените его на
  1. foreach ($userlist as $key=>$usr){
  2. $msg_id = cmsUser::sendMessage(USER_MASSMAIL, $usr['id'], $message);
  3. //$model->sendNotificationByEmail($usr['id'], $from_id, $msg_id);
  4. }
#14 27 ноября 2011 в 02:06

тем у кого больше 130 юзеров, не предоставляется возможным.

Александр

меня около 2500 чел, как же проверить было отправлено сообщение на мыло или нет?
#15 27 ноября 2011 в 10:33
fact, сохраните свой сайт на комп., запустите на Денвере и проверьте сколько писем будет отправлено.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.