Skip to content

Instantly share code, notes, and snippets.

@Ara4Sh
Created March 20, 2022 17:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Ara4Sh/a9b9aea6f4fcb10e2e32ef27b6a355d4 to your computer and use it in GitHub Desktop.
Save Ara4Sh/a9b9aea6f4fcb10e2e32ef27b6a355d4 to your computer and use it in GitHub Desktop.
I used this script around 2015 I guess to manage easily the email accounts, just to archive it I paste it here, I dont know if it works or not
#!/bin/bash
#MailAdm - Manage you mailboxes easily
#Checking for Root Account
if [[ $EUID -ne 0 ]]; then
echo "Script can be executed only by root"
exit 1
fi
add_user() {
if [[ -z $user ]];then
echo "Missing Username"
exit 1
fi
check_user=$(cut -f 1 -d : /etc/passwd | grep "^$user$" )
if [ ! -z "$check_user" ]; then
echo "User \"$user\" Exists"
exit 1
fi
useradd $user -s $shell -m
mkdir /home/$user/conf /home/$user/mail
mkdir /home/$user/conf/keys
chmod 751 /home/$user/mail
chmod 755 /home/$user/conf
chmod a+x /home/$user
}
dkim_keys() {
cd /home/$user/conf/keys
openssl genrsa -out $user.pem 1024
openssl rsa -pubout -in $user.pem -out $username.pub
}
set_dns() {
p=$(cat /home/$user/conf/keys/$user.pub | grep -v ' KEY---'|tr -d '\n')
echo "
Please Create Following Records in DNS server
1) _dmarc IN TXT \"v=DMARC1; p=none\"
2) @ IN TXT \"v=spf1 a mx ip4:$IP ?all\"
3) _domainkey IN TXT \"t=y; o=~;\"
4) mail._domainkey IN TXT \"v=DKIM1; k=rsa; p=$p\"
5) mail IN A $IP
6) smtp IN A $IP
7) imap IN A $IP
8) pop IN A $IP
9) @ IN MX 10 mail.$domain
"
}
prep_domain() {
mkdir /home/$user/conf/$domain
mkdir /home/$user/mail/$domain
touch /home/$user/conf/$domain/{aliases,passwd,fwd_only}
ln -s /home/$user/conf/$domain /etc/exim4/domains/$domain
cp /home/$user/conf/keys/$user.pem /home/$user/conf/$domain/dkim.pem
chmod 771 /home/$user/conf/$domain
chmod 660 /home/$user/conf/$domain/*
chmod 771 /etc/exim4/domains/$domain
chmod 770 /home/$user/mail/$domain
chown -R Debian-exim:mail /home/$user/conf/$domain
chown -R dovecot:mail /home/$user/conf/$domain/passwd
chown $user:mail /home/$user/mail/$domain
}
add_account() {
salt=$(</dev/urandom tr -dc A-Za-z0-9 | head -c10)
read -p "Please Enter your password: " password
md5="{MD5}$(perl -e 'print crypt('$password', '$salt'),"\n"')"
str="$account:$md5:$user:mail::/home/$user:0"
echo $str >> /home/$user/conf/$domain/passwd
}
add_mail_domain() {
if [ "$#" != 3 ]; then
error "Usage : ssc $1 USER DOMAIN"
fi
user=$2
domain=$3
add_user
dkim_keys
prep_domain
set_dns
}
add_mail_account() {
if [ "$#" != 4 ]; then
error "Usage : ssc $1 USER DOMAIN ACCOUNT"
fi
user=$2
domain=$3
account=$4
add_account
}
action=$1
case $action in
domain)
add_mail_domain $@
;;
account)
add_mail_account $@
;;
*)
echo "mailadm domain USER DOMAIN"
echo "mailadm account USER DOMAIN ACCOUNT"
exit 1
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment