Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Страницы 1
Тема закрыта
Есть ли какие-либо плагины для массовой рассылки писем на почту пользователям?
этот mass mail в цикле пытается отправить всем пользователям сразу..
что вызывает нагрузку на сервер, да и не отсылаются в конечном итоге всем.. (у меня 1000 пользователей, практически никому не дошло)..
есть ли что-нибудь альтернативное?
Broadcast Email отсылает письма всем пользователям. Никто не встречал плагин или мод, чтобы письма отсылались только определенной группе?
Да уж, у меня, например, ограничение на 50 писем в час, нужно более гибкое решение.
Никто не встречал плагин или мод, чтобы письма отсылались только определенной группе?
Нет, никто не встречал, кому действительно надо, те не спрашивают, а ищут, притом не мод, а способ. В том же ap_broadcast_email мыла выдираются:
$sql = "SELECT username, email
FROM ".$db->prefix."users
WHERE username != 'Guest'
ORDER BY username";
Если врубить соображалку хоть на немного, то тогда получается такой код:
$sql = "SELECT username, email
FROM ".$db->prefix."users
WHERE username != 'Guest' and group_id = ".$g_id."
ORDER BY username";
Если еще на пару секунд, то в голову придет мысль что можно на форму кинуть textedit, хотя бы , элементарно, куда id, даже без названия группы.
Xbons
какое гибкое решение? Если стоит лимит, то ты и будешь отсылать по 50 писем в час, уж проще вручную отослать, чем что-то тут думать
Если еще на пару секунд, то в голову придет мысль что можно на форму кинуть textedit, хотя бы , элементарно, куда id, даже без названия группы.
Не будете ли Вы так любезны кинуть textedit .
50$! Ладно, шучу. Сейчас нет, может ближе к утру
Мсье Denis
я все-таки решился взяться за ваше предложение. Результат моих усилий Вы можете посмотреть здесь. К моему великому сожалению я не смог протестировать данную модификацию подключаемого модуля, вследствие того, что изменял его на локальном вебсервере. Буду очень рад, если это именно то, что Вы хотели, и работает правильно.
С уважением,
Вячеслав
Уважаемый господин Slavik.
Я очень рад, что Вы откликнулись на мою просьбу. Ведь Ваша модификация значительно расширяет область использования данного плагина. Все пользователи очень признательны Вам за это, а также за оперативность и доброжелательность. Плагин выполняет свои функции.
Если будет нужна помощь в любых делах, несвязанных с программированием, надеюсь, Вы обратитесь ко мне, и я смогу Вам помочь. Еще раз спасибо.
Удачи.
Редактировался Denis (2006-11-15 00:00:22)
А может, лучше, задумать о решении первой обозначенной проблемы? О том, что бы скрипт не слал всем одновременно письма, а ставил в очередь?
И еще один принципиальный момент, в каком формате посылаются письма? Как на счет наших реалий, кодировок и всего такого? Это ведь важно.
А может, лучше, задумать о решении первой обозначенной проблемы? О том, что бы скрипт не слал всем одновременно письма, а ставил в очередь?
В cron на сервере? Или куда?
И еще один принципиальный момент, в каком формате посылаются письма? Как на счет наших реалий, кодировок и всего такого? Это ведь важно.
Есть rfc, там все описано: как, куда и в какой кодировке. Есть девелоперы php, они реализуют протоколы в соответствии с rfc. Есть юзеры, они ни о чем не заботятся потому что есть девелоперы и rfc.
Slavik, гибкое решение - это когда отослал первым 50-ти, потом следующим и т.д., неисключено, что мод это умеет делать, но по первым сообщениям, я понял обратное, возможно ошибаюсь?
Редактировался Xbons (2006-11-29 17:13:44)
да, кстате - так ведь например происходи переиндексация форума с очень большим количеством сообщений!! - заевел номер последнего поста в прошлой индексации, и продолжаешь уже с него - по тому же принципу сделать - не послалось на этом юзере - вводишь - начать с него, и пошел дальше
Мсье Denis
я все-таки решился взяться за ваше предложение. Результат моих усилий Вы можете посмотреть здесь. К моему великому сожалению я не смог протестировать данную модификацию подключаемого модуля, вследствие того, что изменял его на локальном вебсервере. Буду очень рад, если это именно то, что Вы хотели, и работает правильно.
С уважением,
Вячеслав
Спасибо тебе за этот хак Slavik
но я в нем нашел одну загвоздку:
там по умолчанию стоит в 223-й строке:
<OPTION>Выбор группы</OPTION>
и вместо того чтобы выдавать ошибку выбора группы, плагин пытается искать пользователей с наименованием группы: "Выбор группы". и выдает ошибку синтаксиса SQL. я просто заменил на пустое место...
хотя можно и в 51-й строке заменить
if (trim($_POST['g_id']) == '')
на
if (trim($_POST['g_id']) == 'Выбор группы').
вот переведеная версия (ну уж простите меня за эти 8 КБАйт):
<?php
/***********************************************************************
Copyright (C) 2005 Terrell Russell ([email protected])
This file is part of PunBB.
PunBB is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published
by the Free Software Foundation; either version 2 of the License,
or (at your option) any later version.
PunBB is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston,
MA 02111-1307 USA
************************************************************************/
// Make sure no one attempts to run this script "directly"
if (!defined('PUN'))
exit;
// Tell admin_loader.php that this is indeed a plugin and that it is loaded
define('PUN_PLUGIN_LOADED', 1);
// --------------------------------------------------------------------
// Confirm Page
if (isset($_POST['confirm']))
{
// Make sure message body was entered
if (trim($_POST['message_body']) == '')
message('Вы не ввели тело письма!');
// Make sure message subject was entered
if (trim($_POST['message_subject']) == '')
message('Вы не ввели тему письма!');
// Make sure group id was entered
if (trim($_POST['g_id']) == '')
message('Вы не выбрали группу!');
// Display the admin navigation menu
generate_admin_menu($plugin);
$preview_message_body = nl2br(pun_htmlspecialchars($_POST['message_body']));
if ($_POST['g_id'] != 0) $adv = "and group_id = ".$_POST['g_id']; else $adv = '';
$sql = "SELECT count(*) AS usercount
FROM ".$db->prefix."users
WHERE username != 'Guest' ".$adv."
ORDER BY username";
// message($sql);
$result = $db->query($sql) or error('Could not get user count from database', __FILE__, __LINE__, $db->error());
$row = $db->fetch_assoc($result);
?>
<div id="exampleplugin" class="blockform">
<h2><span>Массовая рассылка - Подтверждение</span></h2>
<div class="box">
<div class="inbox">
<p>Пожалуйста подтвердите ваше вообщение ниже.<br /><br />Если чтото на правильно, пожалуйста <a href="javascript: history.go(-1)">Вернитесь</a>.</p>
</div>
</div>
<h2 class="block2"><span>Подтверждение сообщения</span></h2>
<div class="box">
<form id="broadcastemail" method="post" action="<?php echo $_SERVER['REQUEST_URI'] ?>">
<div class="inform">
<input type="hidden" name="message_subject" value="<?php echo pun_htmlspecialchars($_POST['message_subject']) ?>" />
<input type="hidden" name="message_body" value="<?php echo pun_htmlspecialchars($_POST['message_body']) ?>" />
<input type="hidden" name="g_id" value="<?php echo pun_htmlspecialchars($_POST['g_id']) ?>" />
<fieldset>
<legend>Получатели сообщения</legend>
<div class="infldset">
[ <strong><?php echo $row['usercount'] ?></strong> ] Зарегистрированных пользователей получат это сообщение (включая администратора).
</div>
</fieldset>
</div>
<div class="inform">
<fieldset>
<legend>Содержание сообщения</legend>
<div class="infldset">
<table class="aligntop" cellspacing="0">
<tr>
<th scope="row">Тема</th>
<td>
<?php echo pun_htmlspecialchars($_POST['message_subject']) ?>
</td>
</tr>
<tr>
<th scope="row">Тело письма</th>
<td>
<?php echo $preview_message_body ?>
</td>
</tr>
<tr>
<th scope="row">Группа</th>
<td>
<?php echo $_POST['g_id']?>
</td>
</table>
<div class="fsetsubmit"><input type="submit" name="send_message" value="Подтверждаю - Послать" tabindex="3" /></div>
<p class="topspace">Пожалуйста нажмите кнопку только однажды. Ожидайте сообщения о результате.</p>
</div>
</fieldset>
</div>
</form>
</div>
</div>
<?php
}
// --------------------------------------------------------------------
// Send the Message
else if (isset($_POST['send_message']))
{
require_once PUN_ROOT.'include/email.php';
// Display the admin navigation menu
generate_admin_menu($plugin);
if ($_POST['g_id'] != '0') $gid = "and group_id = ".$_POST['g_id']; else $gid = '';
$sql = "SELECT username, email
FROM ".$db->prefix."users
WHERE username != 'Guest' ".$gid."
ORDER BY username";
$result = $db->query($sql) or error('Could not get users from the database', __FILE__, __LINE__, $db->error());
while($row = $db->fetch_assoc($result))
{
$addresses[$row['username']] = $row['email'];
}
$usercount = count($addresses);
foreach ($addresses as $recipientname => $recipientemail)
{
$mail_to = $recipientname." <".$recipientemail.">";
$mail_subject = pun_htmlspecialchars($_POST['message_subject']);
$mail_message = pun_htmlspecialchars($_POST['message_body']);
pun_mail($mail_to, $mail_subject, $mail_message);
}
?>
<div class="block">
<h2><span>Массовая рассылка - Сообщение отослано</span></h2>
<div class="box">
<div class="inbox">
<p>Сообщение было отослано [ <strong><?php echo $usercount ?></strong> ] Зарегистрированным пользователям.</p>
<p>Вы так же получите администраторскую копию в через несколько минут.</p>
<p>Пожалуйста просмотрите администраторскую копию для проверки.</p>
</div>
</div>
</div>
<?php
}
// --------------------------------------------------------------------
// Display the Main Page
else
{
// Display the admin navigation menu
generate_admin_menu($plugin);
?>
<div id="exampleplugin" class="blockform">
<h2><span>Массовая рассылка e-mail</span></h2>
<div class="box">
<div class="inbox">
<p>Этот плагин позволяет администратору посылать массовые сообщения (e-mail) всем зарегистрированным пользователям</p>
<p>После заполнения формы на следующей странице будет запрошено подтверждение во избежание ошибок.</p>
</div>
</div>
<h2 class="block2"><span>Составление письма</span></h2>
<div class="box">
<form id="broadcastemail" method="post" action="<?php echo $_SERVER['REQUEST_URI'] ?>">
<div class="inform">
<fieldset>
<legend>Содержание письма</legend>
<div class="infldset">
<table class="aligntop" cellspacing="0">
<tr>
<th scope="row">Тема</th>
<td>
<input type="text" name="message_subject" size="50" tabindex="1" />
</td>
</tr>
<tr>
<th scope="row">Тело письма</th>
<td>
<textarea name="message_body" rows="14" cols="48" tabindex="2"></textarea>
</td>
</tr>
<tr>
<th scope="row">Группа</th>
<td>
<SELECT NAME="g_id">
<OPTION></OPTION>
<OPTION VALUE="0">Все группы</OPTION>
<?php
$result = $db->query("SELECT g_id, g_title FROM ".$db->prefix."groups WHERE g_title != 'Guest' ORDER BY g_id");
while ($groups = $db->fetch_assoc($result)) {
echo "<option value=".$groups['g_id'].">".$groups['g_title']."</option>";
}
?>
</SELECT>
</td>
</tr>
</table>
<div class="fsetsubmit"><input type="submit" name="confirm" value="перейти к подтверждению" tabindex="3" /></div>
</div>
</fieldset>
</div>
</form>
</div>
</div>
<?php
}
// --------------------------------------------------------------------
// Note that the script just ends here. The footer will be included by admin_loader.php.
я подшаманил Broadcast Email mod (AP_Broadcast_Email.php)
берет весь список пользователей, а не по группам или еще как, но отсылка почты ведется порциями. по умолчанию по 20 писем за шаг (можно задать свое). надеюсь кому-то поможет.
если php-шная функция mail() вернула ошибку, мы об этом узнаем!
в include/email.php найти
mail($to, $subject, $message, $headers);
заменить на
return mail($to, $subject, $message, $headers);
в директорию plugins залить AP_Power_Email.php отсюда:
http://master.1wd.ru/download/AP_Power_Email.zip
Кто поможет у меня на форуме глюк с рассылкой. Отправляю "Участникам" а они все приходят "Администратору" подскажите в чем проблема или хотя бы где искать. За ранее спасибо.
оффтоп:изврат использовать пхп для рассылки
Страницы 1
Тема закрыта