Added script
This commit is contained in:
parent
e61a2866f4
commit
f6cfd3a94f
175
generate_email_alias.sh
Executable file
175
generate_email_alias.sh
Executable file
@ -0,0 +1,175 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Get script directory
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
|
||||||
|
# Load configuration
|
||||||
|
source "$SCRIPT_DIR/mailcow.conf"
|
||||||
|
|
||||||
|
# Clipboard helper function
|
||||||
|
copy_to_clipboard() {
|
||||||
|
if command -v xclip >/dev/null 2>&1; then
|
||||||
|
echo -n "$1" | xclip -selection clipboard
|
||||||
|
echo "(Copied to clipboard via xclip)"
|
||||||
|
elif command -v wl-copy >/dev/null 2>&1; then
|
||||||
|
echo -n "$1" | wl-copy
|
||||||
|
echo "(Copied to clipboard via wl-copy)"
|
||||||
|
elif command -v pbcopy >/dev/null 2>&1; then
|
||||||
|
echo -n "$1" | pbcopy
|
||||||
|
echo "(Copied to clipboard via pbcopy)"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create a new alias
|
||||||
|
create_alias() {
|
||||||
|
local SITE="$1"
|
||||||
|
local DOMAIN_CHOICE="$2"
|
||||||
|
|
||||||
|
if [ -z "$SITE" ]; then
|
||||||
|
echo "Error: You must provide a site name or identifier."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Select domain
|
||||||
|
if [ -n "$DOMAIN_CHOICE" ]; then
|
||||||
|
SELECTED_DOMAIN="$DOMAIN_CHOICE"
|
||||||
|
else
|
||||||
|
echo "Select a domain:"
|
||||||
|
for i in "${!DOMAINS[@]}"; do
|
||||||
|
echo "$((i+1))) ${DOMAINS[$i]}"
|
||||||
|
done
|
||||||
|
read -rp "Enter choice number: " choice
|
||||||
|
INDEX=$((choice-1))
|
||||||
|
if [[ $INDEX -ge 0 && $INDEX -lt ${#DOMAINS[@]} ]]; then
|
||||||
|
SELECTED_DOMAIN="${DOMAINS[$INDEX]}"
|
||||||
|
else
|
||||||
|
echo "Invalid choice. Defaulting to ${DOMAINS[0]}"
|
||||||
|
SELECTED_DOMAIN="${DOMAINS[0]}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
local RAND=$(tr -dc a-z0-9 </dev/urandom | head -c ${RANDOM_LENGTH})
|
||||||
|
local ALIAS="${SITE}-${RAND}@${SELECTED_DOMAIN}"
|
||||||
|
|
||||||
|
echo "Creating alias: $ALIAS -> $REAL_EMAIL"
|
||||||
|
|
||||||
|
RESPONSE=$(curl -s -X POST "${MAILCOW_URL}/api/v1/add/alias" \
|
||||||
|
-H "X-API-Key: ${API_KEY}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{
|
||||||
|
\"address\": \"${ALIAS}\",
|
||||||
|
\"goto\": \"${REAL_EMAIL}\",
|
||||||
|
\"active\": \"1\",
|
||||||
|
\"public_comment\": \"aliasgen ${SITE}\"
|
||||||
|
}")
|
||||||
|
|
||||||
|
if echo "$RESPONSE" | grep -q "error"; then
|
||||||
|
echo "Error creating alias: $RESPONSE"
|
||||||
|
else
|
||||||
|
echo "Alias created: $ALIAS"
|
||||||
|
copy_to_clipboard "$ALIAS"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
# List all aliases
|
||||||
|
list_aliases() {
|
||||||
|
curl -s -X GET "${MAILCOW_URL}/api/v1/get/alias/all" \
|
||||||
|
-H "X-API-Key: ${API_KEY}" \
|
||||||
|
| jq -r '.[] | "\(.address) -> \(.goto) [active: \(.active)]"' \
|
||||||
|
| column -t
|
||||||
|
}
|
||||||
|
|
||||||
|
# Search aliases by keyword
|
||||||
|
search_aliases() {
|
||||||
|
local TERM="$1"
|
||||||
|
if [ -z "$TERM" ]; then
|
||||||
|
echo "Error: Please provide a search term."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
curl -s -X GET "${MAILCOW_URL}/api/v1/get/alias/all" \
|
||||||
|
-H "X-API-Key: ${API_KEY}" \
|
||||||
|
| jq -r --arg TERM "$TERM" '.[] | select(.address | test($TERM)) | "\(.address) -> \(.goto) [active: \(.active)]"' \
|
||||||
|
| column -t
|
||||||
|
}
|
||||||
|
|
||||||
|
# Delete alias
|
||||||
|
delete_alias() {
|
||||||
|
local ALIAS="$1"
|
||||||
|
if [ -z "$ALIAS" ]; then
|
||||||
|
echo "Error: Please provide the alias to delete."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
RESPONSE=$(curl -s -X POST "${MAILCOW_URL}/api/v1/delete/alias" \
|
||||||
|
-H "X-API-Key: ${API_KEY}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{
|
||||||
|
\"address\": \"${ALIAS}\"
|
||||||
|
}")
|
||||||
|
echo "Response: $RESPONSE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Disable alias (sets active=0)
|
||||||
|
disable_alias() {
|
||||||
|
local ALIAS="$1"
|
||||||
|
if [ -z "$ALIAS" ]; then
|
||||||
|
echo "Error: Please provide the alias to disable."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
RESPONSE=$(curl -s -X POST "${MAILCOW_URL}/api/v1/edit/alias" \
|
||||||
|
-H "X-API-Key: ${API_KEY}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{
|
||||||
|
\"address\": \"${ALIAS}\",
|
||||||
|
\"active\": \"0\"
|
||||||
|
}")
|
||||||
|
echo "Response: $RESPONSE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Enhanced help menu
|
||||||
|
show_help() {
|
||||||
|
cat <<EOF
|
||||||
|
Mailcow Alias CLI - aliasgen
|
||||||
|
|
||||||
|
Usage: aliasgen <command> [arguments]
|
||||||
|
|
||||||
|
Commands:
|
||||||
|
|
||||||
|
create <site> Create a new alias for a website or service
|
||||||
|
Example: aliasgen create amazon
|
||||||
|
Generates: amazon-abc12@domain.com -> $REAL_EMAIL
|
||||||
|
|
||||||
|
list List all aliases with their destination emails and active status
|
||||||
|
Example: aliasgen list
|
||||||
|
|
||||||
|
search <term> Search for aliases by a keyword
|
||||||
|
Example: aliasgen search amazon
|
||||||
|
|
||||||
|
delete <alias> Permanently delete an alias
|
||||||
|
Example: aliasgen delete amazon-abc12@domain.com
|
||||||
|
|
||||||
|
disable <alias> Disable an alias without deleting it (active=0)
|
||||||
|
Example: aliasgen disable amazon-abc12@domain.com
|
||||||
|
|
||||||
|
help Show this help menu
|
||||||
|
Example: aliasgen help
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
- Created aliases are automatically copied to clipboard (Linux/macOS supported)
|
||||||
|
- Configuration is stored in 'mailcow.conf' (API key, domain, real email)
|
||||||
|
- Random suffix length can be adjusted with RANDOM_LENGTH in mailcow.conf
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main command dispatch
|
||||||
|
case "$1" in
|
||||||
|
create) create_alias "$2" ;;
|
||||||
|
list) list_aliases ;;
|
||||||
|
search) search_aliases "$2" ;;
|
||||||
|
delete) delete_alias "$2" ;;
|
||||||
|
disable) disable_alias "$2" ;;
|
||||||
|
help|"" ) show_help ;;
|
||||||
|
*) echo "Unknown command: $1"; show_help ;;
|
||||||
|
esac
|
||||||
14
mailcow.conf
Normal file
14
mailcow.conf
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Mailcow server URL
|
||||||
|
MAILCOW_URL="https://mail.yourdomain.com"
|
||||||
|
|
||||||
|
# API key from Mailcow
|
||||||
|
API_KEY="DD22D7-970D76-90FA4C-0DFBE7-E20ACF"
|
||||||
|
|
||||||
|
# List of domains (comma-separated)
|
||||||
|
DOMAINS=("yourdomain1.com" "yourdomain2.com")
|
||||||
|
|
||||||
|
# Your real email to forward aliases to
|
||||||
|
REAL_EMAIL="[email protected]"
|
||||||
|
|
||||||
|
# Length of random suffix for aliases
|
||||||
|
RANDOM_LENGTH=10
|
||||||
Loading…
Reference in New Issue
Block a user