返回列表 发帖

关于igenus无法正常解析Quoted-Printable格式编码邮件的问题

igenus提供的对Quoted-Printable格式编码进行解析的功能有错误,导致部分使用Quoted-Printable编码的邮件显示为乱码,我正在写这个补丁,稍后公布!

公布解决方案

其实这是个很小的bug,在进行邮件编码的时候,有的使用“quoted-printable”,有的却写成了“Quoted-Printable”,这到底有什么不同呢,其实说白了都是一种编码方式,写法也一样,但是igenus对这似乎一样的编码方式却出现了两种的解释方法。

错误代码如下:
switch($Content_Transfer_Encoding){
                case "quoted-printable":
                        while( $line=fgets($FD_MAIL,2048) ){
                                if( trim($line) == "--".$Boundary ) break;
                                if( trim($line) == "--".$Boundary."--" ){
                                        $PartEnd = 1;
                                        break;
                                }
                                $buff .= $line;
                                $k++;
                                if($k==CFG_BUFF_NUM)
                                {
                                        $buff = quoted_printable_decode($buff);
                                        fwrite($FD_BODY,$buff);
                                        $Size += strlen($buff);
                                       
                                        $buff = ''; $k = 0;
                                }                               
                               
                        }
                        // 输出末尾的部分
                        $buff = quoted_printable_decode($buff);
                        fwrite($FD_BODY,$buff);
                        $Size += strlen($buff);
                        break;
                                       
                case "base64":
                        $buff = '';
                        $k = 0;
                        while( $line=fgets($FD_MAIL,2048) ){
                                if( trim($line) == "--".$Boundary ) break;
                                if( trim($line) == "--".$Boundary."--" ){
                                        $PartEnd = 1;
                                        break;
                                }
                                $buff .= $line;
                                $k++;
                                if($k==CFG_BUFF_NUM)
                                {
                                        $buff = base64_decode($buff);
                                        fwrite($FD_BODY,$buff);
                                        $Size += strlen($buff);
                                       
                                        $buff = ''; $k = 0;
                                }
                        }
                        // 输出末尾的部分
                        $buff = base64_decode($buff);
                        fwrite($FD_BODY,$buff);
                        $Size += strlen($buff);

                break;

                case "binary":
                case "8bit":
                case "":
                default:
                        $buff = '';
                        $k = 0;                       
                        while( $line=fgets($FD_MAIL,2048) ){
                                if( trim($line) == "--".$Boundary ) break;
                                if( trim($line) == "--".$Boundary."--" ){
                                        $PartEnd = 1;
                                        break;
                                }
                                $buff .= $line;
                                $k++;
                                if($k==CFG_BUFF_NUM)
                                {
                                        fwrite($FD_BODY,$buff);
                                        $Size += strlen($buff);
                                       
                                        $buff = ''; $k = 0;
                                }                               
                        }


这里面可以看出来,只有quoted-printable的解码方法,而php默认大小写敏感,所以这就导致Quoted-Printable按照default进行解释了,这就导致部分的邮件中Quoted-Printable格式解释错误。

解决的方法更简单,只要使用        $Content_Transfer_Encoding=strtolower($Content_Transfer_Encoding);
进行一下强制转换就可以了,具体位置在prev_inc文件的156行后,不过类似的大小写问题这个文件里面还有,建议都进行一下强制转换。

别看这个问题看起来可能并不起眼,但我用了差不多一天来逐语句分析,我用的是\igenus_2[1].0.1_20040713_release版本,不过我发现新版本中这个问题依然存在,希望大麻兄在下个版本中更新这个Bug。

TOP

谢谢您的指正,igenus3中已经修正了该错误

TOP

返回列表