Edit File: get_reseller_emails.sh
#!/bin/bash # Filename: get_reseller_emails.sh # This script prints, for every reseller (as listed in /var/cpanel/resellers), # the email addresses of each user's cPanel account in a text file. # It relies on the "OWNER=..." field in /var/cpanel/users/* files # to accurately map each user to their reseller. output_file="/usr/local/cptools/textfiles/reseller_emails.txt" > "$output_file" # Clear the file before writing rm -f $output_file # Read the list of reseller usernames from /var/cpanel/resellers # The format of /var/cpanel/resellers is typically lines like: # reseller1: root # reseller2: root # ... # The left side is the resellerâ–’s username. resellers=$(awk -F: '{print $1}' /var/cpanel/resellers) for reseller in $resellers; do echo "Reseller : $reseller" >> "$output_file" echo "=====================" >> "$output_file" # For each reseller, find cPanel accounts where OWNER=reseller for userfile in $(grep -l "OWNER=$reseller" /var/cpanel/users/*); do user=$(basename "$userfile") echo "User : $user" >> "$output_file" echo "-----------------" >> "$output_file" # Use uapi to list email accounts for the user email_result=$(uapi --user="$user" Email list_pops 2>/dev/null | grep -oP '(?<=email: ).+') # Filter out emails that exactly match the username valid_emails="" while IFS= read -r email; do if [ "$email" != "$user" ]; then valid_emails+="$email"$'\n' fi done <<< "$email_result" if [ -n "$valid_emails" ]; then echo "$valid_emails" >> "$output_file" else echo "No valid emails found" >> "$output_file" fi echo "" >> "$output_file" done echo "" >> "$output_file" done echo "Output written to $output_file"