FatCat Опубликовано 21 Ноября 2009 Жалоба Поделиться Опубликовано 21 Ноября 2009 Работает на php5 с отключенным безопасным режимом, на четвертых не будет работать. Интерфейсы писать поленился, все ошибки вывел через die()... Почтовый класс взят из http://phpforum.ru/index.php?showtopic=20824 и отредактирован: переведен в кодировку винкириллица, в коде кодировка utf-8 заменена на windows-1251, удалены вызовы функций в конце файла, оставлен только сам класс. Файл помещен в директорию sources. Создал новый подфорум для рассылок. Права по желанию. Дальше правил только post_new_post.php: Найти: <?phpи ниже добавить// +FatCat Рассылка по группе из форума define(ADMIN_MGROUP,'4'); // Какая группа из какого форума становится рассылающей define(ADMIN_MAIL_FORUM,'139'); // Какой форум отдан под рассылку этой группе // -FatCat Рассылка по группе из форумаЗдесь нужно подставить свои цифры: айдишник админской группы (которая будет рассылать) и айдишник форума, который будет служить местом создания рассылки. Найти: $db_string = $DB->compile_db_insert_string( $this->post ); $DB->query("INSERT INTO ibf_posts (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")");и добавить выше//+FatCat Рассылка по группе из форума // Какая группа из какого форума становится рассылающей: if($class->forum['id'] == ADMIN_MAIL_FORUM and $ibforums->member['mgroup'] == ADMIN_MGROUP) { @set_time_limit(0); @ignore_user_abort(TRUE); include 'sources/IRB_Mailer.php'; if(!stristr($this->topic['description'],":") or !stristr($this->topic['description'],"@") or !stristr($this->topic['description'],".")) die("Ошибка: в поле описания темы должны быть через двоеточие без пробелов указаны обратный мейл и затем через запятую список групп для рассылки!"); $from = explode(":",trim($this->topic['description'])); $to = explode(",",$from[1]); for($i=0;$i<count($to);$i++)if( $to[$i] != intval($to[$i]) )die("Ошибка: в поле описания темы должны номера групп указываются только цифрами через запятую без пробелов и иных символов."); $to = $from[1]; $from = $from[0]; $language = array( 'no_text' => 'Нет текста письма', 'no_file' => 'Не указан путь до файла', 'no_path' => 'Нет файла по указанному пути', 'no_addresse' => 'Нет адреса получателя', 'not_correct' => 'E-mail указан некорректно', 'no_sender' => 'Нет отправителя', 'no_theme' => 'Нет темы письма', 'no_send' => 'По техническим причинам отправка письма в данный момент невозможна', ); $DB->query("SELECT name, email FROM ibf_members WHERE mgroup IN(".$to.")"); $counter = 0; $error_report = ""; while ( $r = $DB->fetch_row() ) { $file = "uploads/".$this->post['attach_id']; $mail = new IRB_Mailer($this->post['post'], $language); if($this->post['attach_id'])$mail -> attacheFile($file, $this->post['attach_file']); $mail -> setHtml(); $mail -> createTo(trim($r['email'])); $mail -> createFrom($from); $mail -> createSubject($std->txt_stripslashes($this->topic['title'])); $error = $mail -> sendMail(); if($error)$error_report .= "<li><b>".$r['name']."</b> (".$r['email']."): ".$error."</li>"; else $counter++; } $this->post['post'] = "<b>".$this->topic['title']."</b><br><br>".str_replace("\n","<br>",$this->post['post'])."<br><br><hr><b>Всего получателей:</b> ".$counter; if($error_report)$this->post['post'] .= "<h4>Ошибки при отправке:</h4><ol>".$error_report."</ol>"; } // -FatCat Рассылка по группе из форума Найти //--------------------------------------- // START TABLE //--------------------------------------- $class->output .= $class->html->table_structure();и добавить ниже// +FatCat: рассылка из форума: берем список групп if($class->forum['id'] == ADMIN_MAIL_FORUM and $ibforums->member['mgroup'] == ADMIN_MGROUP) { if(!$topic_desc) { $r_groups = array(); $DB->query("SELECT g_id FROM ibf_groups"); while ( $r = $DB->fetch_row() ) { $r_groups[] = $r['g_id']; } $topic_desc = "no@spam.me:".implode(",",$r_groups); } } // -FatCat: рассылка из форума: берем список групп Теперь для рассылки писем нужно в созданном подфоруме админом создать новую тему.Заголовок темы станет заголовком письма.В поле описания темы уже будет запись вида: "no@spam.me:1,2,3,4,5,6,7". Нужно вписать свой обратный мейл и оставить через запятые те группы, которым требуется рассылать мейлы. Затем написать текст сообщения. Можно использовать коды форума - форматирование будет сохранено в рассылаемых письмах. Следует иметь в виду, что таблица стилей и джаваскрипты в письмо не внедрятся, поэтому не следует использовать те ББ-коды, которым нужны стили или джаваскрипт. К сообщению можно приаттачить файл - он будет приаттачен к каждому письму. Создание сообщения может занять довольно долгое время в зависимости от числа пользователей под рассылку и от скорости работы SMTP-сервера провайдера. Можно закрыть окно или даже браузер - рассылка будет продолжаться сервером сама собой. НЕ СЛЕДУЕТ обновлять страницу в процессе рассылки - это приведет к повторной рассылке!!! У хостеров типа джино-нет с убийством процессов из юникса по таймеру рассылка может быть прервана по таймеру юникса. Впрочем, для джино это не актуально, там все равно защищенный режим пхп, и класс мейлера работать не будет. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.