我最早是用wxy先生写的postfix+。。。。 那篇文章建立的mail server,但是imp改动起来不是一般的难,因为每句html代码都是用print方式来写的,看着很费力,改动也不方便。后来参照docn先生的文章,采用sqwebmail来做webmail,但是因为当时没有能够解决中文名附件的问题,所以我改用了igenus来做webmail部分。 因为没有使用vpopmail,所以在管理用户的时候不太方便,正好我初学shell,就写了添加/删除用户的两个shell来练手。本着共享的精神以及请各位大虾指教我的shell编写,我把我写的shell脚本发布出来。因为是针对docn修改后的igenus,而且我自己也略微修改了一些部分,所以可能不能直接套用。我把shell的每个部分都加上了注释,希望能帮助各位朋友看懂。
addmailuser
[code:1:c6ab2a9532]
#!/bin/sh
#配置某些参数
uid=12345 #It's postfix's uid
gid=12345 #It's postfix's gid
imapok=1 #Default allow imap
quota=5000000 # It's value equal to postfix's /etc/main.cf : virtual_mailbox_limit
#Mysql的控制权限
mysql_name=用户名
myrsql_password=密码
echo 'Enter user name:'
read name
if [ "$name" = "" ]; then
echo 'Must input name!'
exit
fi
echo 'Enter user password:[123456]' #如果不输入密码直接回车,则默认密码为123456
read password
if [ "$password" = "" ]; then
password=123456
fi
echo 'Enter user domain:[mail.xx.cn]' #填写domain,默认为mail.xx.cn
read domain
if [ "$domain" = "" ]; then
domain=mail.xx.cn
fi
echo 'Enter user home:[/var/mail/]' #mail用户的home目录,默认为/var/mail/
read home
if [ "$home" = "" ]; then
home=/var/mail/
fi
echo 'Enter user maildir:['$domain'/'$name'/Maildir/]' #maildir目录
read maildir
if [ "$maildir" = "" ]; then
maildir=$domain/$name/Maildir/
fi
echo 'Enter user nickname:' #匿称,如不输入则和用户名相同
read nickname
if [ "$nickname" = ""]; then
nickname=$name
fi
#设置id,添加时间等
id=$name@$domain
date_add=`date +20%y-%m-%d`
time_add=`date +%H:%M:%S`
#全部显示一次上面的参数设置,好核对有写错没
echo 'id= '$id
echo 'name= '$name
echo 'password= '$password
echo 'domain= '$domain
echo 'home= '$home
echo 'maildir= '$maildir
echo 'nickname= '$nickname
echo 'imapok= '$imapok
echo 'date_add= '$date_add
echo 'time_add= '$time_add
echo 'quota= '$quota
#选择确认添加与否
echo "if under value is right,please input 'y' and Enter:"
read mychoice
if [ "$mychoice" = "y" ]; then
echo "use mail;" > tmp_addmailuser.sql #将sql命令写到一个临时文件内。。。主要是我菜,不晓得怎么一次用重定向搞定,还有就是这样写调试的时候方便一些
echo "INSERT INTO virtual_users (id,home,password,maildir,date_add,time_add,domain,name,uid,gid,imapok,quota,
pw_gecos) VALUES ('"$id"','"$home"',encrypt('"$password"'),'"$maildir"','"$date_add"','"$time_add"','"$domain"'
,'"$name"',"$uid","$gid","$imapok","$quota",'"$nickname"');" >> tmp_addmailuser.sql #将sql语句也写进去,这个记得根据自己的数据库名和字段改哦!!!
mysql -u$mysql_name -p$mysql_password < tmp_addmailuser.sql #执行
rm -rf tmp_addmailuser.sql #删除临时文件
#下面的语句是建立目录和修改目录权限以及所有者。。。
MailUserDir=$home$domain/$name
mkdir -p $MailUserDir
/usr/lib/courier-imap/bin/maildirmake $MailUserDir/Maildir
/usr/lib/courier-imap/bin/maildirmake -q $quota"S" $MailUserDir/Maildir
chmod -R 700 $MailUserDir
chown -R postfix:postfix $MailUserDir
else
exit
fi
[/code:1:c6ab2a9532]
下面的是删除用户的,因为不少地方跟上面的相似,我就只注释关键的地方咯
delmailuser
[code:1:c6ab2a9532]
#!/bin/sh
#配置某些参数
uid=12345 #It's postfix's uid
gid=12345 #It's postfix's gid
imapok=1 #Default allow imap
quota=5000000 # It's value equal to postfix's /etc/main.cf : virtual_mailbox_limit
#Mysql的控制权限
mysql_name=用户名
myrsql_password=密码
echo 'Enter user name:'
read name
if [ "$name" = "" ]; then
echo 'Must input name!'
exit
fi
echo 'Enter user domain:[mail.xx.cn]'
read domain
if [ "$domain" = "" ]; then
domain=mail.xx.cn
fi
id=$name@$domain
echo "use mail;" > tmp_delmailuser.sql
echo "select id,home,maildir,name,pw_gecos from virtual_users where (id='"$id"' and name='"$name"' and domain
='"$domain"');" >> tmp_delmailuser.sql #将sql语句放到临时的文件内
mysql -u$mysql_name -p$mysql_password < tmp_delmailuser.sql | grep $id > tmp_delmailuser #从临时文件中执行sql语句,并把得到的记录中取得tmp_delmailuser文件内
home=`awk '{ print $2 }' tmp_delmailuser`
maildir=`awk '{ print $3 }' tmp_delmailuser`
nickname=`awk '{ print $5 }' tmp_delmailuser` #把各个需要的字段取出来,这里大家一定要根据自己的mysql的数据库的字段来修改哦
rm -rf tmp_delmailuser #删除临时文件
if [ "$home" = ""]; then
echo "No $name in $domain , please check and input again."
rm -rf tmp_delmailuser.sql
exit
fi #如果没有取到记录时候的处理
echo 'id= '$id
echo 'name= '$name
echo 'domain= '$domain
echo 'home= '$home
echo 'maildir= '$maildir
echo 'nickname= '$nickname
#显示取得的记录的资料到屏幕上
echo "if under value is right,please input 'y' and Enter:"
read mychoice
#是否确认要删除它
if [ "$mychoice" = "y" ]; then
echo "use mail;" > tmp_delmailuser.sql
echo "delete from virtual_users where (id='"$id"' and name='"$name"' and domain='"$domain"');" >> tmp_delmailuser.sql
mysql -u$mysql_name -p$mysql_password < tmp_delmailuser.sql
rm -rf tmp_delmailuser.sql
MailUserDir=$home$domain/$name
rm -rf $MailUserDir #删除该条数据库记录和相应的用户目录
else
exit
fi
[/code:1:c6ab2a9532]
以上的shell写的比较繁琐,但是思路很简单,希望能帮助到各位,也请各位提出意见和帮助完善后可以给我一份.
bsdxp 回复于:2003-07-07 09:43:14 |
好同志,辛苦啦。 |
bhuang 回复于:2003-07-07 09:46:39 |
docn修改后的igenus能共享一下吗? |
skylove 回复于:2003-07-07 10:09:47 |
能呀,我在另外有个帖子内发了地址的
http://218.6.128.194/igenus_docn.tar.gz |
gadfly 回复于:2003-07-07 10:18:05 |
建议用code 标签把脚本框起来 |
skylove 回复于:2003-07-07 10:40:04 |
不好意思,以前我没用过这些,所以不太懂。已经改正了 |
paulwang 回复于:2004-05-20 11:21:38 |
[quota]
encrypt('"$password"'), [/quota] 可以直接调用这个函数吗?我的为什么不行啊? |
skylove 回复于:2004-08-20 12:12:35 |
可以的啊 |
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/
领测软件测试网最新更新
关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073