qmail-vpopmail-courier-imap-qmail-clamav-scanner-igenus安装完成后,webmail(igenus)无法上传和显示中文附件的名称:
原因:basename 的作用在于过滤文件名中的路径信息,但是由于该函数固有的缺陷,在 unix 环境下面,对 windows/dos 的路径信息没有起作用,故而该函数在此没有实际意义。可以去掉,办法是自己写一个类似的函数来替代。
解决:1.编辑 "include/send_fun.php" ,改写basename函数
function formatAttachmentHeader($inFileLocation){
$outAttachmentHeader = "";
//--get content type based on file extension
$contentType = $this->getContentType($inFileLocation);
//add by leera begin-- #下面部分为添加的部分
$str=$inFileLocation;
$tmpArray=split("/",$str);
$sFileName=$tmpArray[count($tmpArray)-1];
$s_inFileLocation=$sFileName;
//add by leera --end #添加到这里
if($this->Encoding=='quoted-printable')
$filename = encode_mime($s_inFileLocation,$this->Encoding,$this->Charset); #把下面一行改为这行
//$filename = encode_mime(basename($inFileLocation),$this->Encoding,$this->Charset);
else $filename = encode_mime($s_inFileLocation,'base64',$this->Charset); #把下面一行改为这行
// else $filename = encode_mime(basename($inFileLocation),'base64',$this->Charset);
========================================================================
2.编辑mime.php,去掉basename,并且强制以下载的方式浏览附件
$get_File = rawurldecode(trim($_GET['File'])); #把下面一行改为这行
//$get_File = rawurldecode(basename(trim($_GET['File'])));
$get_MimeType = $_GET['MimeType'];
$get_Size = $_GET['Size'];
$get_Cmd = $_GET['Cmd'];
if (false){ #把下面一行改为这行
//if ($get_Cmd=="Show"){
$file = $File;
$filename = "$CFG_TEMP/$SG_DOMAIN/$SG_USERNAME/$get_File";
($FD_ATTACH = fopen($filename,"r")) || die("Error open !filename");
if(substr_count($file,'.pif') || substr_count($file,'.exe') || substr_count($file,'.scr') ||
substr_count($file,'.com') || substr_count($file,'.bat') ){
$buff = "<Script>\n";
$buff .= "alert('警告:该邮件中可能携带有病毒程序!')\n";
$buff .= "</Script>";
echo $buff;
exit();
}
if (true){ #把下面一行改为这行
//if ($get_Cmd=="Download"){
$filename = "$CFG_TEMP/$SG_DOMAIN/$SG_USERNAME/$get_File";
($FD_ATTACH = fopen($filename,"r")) || die("Error open !filename");
header("Content-type: $get_MimeType; name=\"$get_File\"\n");
header("Accept-Ranges: bytes\n");