mattias jonsson wrote:
> yes exactly
> how to add mailboxes on courier mail server
> i use ubuntu server

I use debian, and compile courier from sources. Doesn't ubuntu provide scripts?

I don't add users very often, hence I prefer doing it manually from the console.
The scripts I attach use the MySQL backend and rely upon a number of config 
settings,
you may use them to get ideas for writing your own scripts, if that's what you 
need.

YMMV.

#!/bin/sh
#
# newmailuser mailaddr author [passwd [nick]]
#
LOGFILE="/var/log/mailuser.log"
DIRBASE="/var/mail"

if [ "$1" = "" ]; then
        printf "$0 mailaddr author [passwd [nick]]\n"
        exit 1
fi

if [ "$2" = "" ]; then
        printf "author missing\n"
        exit 1
fi

USER=`echo $1 | tr '[A-Z]' '[a-z]' | \
        sed -e 's/@.*$//' -e 's/[^-_.a-z0-9]//g' -e 's/^\.+//' -e 's/\.+$//'`
DOMAIN=`echo $1 | tr '[A-Z]' '[a-z]' | \
        sed -e 's/^.*@//' -e 's/[^-_.a-z0-9]//g' -e 's/^\.+//' -e 's/\.+$//'`

DIRHOME="$DIRBASE/$DOMAIN"
AUTHOR=`echo $2 | sed 's/[EMAIL PROTECTED]//g'`
PASSWD=$3
ALT_NAME=`echo $4 | sed 's/[^-._A-Za-z0-9]//g'`
NEWDOMAIN="0"

if [ "$USER" = "" -o "DOMAIN" = "" -o "[EMAIL PROTECTED]" != "$1" ]; then
        printf "invalid address $1 ([EMAIL PROTECTED])\n"
        exit 1
fi

while [ "$PASSWD" = "" ]; do
        PASSWD=`hexdump -n 40 -e '"%_p"' /dev/random | sed -e 's/\.//g' -e 
's/[^A-Za-z0-9]//g'`
done
printf "password set to \"$PASSWD\"\n"


if [ "$ALT_NAME" != "" ]; then
        CHECKIT=`su -c "mysql -B mail | tail -1" courier << EOF
        SELECT COUNT(*) FROM user WHERE
        alt_addr='$ALT_NAME';
EOF
`
        if [ "$CHECKIT" != "0" ]; then
                printf "$ALT_NAME already exists ($CHECKIT) in data base\n"
                exit 1
        fi
fi

printf "Checking data in MySQL mail\n"
CHECKIT=`su -c "mysql -B mail | tail -1" courier << EOF
SELECT COUNT(*) FROM user WHERE addr='[EMAIL PROTECTED]';
EOF
`
if [ "$CHECKIT" != "0" ]; then
        printf "[EMAIL PROTECTED] already exists ($CHECKIT) in data base\n"
        exit 1
fi

su -c "mysql -B mail" courier << EOF
INSERT INTO user SET
        addr='[EMAIL PROTECTED]',
        alt_addr='$ALT_NAME',
        home='$DIRHOME/$USER',
        passwd='$PASSWD',
        author='$AUTHOR';
EOF
printf "inserted data in MySQL mail ($?)\n"

CHECKIT=`su -c "mysql -B mail | tail -1" courier << EOF
SELECT COUNT(*) FROM user WHERE addr='[EMAIL PROTECTED]';
EOF
`
if [ "$CHECKIT" != "1" ]; then
        printf "could not insert [EMAIL PROTECTED] in data base\n"
        exit 1
fi


if [ -d $DIRHOME ]; then
        printf "$DIRHOME exists\n"
else
        printf "creating $DIRHOME\n"
        NEWDOMAIN="1"
        mkdir $DIRHOME
        chown courier:courier $DIRHOME
fi

if [ ! -d $DIRHOME ]; then
        printf "$DIRHOME not found\n"
        exit 1
fi

cd $DIRHOME
if [ -d $USER ]; then
        printf "$USER already exists\n"
        exit 1;
fi

printf "creating directory $DIRHOME/$USER\n"
mkdir $USER
cd $USER
if [ `pwd` != "$DIRHOME/$USER" ]; then
        printf "error creating directory!\n"
        exit 1
fi
maildirmake Maildir
chown -R courier:courier .


if [ $NEWDOMAIN = "1" ]; then
        newmaildomain "$DOMAIN"
fi

HOSTNAME=`hostname --long`
WELCOMETO="[EMAIL PROTECTED]"
NOTIFY=`expr match "$AUTHOR" '\([EMAIL PROTECTED]@[EMAIL PROTECTED]@[EMAIL 
PROTECTED])'`
if [ "$AUTHOR" = "$NOTIFY" ]; then
        WELCOMETO="$WELCOMETO,$AUTHOR"
