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