免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4289 | 回复: 13
打印 上一主题 下一主题

[Mail] maildirsize不存在时maildrop不会创建maildirsize的讨论 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-22 13:13 |只看该作者 |倒序浏览
晕啊!
小弟用的是maildrop1.6.3,过滤和投递正常,当maildirsize存在时maildrop能否正确记录quota。
但是,我发现手动删除maildirsize后,再使用maildrop进行投递信件,maildrop不会创建maildirsize,这样quota限制就没有起到作用啊!

各位高手有没有碰到同样的情况?有没有解决办法?
如果没有,偶就只好自己改源代码了~~

我的configure是这样:
./configure --enable-maildropmysql --with-mysqlconfig=/usr/local/etc/mysql_maildrop.conf --enable-maildirquota --with-trashquota --with-dirsync --enable-trusted-users=’root maildrop' --enable-maildrop-uid=vpopmail --enable-maildrop-gid=vchkpw --without-db

另外,也配置/usr/local/etc/mysql_maildrop.conf如下:
hostname        localhost
port            3306
socket          /var/lib/mysql/mysql.sock
database        vpopmail
dbuser          <xxxxx>
dbpw            <xxxxx>
dbtable         vpopmail

uid_field               pw_name
uidnumber_field         uid
gidnumber_field         gid
maildir_field           pw_dir
homedirectory_field     pw_dir
quota_field             pw_shell
mailstatus_field        pw_uid

[ 本帖最后由 akid 于 2005-12-25 15:50 编辑 ]

论坛徽章:
6
数据库技术版块每日发帖之星
日期:2015-10-11 06:20:00数据库技术版块每日发帖之星
日期:2015-10-12 06:20:00数据库技术版块每日发帖之星
日期:2015-10-15 06:20:00数据库技术版块每日发帖之星
日期:2015-10-30 06:20:00综合交流区版块每月发帖之星
日期:2015-12-02 14:59:01数据库技术版块每日发帖之星
日期:2015-12-15 06:20:00
2 [报告]
发表于 2005-12-22 13:28 |只看该作者
用qmailadmin试试看

论坛徽章:
0
3 [报告]
发表于 2005-12-22 14:32 |只看该作者
和qmailadmin有什么关系呢?我的邮件后台管理没问题啊。
现在发现的情况是,手工删除maildirsize文件后,maildrop的信件投递正常,但是不会象vdelivermail那样自动生成新的maildirsize文件,也就失去了quota限制的功能。

论坛徽章:
0
4 [报告]
发表于 2005-12-22 16:37 |只看该作者

郁闷呐!

读了半天vpopmail和maildrop的代码,也找不到当maildirsize文件不存在时自动创建maildirsize文件的代码!
按道理,当maildirsize文件不存在时,vpopmail应该从mysql读取该用户的quota限额情况,然后才能创建maildirsize文件啊~~~

论坛徽章:
0
5 [报告]
发表于 2005-12-23 10:30 |只看该作者
README.maildirquota.html中“Calculating the quota for a Maildir++”一节说:
If maildirsize does not exist, or if its size is at least 5120 bytes, recalculate it using the procedure defined above, and use the recalculated numbers. Otherwise, read the contents of maildirsize, and add up the totals.

看来maildrop当maildirsize不存在时是会重新计算并生成maildirsize的。只是,为什么我配置了mysql还不行呢?

论坛徽章:
0
6 [报告]
发表于 2005-12-23 17:13 |只看该作者
看看这个帖子,也许对你有用 http://bbs.chinaunix.net/viewthread.php?tid=489953

论坛徽章:
0
7 [报告]
发表于 2005-12-23 17:19 |只看该作者
搞定了!!!
读了一天源码,终于发现是vpopmail和maildrop一点点不兼容的问题!
vpopmail生成的数据库的pw_shell字段(记录quota)格式是不带“S”的,而maildrop要求带“S”!
我的邮件系统原来是用vpopmail创建的,数据库中的pw_shell字段(记录quota)全部是用不带“S”的,如“ 31457”,而maildrop读取pw_shell字段后解析要求带“S”,如“ 31457S”,否则认为是无效quota!
我把mysql数据库中的pw_shell字段中的字符串全部增加“S”就OK了!
maildrop的maildir目录下maildirquota.c中的部分源代码如下:
switch (*quota)        {
                case MDQUOTA_SIZE:
                        q->nbytes=i;
                        break;
                case MDQUOTA_COUNT:
                        q->nmessages=i;
                        break;
                }