fi
printf "sending welcome message to $WELCOMETO\n"
sendmail -f [EMAIL PROTECTED] << EOF
From: [EMAIL PROTECTED]
To: $WELCOMETO
Subject: New mailbox [EMAIL PROTECTED]

Write the body of this message explaining your policies,
pointers for webmail, instructions and howtos, etc...
EOF

sleep 1
printf "add %s %s\n" "[EMAIL PROTECTED]" "`date '+%Y %m    # %c'`" >> $LOGFILE
showmailuser "[EMAIL PROTECTED]"
#!/bin/sh
#
# rmmailuser mailaddr
#
LOGFILE="/var/log/mailuser.log"
DIRBASE="/var/mail"

if [ "$1" = "" ]; then
        printf "$0 mailaddr\n"
        exit 1
fi

USER=`echo $1 | tr '[A-Z]' '[a-z]' | \
        sed -e 's/@.*$//' -e 's/[^-_.a-z0-9]//g' -e 's/^\.+//' -e 's/\.+$//'`
DOMAIN=`echo $1 | tr '[A-Z]' '[a-z]' | \
        sed -e 's/^.*@//' -e 's/[^-_.a-z0-9]//g' -e 's/^\.+//' -e 's/\.+$//'`
if [ -z "$USER" -o -z "$DOMAIN" ]; then
        printf "Invalid user $1\n"
        exit 1
fi

DIRHOME="$DIRBASE/$DOMAIN"
DIRUSER="$DIRHOME/$USER"
if [ ! -d $DIRUSER ]; then
        printf "[EMAIL PROTECTED] directory ($DIRUSER) not found\n"
        exit 1
fi

printf "Checking data in MySQL mail\n"
CHECKIT=`su -c "mysql -B mail | tail -1" courier << EOF
SELECT COUNT(*) FROM user WHERE addr='[EMAIL PROTECTED]';
EOF
`
if [ "$CHECKIT" != "1" ]; then
        printf "[EMAIL PROTECTED] ambiguous ($CHECKIT) in data base\n"
        exit 1
fi

CHECKIT=`su -c "mysql -B mail | tail -1" courier << EOF
SELECT home FROM user WHERE addr='[EMAIL PROTECTED]';
EOF
`
if [ "$CHECKIT" != "$DIRUSER" ]; then
        printf "[EMAIL PROTECTED] directory mismatch (%s != %s)\n" "$CHECKIT" 
"$DIRUSER"
        exit 1
fi

su -c "mysql -B mail" courier << EOF
DELETE FROM user WHERE addr='[EMAIL PROTECTED]';
EOF
printf "deleted [EMAIL PROTECTED] from MySQL mail ($?)\n"

DATAFILES=`find $DIRUSER -type f | wc -l`
if [ $DATAFILES -gt 0 ]; then
        cd $DIRHOME
        printf "Saving $DATAFILES user file(s)\n"
        zip -rq $USER $USER
fi
su -c "rm -rf $DIRUSER" courier
printf "removed $DIRUSER from disk ($?)\n"
printf "del %s %s\n" "[EMAIL PROTECTED]" "`date '+%Y %m    # %c'`" >> $LOGFILE
#!/bin/sh
#
# newmaildomain domain
#
list=""
cd /etc/courier

for arg
do
        DOMAIN=`echo $arg | tr '[A-Z]' '[a-z]' | \
                sed -e 's/[^-.a-z0-9]//g' -e 's/^\.+//' -e 's/\.+$//'`

        if [ "x$DOMAIN" = "x" -o "$DOMAIN" != "$arg" ]; then
                printf "invalid domain $1 ($DOMAIN)\n"
        else
                grep "$DOMAIN" hosteddomains > /dev/null
                if [ $? -ne 0 ]; then
                        list="$list $DOMAIN"
                else
                        printf "already exists: $DOMAIN\n"
                fi
        fi
done

if [ ! "x$list" = "x" ]; then
        printf "updating courier config files\n"
        for DOMAIN in $list
        do
                printf "$DOMAIN\n" >> hosteddomains
        done
fi
cat hosteddomains |\
        awk '{print $1;}' |\
        sort |\
        uniq > esmtpacceptmailfor.dir/hosted
makeacceptmailfor
makehosteddomains
chown -R courier:courier .
#!/bin/sh
#
# showmailuser [mailaddr]
#
REPORT="stats"
SELECTCLAUSE="SELECT addr, home, author, passwd, alt_addr FROM user"
WHERECLAUSE=""
ORDCLAUSE="ORDER BY addr"

while [ -n "$1" ]; do
        case $1 in
                -p) REPORT="passwd";;
                -d) REPORT="dir";;
                -c) REPORT="courier";;
                -m) REPORT="mailfilter";;
                -l) REPORT="list";;
                *) if [ "$WHERECLAUSE" = "" ]; then
                                WHERECLAUSE="WHERE addr RLIKE '$1'"
                        else
                                WHERECLAUSE="$WHERECLAUSE AND addr RLIKE '$1'"
                        fi;;
        esac
        shift
done

TMP="/tmp/showmailuser$$"
trap "rm -f $TMP; exit" 0 1 2 15
mysql -B -u courier -e "$SELECTCLAUSE $WHERECLAUSE $ORDCLAUSE" mail > $TMP
exec < $TMP

read addr home author passwd alt_addr
rtc=$?
if [ "$addr" != "addr" ]; then
        printf "no sql data, rtc=$? $rtc \n%s\n" \
                "$SELECTCLAUSE $WHERECLAUSE $ORDCLAUSE"
        exit 1;
fi

read addr home author passwd alt_addr
done_header=""
while [ $? = 0 ]; do
        if [\
                \( "$home" = "" \) -o\
                \( ! -d "$home" \) -o\
                \( ! -d "$home/Maildir" \) -o\
                \( ! -d "$home/Maildir/new" \) ]; then
                printf "Home \"%s\" not valid for user %s\n" $home $addr  1>&2
        else
                case $REPORT in
                stats)
                        if [ -f $home/.courier ]; then
                                flags="C"
                        else
                                flags=""
                        fi
                        for file in $home/.courier-*
                        do
                                if [ -f $file ]; then
                                        flags="${flags}-"
                                fi
                        done
                        if [ -f $home/.mailfilter ]; then
                                flags="${flags}M"
                        fi
                        if [ -n "$alt_addr" ]; then
                                if [ -n "$flags" ]; then
                                        flags="$alt_addr $flags"
                                else
                                        flags="$alt_addr"
                                fi
                        fi
                        if [ -n "$flags" ]; then
                                flags="($flags)"
                        fi
                        name="$addr $flags"
                        count=`find $home/Maildir -type f -regex 
'.*,S=[0-9]+[^/]*' -print |\
                                wc -l`
                        countnew=`find $home/Maildir -type f -regex 
'.*/new/[^/]*,S=[^/]*' -print |\
                                wc -l`
                        size=`find $home/Maildir -type f -regex 
'.*,S=[0-9]+[^/]*' -printf "%s\n" |\
                                awk 'BEGIN {s=0;} \
                                        { s+=$1;} \
                                        END { print s;}'`
                        lastlogin=`find $home/Maildir -type d -regex '.*/cur' \
                                        -printf "[EMAIL PROTECTED] %Cb %Cy 
%Ck:%CM\n" |\
                                sort -t% -n -k 1 -r |\
                                head -1 |\
                                sed -e 's/[^%]*%//' -e 's/0\([1-9] [A-Z]\)/ 
\1/'`
                        if [ -z "$done_header" ]; then
                                done_header=`printf "%-40s %5s %5s %8s  %s" \
                                        "address (alias C-M)" "count" "new" 
"bytes" "lastlogin"`
                                echo "$done_header"
                                echo "$done_header" | sed 's/./-/g'
                        fi 
                        printf "%-40s %5.0d %5.0d %8.0d  %s\n" \
                                "$name" "$count" "$countnew" "$size" 
"$lastlogin"
                        ;;
                passwd)
                        name="$addr"
                        if [ -n $alt_addr ]; then
                                name="$name ($alt_addr)"
                        fi
                        printf "%-40s %s\n" "$name:" "$passwd"
                        ;;
                dir)
                        printf "%-30s %s\n" "$addr:" "$home"
                        ;;
                courier)
                        if [ -f $home/.courier ]; then
                                printf "%s\n" $addr
                        fi
                        for file in $home/.courier*
                        do
                                if [ -f $file ]; then
                                        ls -lab "$file"
                                        cat "$file"
                                        printf "\n\n"
                                fi
                        done
                        ;;
                mailfilter)
                        if [ -f $home/.mailfilter ]; then
                                printf "%s\n" $addr
                                ls -lab "$home/.mailfilter"
                                cat "$home/.mailfilter"
                                printf "\n\n"
                        fi
                        ;;
                list)
                        printf "%s\n" $addr
                        ;;
                *)
                        printf "Invalid options\n"
                        exit 1
                        ;;
                esac
        fi
        read addr home author passwd alt_addr
done

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
courier-users mailing list
courier-users@lists.sourceforge.net
Unsubscribe: https://lists.sourceforge.net/lists/listinfo/courier-users

Reply via email to