Столкнулся с такой проблемой:
Для системы автоматизации пришлось использовать 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";
$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";
?>
_____________
Изучение боевых искусств сделает умного от природы ещё умнее,
а глупого от природы — не столь безнадёжным.