设为首页
加入收藏
帮助中心
首页 | 红盾通告 | 信息中心 | ASP技术 | 数据库 | 网页设计 | 网管专栏 | OICQ攻略 | 墨客频道 | 网站运营 |
当前位置:首页 >> 网管专栏 >> 邮件服务 >> 正文
最新信息
·JMail(4.3)中文手册
·Foxmail密码丢了如何应急
·Merak 5.94完全上手
·用Foxmail Server搭建邮件…
·WebEasyMail 问题解答大全
·VisNetic MailServer 常见…
·James安装使用简易指南
·Winmail和垃圾邮件过滤
·Winmail和邮件监控
·用Windows 2003配置邮件服…
资料搜索
热点信息
·Winmail和垃圾邮件过滤
·James安装使用简易指南
·WebEasyMail 问题解答大全
·如何解决OUTLOOK2002无法访…
·用Windows 2003配置邮件服…
·Merak 5.94完全上手
·邮件乱码产生的原因与解决…
·Foxmail密码丢了如何应急
·Winmail和邮件监控
·VisNetic MailServer 常见…
推荐信息
·用Cdonts实现发送Email
·基于QMail的完整WEBMAIL解…
·Sendmail的安全解决方案
·Foxmail密码丢了如何应急
·James安装使用简易指南
·Exchange2000系统建设及规…
·sendmail大全
·神奇梦"邮"-DreamMail技巧…
·自己电脑做SMTP服务器不求…
·Jmail的主要参数列表


Google
 
通过qmailadmin来实现qmail下的域空间设置
〖编辑:Cloudy | 浏览:人次〗

我的企业邮局是针对isp做的。用qmail+vpopmail+mysql+qmailadmin+ezmlm+autorespond+sqwebmail(igenus)来实现的。这个服务器上,有很多个域。

对于很多企业邮局提供商,他们提供了邮件空间这个服务。就是说企业可以买一定大小的邮件空间。自己可以任意的在指定大小的空间中任意添加、删除、修改用户。但是,总空间大小一定。这对于企业来说,是非常方便的。

一般提供这种功能的邮件,都是大型的商业邮件系统,但是qmail也完全可以实现。在这里,我是修改了qmailadmin,来实现这个功能的。我提供的只是一个初级的模型,大家可以自己再优化。这个软件的作者,是我的好朋友gadfly,感谢他的无私帮助。希望大家能受到一些启发,作出更好的程序。这样的话,也给我一份。:)

btw:这个软件我用了很长时间了,大家可以放心,经过我无数次测试和使用的。


功能说明:

针对qmailadmin-1.0.6

1、能够显示总共的域空间和已使用空间。现在只在修改用户(mod_user.html)和(add_user.html)中显示这个信息。

如要其它地方显示,只要将这行:
##X501 ##q ##X502 ##Q  
加到你想要的地方就可以。

2、在增加用户中,邮箱大小可以有缺省值,由.qmailadmin-limits中的default_quota决定,单位是字节

3.增加了域空间的限制,在.qmailadmin-limits中的参数default_domain_quota,以M为单位

4.在增加用户和修改用户中,会判断域限制。如果有这个限制,用户的大小设置就必须>0。如果没有,舍为<0时,
就是无限制。

安装方法。
1、将domain_quota.tgz放到qmailadmin的源码目录下, 这个目录必须先configure过,
# tar xzvf domain_quota.tgz
#make

2、将qmailadmin, en-us, mod_user.html, add_user.html覆盖相应的文件。

3、设置.qmailadmin-limits的各个参数。

4、测试qmailadmin. ok!

.qmailadmin-limits
增加一个参数
default_domain_quota: 以M为单位

修改en-us,500以后是新加的。
修改*user.html

1.显示已用空间和总空间
mod_user.html和add_user.html增加一下一行
##X501 ##q&nbsp;##X502 ##Q&nbsp;&nbsp;

在qmailadmin.h中增加:
#define BYTE2M(size) size/1048576

extern char DefaultDomainQuota[MAX_BUFF];
extern char DefaultQuota[MAX_BUFF];

在limits.c中增加
memset(DefaultDomainQuota, 0, MAX_BUFF);

