将qmail邮件标题从base64转换为中文
just
posted @ 2011年3月30日 11:09
in 脚本
, 1989 阅读
#!/usr/bin/perl
$sub=join(" ",@ARGV);
if ($sub=~ /=\?\S+\?\l(\S)\?/) {
if ($1 =~ /[Qq]/) {
$sub=decode_qp($sub);
}
elsif ($1 =~ /[Bb]/) {
$sub=decode_base64($sub);
}
}
elsif ($sub=~ /=[a-fA-F0-9][a-fA-F0-9]/) {
$sub=decode_qp($sub);
}
$subject.=$sub;
$subject=~s/\'/\\\'/g;
$subject=~s/\"/\\\"/g;
print $subject;
# for test
#最好是将生成的subject.log copy一份,在这个基础上修改成为badsubject 主要是怕编码不对
#open(FILE,">> /tmp/subject.log");
#print FILE "$subject\n";
#close(FILE);
sub decode_qp {
my($string) = @_;
@buffer=split(/\?/,$string);
$string = $buffer[3] if ($buffer[3] ne "");
$string =~ s/=([\da-fA-F]{2})/pack("C", hex($1))/ge;
$string =~ /\?=(.*)/;
$string =~ tr/_/ /;
$buffer[4]=~s/^=//;
$buffer[0]=~s/=$//;
$string="$buffer[0]$string$buffer[4]";
return($string);
}
sub decode_base64 {
my($string) = @_;
my($string2);
@buffer=split(/\?/,$string);
$string = $buffer[3] if ($buffer[3] ne "");
$string =~ s/=+$//;
$string =~ tr|A-Za-z0-9+/| -_|;
while($string =~ /(.{1,60})/gs) {
my($string3) = chr(32+length($1)*3/4);
$string2 .= unpack("u",$string3 . $1 );
}
$buffer[4]=~s/^=//;
$buffer[0]=~s/=$//;
$string2="$buffer[0]$string2$buffer[4]";
return($string2);
}
2019年1月22日 12:11
sub decode_qp {
my($string) = @_;
@buffer=split(/\?/,$string);
$string = $buffer[3] if ($buffer[3] ne "");
$string =~ s/=([\da-fA-F]{2})/pack("C", hex($1))/ge;
$string =~ /\?=(.*)/;
$string =~ tr/_/ /;
$buffer[4]=~s/^=//;
$buffer[0]=~s/=$//;
$string="$buffer[0]$string$buffer[4]";
return($string);
}
2024年1月14日 18:11
Easily, the article is actually the best topic on this registry related issue. I fit in with your conclusions and will eagerly look forward to your next updates