最近在给一个公司部署了postfix+extmail的邮件系统后,遇到了附件大小限制问题。
extmail默认设置是5M,但是由于extmail的统计大小方法问题,一般附件限制比设置的小了1/3。也就是你设置了5M,也就能到3M多。
这里先说下大小限制的配置。
一、修改extmail的webmail.cf文件
SYS_MESSAGE_SIZE_LIMIT = 5242880 注意:以位为单位为5M字节。
SYS_MESSAGE_SIZE_LIMIT = xxx
二、修改/etc/postfix/main.cf文件,
message_size_limit = xxx
三、重启postfix即可,service postfix restrart 和重启apache,service httpd restart
如何解决附件限制大小和系统文件大小相差1/3呢?
首先是修改/var/www/extsuite/extmail/libs/Ext/App目录下的Compose.pm文件
- sub is_oversize {
- my $self = shift;
- my $sys = $self->{sysconfig};
- my $maxsize = $sys->{SYS_MESSAGE_SIZE_LIMIT};
- my $tsize = shift;
- return 0 unless defined $maxsize and $maxsize > 0;
- return 0 unless defined $tsize and $tsize > 0;
- if ($tsize >= $maxsize) {
- return $maxsize;
- }
- 0;
- }
注意到上面的if ($tsize >= $maxsize)了吧,修改为if ($tsize >= 1.29*$maxsize)
这样修改后,基本extmail的附件限制大小就和系统显示的文件大小一样。
目前还有一个文件,就是我们上传一个1M的内容,显示出来的附件大小大约是1.3M,这个问题需要修改一个human函数解决。
在/var/www/extsuite/extmail/libs/Ext目录下,打开Utils.pm文件
找到如下函数
- sub human_size {
- my $s = $_[0];
- if($s<1024) {
- return sprintf("%0.2f", $s/1024)."K";
- }elsif($s<1024*1024) {
- return sprintf("%0.1f", $s/1024)."K";
- }else {
- return sprintf("%0.1f", $s/(1024*1024))."M";
- }
- }
将函数修改如下
- sub human_size {
- my $s = $_[0];
- if($s<1024) {
- return sprintf("%0.2f", $s/1024/1.36)."K";
- }elsif($s<1024*1024) {
- return sprintf("%0.1f", $s/1024/1.36)."K";
- }else {
- return sprintf("%0.1f", $s/(1024*1024*1.36))."M";
- }
- }
这样就解决了extmail的附件大小显示和限制问题。
目前还有一个遗留问题,就是在folder.htm模板界面里显示的邮件大小还是比系统文件大1/3。这个不知道怎么修改了。找到了对应函数,但是它直接显示的多少M或者多少K,用除1.36会出现问题。。。。这个期待高手解决了。
评论:
2010-01-27 13:08
我的技术性文章几乎都是转载呢
2010-01-25 21:51
2010-01-25 20:55