Add exim_manager

This commit is contained in:
vijay 2025-05-06 01:35:09 +00:00
parent aa2c22785c
commit f8cb3fe61a

94
exim_manager Normal file
View File

@ -0,0 +1,94 @@
#!/bin/bash
# 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