postfix+extmail的附件大小显示和限制问题解决办法
最近在给一个公司部署了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会出现问题。。。。这个期待高手解决了。