else if ( strncmp(tmpstr, "default_domain_quota", 20) == 0 ) {
tmpstr = strtok(NULL," :\t\n");
if (tmpstr==NULL) continue;
strncpy(DefaultDomainQuota, tmpstr, MAX_BUFF);
}
在qmailadmin.c中增加:
char DefaultDomainQuota[MAX_BUFF];

在user.c中增加
/**
* @return: size M, if return value == -1, no limit.
*/
#define BYTE2M(size) size/1048576
int count_users_quota()
{
struct vqpasswd *pw;
int ret = 0;

pw = vauth_getall(Domain,1,0);
while(pw!=NULL){
if (strcmp(pw->pw_shell, "NOQUOTA") == 0) return -1;
ret += BYTE2M(atol(pw->pw_shell));
pw = vauth_getall(Domain,0,0);
}
return ret;
}

在template.c中增加
case 'Q':
{
if (DefaultDomainQuota[0]) {
fprintf(actout, "%sM", DefaultDomainQuota);
} else {
fprintf(actout, "%s", NOLIMIT_STR);
}

}
break;

case 'q':
{
int usedQuota = count_users_quota();

if (usedQuota > -1) fprintf(actout, "%dM", usedQuota);
else fprintf(actout, "%s", NOLIMIT_STR);
}
break;

2.增加和修改个人用户的时候,显示大小限制。
template.c中
在send_template_now中增加
case 'R':
{
if (DefaultQuota[0]) fprintf(actout, "%d", BYTE2M(atol(DefaultQuota)));
}
在check_user_forward_vacation中增加
if ( newchar=='8') {
if (strcmp(vpw->pw_shell, "NOQUOTA") == 0) {
fprintf(actout, "%s", NOLIMIT_STR);
} else {
fprintf(actout, "%d", BYTE2M(atol(vpw->pw_shell)));
}
return;
}


3.增加用户中,设置邮箱大小
qmailadmin.c 增加
char Quota[MAX_BUFF];
memset(Quota,0, MAX_BUFF);

qmailadmin.h
#define BYTE2M(size) size/1048576
#define M2BYTE(size) size*1048576

extern char DefaultDomainQuota[MAX_BUFF];
extern char DefaultQuota[MAX_BUFF];
extern char Quota[MAX_BUFF];

user.c 函数addusernow中增加

int user_quota;

GetValue(TmpCGI, Quota, "quota=", MAX_BUFF);
user_quota = atoi(Quota);
if (DefaultDomainQuota[0]) {
int used_quota = count_users_quota();
if ( (user_quota <= 0) || (used_quota < 0) ||
(used_quota + user_quota > atoi(DefaultDomainQuota)) ) {

sprintf(StatusMessage, "%s\n", get_html_text("504"));
adduser();
vclose();
exit(0);
}
}

/* changed by gadfly@163.com.
if( DefaultQuota[0]!= 0 ) mypw->pw_shell = DefaultQuota;
*/
if( user_quota > 0 ) {
sprintf(Quota, "%d", M2BYTE(user_quota));
mypw->pw_shell = Quota;
}

4.修改用户中,设置邮件大小,
user.c 函数modusergo中增加
int user_quota = 0;
int old_quota = 0;

GetValue(TmpCGI, Quota, "quota=", MAX_BUFF);
user_quota = atoi(Quota);
old_quota = BYTE2M(atoi(vpw->pw_shell));
if (DefaultDomainQuota[0]) {
int used_quota = count_users_quota();
if ( (user_quota <= 0) || (used_quota < 0) ||
(used_quota + user_quota - old_quota > atoi(DefaultDomainQuota)) ) {

sprintf(StatusMessage, "%s\n", get_html_text("504"));
moduser();
vclose();
exit(0);
}
}
if (old_quota != user_quota) {
if (user_quota < 0) vauth_setquota(ActionUser, Domain, "NOQUOTA");
else {
sprintf(Quota, "%d", M2BYTE(user_quota));
vauth_setquota(ActionUser, Domain, Quota);
}
}


录入时间:2006-05-08 21:16:28 [打印本页] [关闭窗口] [返回顶部]
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

Copyright © 2006-2014 0733168.Com Inc All Rights Reserved
关于我们 | 广告合作 | 联系我们 | 法律声明 | 友情链接 | 意见反馈
本站所收录信息、社区话题、及本站所做之广告均属其个人行为,与本站立场无关
湘ICP备06008436号