Перейти к содержимому


Как узнавать о неотправленных письмах в рассылке?


Сообщений в теме: 4

#1 d654525

    Активный участник

  • Пользователи
  • PipPipPip
  • 90 сообщений

Отправлено 17 Июнь 2016 - 11:41

задача - узнавать о неотправленных письмах самым простым способом. как это можно сделать?
раздел настроек и статусы рассылок доступны только администратору, но рассылки делают менеджеры. получается, они вообще не в курсе, когда письмо не отправляется из-за ошибки. смотреть лог рассылки тоже не вариант.

в идеале это сделать таблицу и дублировать в нее все ошибочные рассылки из edit_mailing.php. кто как решает эту проблему?

#2 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 22 Июнь 2016 - 01:58

В mail_archive есть поле error_type. Можно расшифровку значений?

Сообщение отредактировал wondertalik: 22 Июнь 2016 - 02:36


#3 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 22 Июнь 2016 - 09:25

10 - ошибка smtp, текст ошибки в error_text
11 - пустой адрес
12 - некорректный адрес
21 - дубликат
22 - отписан
30 - отменено

Если по группам, то 1x - ошибка отправки, 2x - пропуск отправки, 3x - отмена отправки. Теоретически могут добавляться другие коды.

У смс еще есть 40 - не доставлено и "-1" - доставлено (0 - просто отправлено, как и в случае писем)

#4 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 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) &lt; 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` &gt; 1 AND `send_status` = 0 AND left(`add_time`, 10) &gt;= 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=&quot;.$tables[$row[" form_id']]."&amp;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 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 24 Июнь 2016 - 16:19

Цитата

$dt['f19781'] = "ошибка smtp, текст ошибки в error_text";

Имелось ввиду, что для данного типа ошибки сообщение надо брать в поле "error_text" той же таблицы)





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных