git subrepo clone https://github.com/mailcow/mailcow-dockerized.git mailcow/src/mailcow-dockerized
subrepo: subdir: "mailcow/src/mailcow-dockerized"
merged: "a832becb"
upstream: origin: "https://github.com/mailcow/mailcow-dockerized.git"
branch: "master"
commit: "a832becb"
git-subrepo: version: "0.4.3"
origin: "???"
commit: "???"
Change-Id: If5be2d621a211e164c9b6577adaa7884449f16b5
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.mailq.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.mailq.inc.php
new file mode 100644
index 0000000..f42ab7c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.mailq.inc.php
@@ -0,0 +1,121 @@
+<?php
+function mailq($_action, $_data = null) {
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ function process_mailq_output($returned_output, $_action, $_data) {
+ if ($returned_output !== NULL) {
+ if ($_action == 'cat') {
+ logger(array('return' => array(
+ array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'queue_cat_success'
+ )
+ )));
+ return $returned_output;
+ }
+ else {
+ if (isset($returned_output['type']) && $returned_output['type'] == 'danger') {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'Error: ' . $returned_output['msg']
+ );
+ }
+ if (isset($returned_output['type']) && $returned_output['type'] == 'success') {
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'queue_command_success'
+ );
+ }
+ }
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'unknown'
+ );
+ }
+ }
+ if ($_action == 'get') {
+ $mailq_lines = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => 'list'));
+ $lines = 0;
+ // Hard limit to 10000 items
+ foreach (preg_split("/((\r?\n)|(\r\n?))/", $mailq_lines) as $mailq_item) if ($lines++ < 10000) {
+ if (empty($mailq_item) || $mailq_item == '1') {
+ continue;
+ }
+ $mq_line = json_decode($mailq_item, true);
+ if ($mq_line !== NULL) {
+ $rcpts = array();
+ foreach ($mq_line['recipients'] as $rcpt) {
+ if (isset($rcpt['delay_reason'])) {
+ $rcpts[] = $rcpt['address'] . ' (' . $rcpt['delay_reason'] . ')';
+ }
+ else {
+ $rcpts[] = $rcpt['address'];
+ }
+ }
+ if (!empty($rcpts)) {
+ $mq_line['recipients'] = $rcpts;
+ }
+ $line[] = $mq_line;
+ }
+ }
+ if (!isset($line) || empty($line)) {
+ return '[]';
+ }
+ else {
+ return json_encode($line);
+ }
+ }
+ elseif ($_action == 'delete') {
+ if (!is_array($_data['qid'])) {
+ $qids = array();
+ $qids[] = $_data['qid'];
+ }
+ else {
+ $qids = $_data['qid'];
+ }
+ $docker_return = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => 'delete', 'items' => $qids));
+ process_mailq_output(json_decode($docker_return, true), $_action, $_data);
+ }
+ elseif ($_action == 'cat') {
+ if (!is_array($_data['qid'])) {
+ $qids = array();
+ $qids[] = $_data['qid'];
+ }
+ else {
+ $qids = $_data['qid'];
+ }
+ $docker_return = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => 'cat', 'items' => $qids));
+ return process_mailq_output($docker_return, $_action, $_data);
+ }
+ elseif ($_action == 'edit') {
+ if (in_array($_data['action'], array('hold', 'unhold', 'deliver'))) {
+ if (!is_array($_data['qid'])) {
+ $qids = array();
+ $qids[] = $_data['qid'];
+ }
+ else {
+ $qids = $_data['qid'];
+ }
+ if (!empty($qids)) {
+ $docker_return = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => $_data['action'], 'items' => $qids));
+ process_mailq_output(json_decode($docker_return, true), $_action, $_data);
+ }
+ }
+ if (in_array($_data['action'], array('flush', 'super_delete'))) {
+ $docker_return = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => $_data['action']));
+ process_mailq_output(json_decode($docker_return, true), $_action, $_data);
+ }
+ }
+}