Add exim_manager
This commit is contained in:
parent
aa2c22785c
commit
f8cb3fe61a
94
exim_manager
Normal file
94
exim_manager
Normal 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
|
||||
Loading…
x
Reference in New Issue
Block a user