задача - узнавать о неотправленных письмах самым простым способом. как это можно сделать?
раздел настроек и статусы рассылок доступны только администратору, но рассылки делают менеджеры. получается, они вообще не в курсе, когда письмо не отправляется из-за ошибки. смотреть лог рассылки тоже не вариант.
в идеале это сделать таблицу и дублировать в нее все ошибочные рассылки из edit_mailing.php. кто как решает эту проблему?
3
Как узнавать о неотправленных письмах в рассылке?
Автор 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" той же таблицы)
Количество пользователей, читающих эту тему: 4
0 пользователей, 4 гостей, 0 анонимных