96 lines
3.1 KiB
Bash
96 lines
3.1 KiB
Bash
#!/bin/bash
|
|
# wget -O /tmp/exim_manager.sh https://git.technozone.com.au/vijay/Scripts/raw/branch/main/exim_manager && bash /tmp/exim_manager.sh && rm -f /tmp/exim_manager.sh
|
|
|
|
# Function to list the number of emails in the queue
|
|
list_queue_count() {
|
|
local count=$(exim -bpc)
|
|
echo "Number of emails in the queue: $count"
|
|
}
|
|
|
|
# Function to read an email by message ID
|
|
read_email() {
|
|
read -p "Enter the message ID: " message_id
|
|
if exim -Mvh "$message_id" &>/dev/null; then
|
|
exim -Mvh "$message_id" # Show the headers
|
|
exim -M "$message_id" # Show the full message
|
|
else
|
|
echo "Message ID $message_id not found."
|
|
fi
|
|
}
|
|
|
|
# Function to provide a list of message IDs
|
|
list_message_ids() {
|
|
echo "Message IDs in the queue:"
|
|
exim -bp | awk '{print $3}' # Extract message IDs from the queue
|
|
}
|
|
|
|
# Function to delete all emails in the queue
|
|
delete_all_emails() {
|
|
read -p "Are you sure you want to delete all emails in the queue? (y/n): " confirm
|
|
if [[ "$confirm" == "y" ]]; then
|
|
exim -bpr | awk '{print $3}' | xargs exim -Mrm
|
|
echo "All emails in the queue have been deleted."
|
|
else
|
|
echo "Operation canceled."
|
|
fi
|
|
}
|
|
|
|
# Function to show the last 20 messages from the log
|
|
show_last_messages() {
|
|
echo "Last 20 messages from the Exim log:"
|
|
echo "User | From Address | To Address | Count"
|
|
echo "------------------------------------------"
|
|
|
|
# Automatically determine the Exim log path
|
|
local log_file
|
|
if [[ -f /var/log/exim4/mainlog ]]; then
|
|
log_file="/var/log/exim4/mainlog"
|
|
elif [[ -f /var/log/exim/main.log ]]; then
|
|
log_file="/var/log/exim/main.log"
|
|
elif [[ -f /var/log/exim/exim.log ]]; then
|
|
log_file="/var/log/exim/exim.log"
|
|
else
|
|
echo "Exim log file not found."
|
|
return
|
|
fi
|
|
|
|
# Get the last 20 log entries
|
|
local log_entries=$(tail -n 20 "$log_file")
|
|
|
|
# Process the log entries to extract user, from, and to addresses
|
|
echo "$log_entries" | grep "from=<" | while read -r line; do
|
|
# Extract the sender, recipient, and user
|
|
from=$(echo "$line" | grep -oP 'from=<\K[^>]+')
|
|
to=$(echo "$line" | grep -oP 'to=<\K[^>]+')
|
|
user=$(echo "$line" | grep -oP 'user=<\K[^>]+')
|
|
|
|
# Print the results if all fields are present
|
|
if [[ -n "$from" && -n "$to" && -n "$user" ]]; then
|
|
echo "$user | $from | $to"
|
|
fi
|
|
done | sort | uniq -c | sort -nr | awk '{print $2, $3, $4, $1}' | column -t
|
|
}
|
|
|
|
# Main menu
|
|
while true; do
|
|
echo "Exim Queue Manager"
|
|
echo "1. List number of emails in queue"
|
|
echo "2. Read email by message ID"
|
|
echo "3. Provide list of message IDs"
|
|
echo "4. Delete all emails in the queue"
|
|
echo "5. Show last 20 messages from the log"
|
|
echo "6. Exit"
|
|
read -p "Choose an option [1-6]: " option
|
|
|
|
case $option in
|
|
1) list_queue_count ;;
|
|
2) read_email ;;
|
|
3) list_message_ids ;;
|
|
4) delete_all_emails ;;
|
|
5) show_last_messages ;;
|
|
6) echo "Exiting..."; exit 0 ;;
|
|
*) echo "Invalid option. Please try again." ;;
|
|
esac
|
|
echo ""
|
|
done
|