Перейти к контенту

Рассылка на мейл из форума HTML с аттачем, решена проблема кодировок


Рекомендуемые сообщения

Работает на php5 с отключенным безопасным режимом, на четвертых не будет работать. Интерфейсы писать поленился, все ошибки вывел через die()...

 

Почтовый класс взят из http://phpforum.ru/index.php?showtopic=20824 и отредактирован: переведен в кодировку винкириллица, в коде кодировка utf-8 заменена на windows-1251, удалены вызовы функций в конце файла, оставлен только сам класс. Файл помещен в директорию sources.

 

Создал новый подфорум для рассылок. Права по желанию. :D

 

Дальше правил только 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-сервера провайдера. Можно закрыть окно или даже браузер - рассылка будет продолжаться сервером сама собой.

 

НЕ СЛЕДУЕТ обновлять страницу в процессе рассылки - это приведет к повторной рассылке!!!

 

У хостеров типа джино-нет с убийством процессов из юникса по таймеру рассылка может быть прервана по таймеру юникса. Впрочем, для джино это не актуально, там все равно защищенный режим пхп, и класс мейлера работать не будет.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.