задача - узнавать о неотправленных письмах самым простым способом. как это можно сделать?
раздел настроек и статусы рассылок доступны только администратору, но рассылки делают менеджеры. получается, они вообще не в курсе, когда письмо не отправляется из-за ошибки. смотреть лог рассылки тоже не вариант.
в идеале это сделать таблицу и дублировать в нее все ошибочные рассылки из edit_mailing.php. кто как решает эту проблему?
Как узнавать о неотправленных письмах в рассылке?
Автор d654525, 17 июня 2016 11:41
Сообщений в теме: 4
#1
Отправлено 17 Июнь 2016 - 11:41
#2
Отправлено 22 Июнь 2016 - 01:58
В mail_archive есть поле error_type. Можно расшифровку значений?
Сообщение отредактировал wondertalik: 22 Июнь 2016 - 02:36
#3
Отправлено 22 Июнь 2016 - 09:25
10 - ошибка smtp, текст ошибки в error_text
11 - пустой адрес
12 - некорректный адрес
21 - дубликат
22 - отписан
30 - отменено
Если по группам, то 1x - ошибка отправки, 2x - пропуск отправки, 3x - отмена отправки. Теоретически могут добавляться другие коды.
У смс еще есть 40 - не доставлено и "-1" - доставлено (0 - просто отправлено, как и в случае писем)
11 - пустой адрес
12 - некорректный адрес
21 - дубликат
22 - отписан
30 - отменено
Если по группам, то 1x - ошибка отправки, 2x - пропуск отправки, 3x - отмена отправки. Теоретически могут добавляться другие коды.
У смс еще есть 40 - не доставлено и "-1" - доставлено (0 - просто отправлено, как и в случае писем)
#4
Отправлено 22 Июнь 2016 - 18:00
Возможное решение. Создается таблица в кб ( table_id 861). И заполняем данными. Код вешается в крон.
<?php
/**
* Created by wondertalik.
* Date: 22.06.16
* Time: 0:07
* Дублирование рассылки в таблицу кб
*/
//оставляем в системной таблице только записи за 3 дня
$sql = "SELECT * FROM " . MAIL_THREADS . " WHERE `id` --> 1 AND `send_status` = 0 AND left(`add_time`, 10) < NOW() - INTERVAL 3 DAY";
$res = sql_query($sql);
while($row = sql_fetch_assoc($res)) {
sql_query("DELETE FROM ".MAIL_ARCHIVE." WHERE `thread_id` = ".$row['id']);
}
//чистим таблицу в кб
$sql = "DELETE FROM ".DATA_TABLE."861";
$res = sql_query($sql);
//выбираем threads
$sql = "SELECT * FROM " . MAIL_THREADS . " WHERE `id` > 1 AND `send_status` = 0 AND left(`add_time`, 10) >= NOW() - INTERVAL 3 DAY ORDER BY `id` DESC";
$result = sql_query($sql);
$tables = array();
while ($row = sql_fetch_assoc($result)) {
$dt = array();
//время создания
$dt['f19151'] = $row['add_time'];
//пользователь (тип пользователь)
$dt['f19161'] = $row['user_id'];
//рассылка
$dt['f19171'] = $row['name'];
$sql = "SELECT * FROM ".MAIL_ARCHIVE." WHERE `thread_id` = ".$row['id'];
$res = sql_query($sql);
//определяем таблицу по номеру формы
if(!isset($tables[$row['form_id']])) {
//получаем айди таблицы по форм айди
$sql2 = "SELECT * FROM ".FORMS_TABLE." WHERE `id` = ".$row['form_id'];
$res2 = sql_query($sql2);
$tbl = sql_fetch_assoc($res2);
$tables[$row['form_id']] = $tbl['table_id'];
}
while($row2 = sql_fetch_assoc($res)) {
//запись
$dt['f19181'] = "<a target="_blank" href="view_line2.php?table=".$tables[$row[" form_id']]."&line=".$row2['line_id']." '="">ссылка</a>";
//планируемое время отправки
$dt['f19201'] = $row['scheduled_time'];
//время завершения
$dt['f19211'] = $row2['sended_time'];
//email
$dt['f19191'] = $row2['email'];
$st = "Успешно";
if($row2['error_type'] != 0) {
$st = "Провалено";
//текст ошибки
switch ($row2['error_type']) {
case 10:
$dt['f19781'] = "ошибка smtp, текст ошибки в error_text";
break;
case 11:
$dt['f19781'] = "пустой адрес";
break;
case 12:
$dt['f19781'] = "некорректный адрес";
break;
case 21:
$dt['f19781'] = "дубликат";
break;
case 22:
$dt['f19781'] = "отписан";
break;
case 23:
$dt['f19781'] = "отменено";
break;
default:
if(!empty($row2['error_text'])) {
$dt['f19781'] = $row2['error_text'];
} else {
$dt['f19781'] = "";
}
}
}
//результат
$dt['f19221'] = $st;
data_insert(861, $dt);
}
}
Сообщение отредактировал wondertalik: 22 Июнь 2016 - 18:01
#5
Отправлено 24 Июнь 2016 - 16:19
Цитата
$dt['f19781'] = "ошибка smtp, текст ошибки в error_text";
Имелось ввиду, что для данного типа ошибки сообщение надо брать в поле "error_text" той же таблицы)
Количество пользователей, читающих эту тему: 7
0 пользователей, 7 гостей, 0 анонимных













