smeserver-qmail-notify/postfix_notify.sh

61 lines
1.6 KiB
Bash

#!/bin/bash
# postfix-delay-notify.sh
# Custom delayed mail notifier for Postfix
# Configuration
DELAY_WARNING_HOURS=4 # Match delay_warning_time in main.cf
TEMPLATE_FILE="/etc/postfix/delay_template.txt"
LOCK_FILE="/tmp/postfix-delay-notify.lock"
LOG_FILE="/var/log/postfix-delay-notify.log"
# Create lock file or exit if already running
exec 9>"$LOCK_FILE" || exit 1
flock -n 9 || exit 1
# Function to log messages
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}
# Check template file exists
[[ -f "$TEMPLATE_FILE" ]] || {
log "Error: Template file $TEMPLATE_FILE not found"
exit 1
}
# Process mail queue
postqueue -p | awk '
BEGIN { OFS="|"; FS="[ *]" }
/^[A-F0-9]{10}\!/ {
qid=$1
sender=$(NF-1)
recipient=$NF
time=$3" "$4
print qid, sender, recipient, time
}' | while IFS='|' read -r qid sender recipient queue_time; do
# Calculate time in queue (hours)
queue_seconds=$(( $(date +%s) - $(date -d "$queue_time" +%s) ))
queue_hours=$(( queue_seconds / 3600 ))
if [[ $queue_hours -ge $DELAY_WARNING_HOURS ]]; then
# Generate notification using template
notification=$(sed -e "s/%HOSTNAME%/$(hostname)/g" \
-e "s/%DELAY%/$queue_hours hours/g" \
-e "s/%LIFETIME%/72 hours/g" \
"$TEMPLATE_FILE")
# Send notification
echo "From: postmaster@$(hostname)
To: $sender
Subject: Delivery Delay Notification
Content-Type: text/plain; charset=utf-8
$notification" | sendmail -t -oi
log "Sent delay notification for QID $qid to $sender"
fi
done
# Cleanup
rm -f "$LOCK_FILE"