diff --git a/modules/email/mail-queue-inspector.sh b/modules/email/mail-queue-inspector.sh index 3fe13c6..1d0a086 100755 --- a/modules/email/mail-queue-inspector.sh +++ b/modules/email/mail-queue-inspector.sh @@ -46,16 +46,19 @@ if [ "$MTA" = "exim" ]; then print_warning "$queue_count messages in queue" echo "" + # Cache queue list - single execution for all operations + queue_list=$(eval "$SYS_MAIL_CMD_QUEUE_LIST") + print_header "Recent Queue Messages (last 20)" - eval "$SYS_MAIL_CMD_QUEUE_LIST" | head -20 + echo "$queue_list" | head -20 echo "" print_header "Frozen Messages" # Count only lines that START with [frozen] (actual frozen message markers) - frozen=$(eval "$SYS_MAIL_CMD_QUEUE_LIST" | grep -c "^\[frozen\]" 2>/dev/null || true) + frozen=$(echo "$queue_list" | grep -c "^\[frozen\]" 2>/dev/null || true) if [ "$frozen" -gt 0 ]; then print_warning "$frozen frozen messages found" - eval "$SYS_MAIL_CMD_QUEUE_LIST" | grep "^\[frozen\]" | head -10 || true + echo "$queue_list" | grep "^\[frozen\]" | head -10 || true else print_success "No frozen messages" fi @@ -85,18 +88,21 @@ elif [ "$MTA" = "postfix" ]; then print_warning "$msg_count messages in queue" echo "" + # Cache queue list - single execution for all operations + queue_list=$(eval "$SYS_MAIL_CMD_QUEUE_LIST") + print_header "Queue Details (first 50)" - eval "$SYS_MAIL_CMD_QUEUE_LIST" | head -50 + echo "$queue_list" | head -50 echo "" print_header "Suspended Messages" # Postfix shows suspension reasons in parentheses on next line - suspended=$(eval "$SYS_MAIL_CMD_QUEUE_LIST" | grep -c "delivery temporarily suspended" 2>/dev/null || true) + suspended=$(echo "$queue_list" | grep -c "delivery temporarily suspended" 2>/dev/null || true) if [ "$suspended" -gt 0 ]; then print_warning "$suspended suspended messages found (delivery deferred)" # Show message ID and first line of suspension reason - eval "$SYS_MAIL_CMD_QUEUE_LIST" | grep -B1 "delivery temporarily suspended" | head -20 || true + echo "$queue_list" | grep -B1 "delivery temporarily suspended" | head -20 || true else print_success "No suspended messages" fi @@ -124,19 +130,22 @@ elif [ "$MTA" = "sendmail" ]; then print_warning "$msg_count messages in queue" echo "" + # Cache queue list - single execution for all operations + queue_list=$(eval "$SYS_MAIL_CMD_QUEUE_LIST") + print_header "Queue Details (first 50)" - eval "$SYS_MAIL_CMD_QUEUE_LIST" | head -50 + echo "$queue_list" | head -50 echo "" print_header "Deferred Messages" # Sendmail shows deferral reasons in parentheses on continuation lines # Continuation lines start with whitespace and opening parenthesis - deferred=$(eval "$SYS_MAIL_CMD_QUEUE_LIST" | grep -c "^[[:space:]]*(" 2>/dev/null || true) + deferred=$(echo "$queue_list" | grep -c "^[[:space:]]*(" 2>/dev/null || true) if [ "$deferred" -gt 0 ]; then print_warning "$deferred deferred messages found" # Show deferred message reasons (continuation lines starting with spaces and parenthesis) - eval "$SYS_MAIL_CMD_QUEUE_LIST" | grep "^[[:space:]]*(" | head -20 || true + echo "$queue_list" | grep "^[[:space:]]*(" | head -20 || true else print_success "No deferred messages" fi