另外,maildrop后面要加参数“-d <用户名>”,否则maildrop不会去读mysql数据库!

[ 本帖最后由 akid 于 2005-12-23 17:21 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2005-12-23 17:22 |只看该作者
原帖由 lnux 于 2005-12-23 17:13 发表
看看这个帖子,也许对你有用 http://bbs.chinaunix.net/viewthread.php?tid=489953

maildrop加上--enable-maildirquota是可以支持空间限额的。

论坛徽章:
0
9 [报告]
发表于 2005-12-25 15:44 |只看该作者

总结一下

相比lnux的方法,采用enable-quota的maildrop来投递邮件主要有两个好处:
1、不需要再通过vdelivermail投递邮件,减少系统负荷。
2、可以将垃圾邮件投递到用户自己的Maildir/.Trash下,而且还计算用户的quota。

总结起来,主要有几点:
1、注意数据库中记录quota的字段的内容是否以“S”结尾(早期的vpopmail创建用户的pw_shell字段内容中可能没有以“S”结尾)。比如pw_shell字段的数值应该是“314572S”,而不能是“314572”。
2、注意.qmail中对maildrop的调用必须加上-d <用户名>,否则maildrop不会去读mysql数据库。我.qmail的例子(其中test是邮件地址的用户名部分)如下:
|/usr/local/bin/maildrop -d test ./.mailfilter
3、注意编译maldrop的参数,我的参数(参考了一些专家的配置)如下:
./configure --enable-maildropmysql --with-mysqlconfig=/usr/local/etc/maildropmysql.config --enable-maildirquota --with-trashquota --with-dirsync --enable-trusted-users=’root maildrop' --enable-maildrop-uid=vpopmail --enable-maildrop-gid=vchkpw --without-db
4、注意安装修改好maildropmysql.config,特别注意default_uidnumber/default_gidnumber和uidnumber_field/gidnumber_field的配置。
1)将maildrop目录下的maildropmysql.config拷贝到configure中配置的目录下(例子中是=/usr/local/etc目录)
2)修改maildropmysql.config中的值,其中注意default_uidnumber/default_gidnumber为vpopmail这个帐户的uid/gid;一般情况下,uidnumber_field/gidnumber_field指向数据库中值为NULL的字段(这样maildrop会使用default_uidnumber/default_gidnumber作为uid/gid)。特别强调不要指向pw_uid/pw_gid,必要时可以在数据库中增加缺省值为NULL的uid/gid字段。
4、测试过程可以在.mailfilter中加log,比如第一行为logfile "/var/log/maildrop.log"(注意创建该文件并设置好读写权限),在.mailfilter中可以用类似“log "user's email is $EXT@$HOST"”这样的语句将一些变量Log下来观察排错。
4、测试过程可以手动调用maildrop进行邮件投递,比如在~vpopmail/domains/mydomain/test目录下cat ./Maildir/cur/1135234315.883.mail,S=1529:2, | /usr/local/bin/maildrop -d test ./.mailfilter。这样如果maildrop有什么错误会直接在终端上显示出来,排错简捷一些。

BTW:.qmail和.mailfilter的用户属性务必是vpopmail:vchkpw,之前已经有许多讨论。

[ 本帖最后由 akid 于 2005-12-25 15:52 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2005-12-25 21:27 |只看该作者
原帖由 akid 于 2005-12-25 15:44 发表
相比lnux的方法,采用enable-quota的maildrop来投递邮件主要有两个好处:
1、不需要再通过vdelivermail投递邮件,减少系统负荷。
2、可以将垃圾邮件投递到用户自己的Maildir/.Trash下,而且还计算用户的quota。 ...


呵呵,楼主正解,看来花了不少工夫钻研了。

另一个支持Maildir++标准(quota带s/c的)的web管理后台是ExtMan,作为Extmail项目配套的web 管理端,可以支持带S的maildir++标准,也可以支持不带S的普通quota实现。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP