Add and remove forwarding emails in shell

Nahoo

Member
Oct 7, 2004
22
0
151
London, UK
cPanel Access Level
Root Administrator
Twitter
I've update an existing script to quickly add/remove forwarding emails for a particular domain

Code:
#!/bin/sh

##############################################################
#                                                            #
#  QUICK EMAIL FORWARDER                                     #
#                                                            #
#  Coded by Noah Hearle, Design Extreme                      #
#  https://designextreme.com                                 #
#                                                            #
#  Created: 2017/01/23                                       #
#  Modified: 2019/06/10                                      #
#                                                            #
#  Usage: sh ./quick_email_forwarder.sh <alias> [--delete]   #
#                                                            #
##############################################################

## ARGUMENTS ##

alias=$1
delete=$2

## SETTINGS ##

user=somedomain
domain=somedomain.com
list=/etc/valiases/$domain
last_line="$(tail -n 1 $list)"
delete_regex='^[-]*d(elete)?$'
[email protected]$domain
[email protected]$domain

if [ -n "$2" ] && [[ $delete =~ $delete_regex ]]; then
        if [ "$(grep -c $email $list)" -eq 0 ]; then
                echo -e "\e[33mWarning:\e[0m Cannot remove $email as it is not found"
                exit
        fi

        sed -i "/$email: $email_account/d" $list
        echo -e "\e[92mSuccess:\e[0m Removed email: $email"
        exit
fi

if [ "$(grep -c $email $list)" -gt 0 ]; then
        echo -e "\e[33mWarning:\e[0m $email already exists"
        exit
fi

sed -i '$ d' $list
echo $email: $email_account >> $list
sort $list -o $list
echo $last_line >> $list
chown --from=root.root $user.mail $list
echo -e "\e[92mSuccess:\e[0m Added email: $email"
Please edit the settings in script before adding this to your script library. If you like it or would like me to extend it to any domain and account (as arguments), please let me know.
 
Last edited:

Nahoo

Member
Oct 7, 2004
22
0
151
London, UK
cPanel Access Level
Root Administrator
Twitter
To make it a little more fool-proof, I've added an existence check for the domain...

Code:
#!/bin/sh

##############################################################
#                                                            #
#  QUICK EMAIL FORWARDER                                     #
#                                                            #
#  Coded by Noah Hearle, Design Extreme                      #
#  https://designextreme.com                                 #
#                                                            #
#  Created: 2017/01/23                                       #
#  Modified: 2019/06/11                                      #
#                                                            #
#  Usage: sh ./quick_email_forwarder.sh <alias> [--delete]   #
#                                                            #
##############################################################

## ARGUMENTS ##

alias=$1
delete=$2

## SETTINGS ##

user=somedomain
domain=somedomain.com
list=/etc/valiases/$domain
delete_regex='^[-]*d(elete)?$'
[email protected]$domain
[email protected]$domain

if [ ! -f "$list" ]; then
        echo -e "\e[38;5;202mError:\e[0m Domain name '$domain' doesn’t exist in /etc/valiases/"
        exit
fi

last_line="$(tail -n 1 $list)"

if [ -n "$2" ] && [[ $delete =~ $delete_regex ]]; then
        if [ "$(grep -c $email $list)" -eq 0 ]; then
                echo -e "\e[33mWarning:\e[0m Cannot remove $email as it is not found"
                exit
        fi

        sed -i "/$email: $email_account/d" $list
        echo -e "\e[92mSuccess:\e[0m Removed email: $email"
        exit
fi

if [ "$(grep -c $email $list)" -gt 0 ]; then
        echo -e "\e[33mWarning:\e[0m $email already exists"
        exit
fi

sed -i '$ d' $list
echo $email: $email_account >> $list
sort $list -o $list
echo $last_line >> $list
chown --from=root.root $user.mail $list
echo -e "\e[92mSuccess:\e[0m Added email: $email"