[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Отправка почты по крону
sl1rt
День всем добрый (=
Столкнулся с такой проблемой:
Для системы автоматизации пришлось использовать cron для планирования отправки писем пользователям. Скрипт работает по принципу, если поля в БД совпадают, то делаем выборку нужных полей + почтовый адрес и отсылаем письмо по заранее заданному шаблону.
Проблема вся в том, что отправляется лишь одно письмо, которое получает лишь один человек и по 1 записи, даже если таковых у него несколько.

Используется такой скрипт отправки письма:

<?
public static function
Mail($to, $subject, $message, $from=SITE_NAME)
{
$subject=mb_convert_encoding($subject, MAIL_CHARSET, SITE_CHARSET);
$message=mb_convert_encoding($message, MAIL_CHARSET, SITE_CHARSET);
$from=mb_convert_encoding($from, MAIL_CHARSET, SITE_CHARSET);
//headers
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=" . MAIL_CHARSET . "\r\n";
//additional headers
$headers .= "To: $to\r\n";
$headers .= "From: $from\r\n";
//mail
$message="<meta http-equiv=\"Content-Type\" content=\"text/html; charset=" . MAIL_CHARSET . "\" />" . $message;
return mail($to, $subject, $message, $headers);
}
?>


Крон запилен таким образом:
<?

require_once ("../settings.php");
require_once(SITE_PATH . "/mmc_lib/classes/common.php");
require_once(SITE_PATH . "/mmc_lib/classes/database.php");
require_once(SITE_PATH . "/mmc_lib/classes/user.php");
require_once(SITE_PATH . "/mmc_lib/classes/module.php");
require_once(SITE_PATH . "/mmc_lib/classes/form.php");
require_once(SITE_PATH . "/mmc_work/mmc_user_functions.php");

error_reporting(E_ALL);

global $DB;

$DB = new CDatabase;
$DB->Connect();

$query = "SELECT * FROM order_tab WHERE (status_id=8 or status_id=42) and outsource_id=48 and highpriority=1";
//Производим выборку по необходимым параметрам

$DB->Query($query);
//Если такое есть, то
if($DB->NumRows()>0)
{
while ($row = $DB->Fetch())
//Флетчу ДБ
{
$outsource_id=$row['outsource_id'];
//Создаю массив
$pre_arr = array
(
'@@Device@@',
'@@DistrID@@',
'@@OrderID@@'
);
$post_arr = array
(
$row['device'],
$row['distr_id'],
$row['distr_oid']
);

//Загружаю форму для отправки письма
$template=MTGetPrintForm('absolute_priority');
//Выбираю почту юзера из БД
$DB->Query("select * from mmc_user_tab where id='$outsource_id' limit 1");
$row=$DB->Fetch();
//Читаю имя юзера
$pre_arr[]='@@Name@@';
$post_arr[]=$row['name'];
//Запихиваю все записи в $text
$text=str_replace($pre_arr, $post_arr, $template);
//Отправляю письмо
$res=CCommon::Mail($row['email'], 'Необходимо что-то сделать', $text, "От \"ООО "Тра-та-та"\" <noreply@blabla.ru>");

}
}

else
echo "Error of sending mail";

?>


Что-то я сделал неправильно, у кого есть какие-либо мысли, просьба писать, возможно вы уже сталкивались с данной проблемой. С отправкой почты перелопатил кучу нюансов, так и не смог разобраться именно с этим.
Спасибо (=



Спустя 1 час, 12 минут, 29 секунд (27.10.2011 - 14:00) Winston написал(а):
Цитата (sl1rt @ 27.10.2011 - 12:48)
"От \"ООО "Тра-та-та"\" <noreply@blabla.ru>"

С кавычками намудрено
'От "ООО "Тра-та-та"" <noreply@blabla.ru>'

Спустя 11 минут, 30 секунд (27.10.2011 - 14:12) sl1rt написал(а):
Письмо-то доходит...

Спустя 4 дня, 19 часов, 55 минут, 54 секунды (2.11.2011 - 10:08) sl1rt написал(а):
Нашел решение

<?
global $DB;

$DB = new CDatabase;
$DB->Connect();

$query = "SELECT * FROM order_tab WHERE (status_id=8 or status_id=42) and outsource_id>0 and highpriority=1";
$DB->Query($query);
$res = $DB->Result();

if($DB->NumRows()>0)
{
$template=MTGetPrintForm('absolute_priority');

while ($row = $DB->Fetch($res))
{
$outsource_id=$row['outsource_id'];

$pre_arr = array
(
'@@Device@@',
'@@DistrID@@',
'@@OrderID@@'
);

$post_arr = array
(
$row['device'],
$row['distr_id'],
$row['distr_oid']
);



$DB->Query("select * from mmc_user_tab where id='$outsource_id' limit 1");
$crow = $DB->Fetch();

$pre_arr[]='@@Name@@';
$post_arr[]=$crow['name'];

$text=str_replace($pre_arr, $post_arr, $template);

CCommon::Mail($crow['email'], 'Необходимо что-то сделать', $text, "От \"ООО "Тра-та-та"\" <noreply@blabla.ru>");
}

}


else
echo "None";

?>


_____________
Изучение боевых искусств сделает умного от природы ещё умнее,
а глупого от природы — не столь безнадёжным.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.