maildrop于subject使用base64编码的问题!急..

[入库:2005年9月21日] [更新:2007年3月24日]

本文简介:


我现在发现现在所有的信件的主题都使用base64编码.
我使用outlook发送了两封信,一个主题是纯英文(test),一个包含汉字(test一二).
在我的邮箱中察看邮件原文,发现包含中文的已经被编码了.
我想问如何使用maildrop过滤规则来过滤所有包含test的邮件呢?
或者说maildrop能否将编码的主题进行解码呢?

如何进行操作. 
各位人兄你们是如何解决的?

 gadfly 回复于:2003-05-07 20:41:32
maildrop本身不能解码,需要利用外挂的工具来解码,然后再过滤。

 addy 回复于:2003-05-08 11:09:29
能否提供一个.告诉我使用什么进行解码?
谢谢了!

 gadfly 回复于:2003-05-08 12:43:28
好像确实没有专门对mail解码的工具

我介绍你几个工具,你自己研究看看:
mmencode工具,metamail软件包
mewencode, mew-common软件包

 addy 回复于:2003-05-08 23:39:09
我有一个设想,就是我将编码的邮件主题分解出来,然后传给外部程序,程序进行解码然后再传入maildrop的变量中.我只要对已经解码的邮件主题进行过滤就可以了.
我写了一个解码程序maildecode
[code:1:0197fc4045]
#!/usr/bin/perl

# Convert Base64 Or Quoted-printable TO Text 

my $a = $ARGV[0] || '';

if ($a=~/^Subject/) {
        $a = $ARGV[1] || '';
 };


if ($a=~/^=\?[\w-]+\?B\?(.*)\?=$/) {
   use MIME:;:;Base64;
   $a = decode_base64($1);
};
if ($a=~/^=\?[\w-]+\?Q\?(.*)\?=$/) {
   use MIME:;:;QuotedPrint;
   $a = decode_qp($1);
};

# USE FOR Test
open(OUTFILE, ">/tmp/list.log");
print OUTFILE $a;
close(OUTFILE);

print $a;

exit(0);
[/code:1:0197fc4045]

然后更改.mailfilter 文件

[code:1:0197fc4045]
SHELL="/bin/sh"


if (/^Subject:;.*/) 
 {
 SUBJECT=$MATCH 
 }



if ($SUBJECT ne "")
 {
  NSUB='/usr/local/bin/maildecode $SUBJECT '

  log "$NSUB"


  if ($NSUB=~/^Subject:;.*[ ]test$/) 
     {
        to "/home/vpopmail/domains/domain_name/a1/Maildir/.1052105760/"
     }
 }

[/code:1:0197fc4045] 

但是我发现maildrop没有执行我这个外部程序,NSUB的内容就是
'/usr/local/bin/maildecode $SUBJECT '字符串, maildecode 没有执行.

我想问为什么,那里错了? 如何更改. 此方法是否可行?

 gadfly 回复于:2003-05-09 10:48:04
有两个地方有问题:
首先perl脚本,subject的标题内容不是开始的
所以改成:
[code:1:fd9754dabc]
if ($a=~/=\?[\w-]+\?B\?(.*)\?=$/) { 
....
if ($a=~/=\?[\w-]+\?Q\?(.*)\?=$/) { 
....
[/code:1:fd9754dabc]

其次,maildrop filter中,外部文件的执行用反撇,所以,那句话改成
NSUB=`/usr/local/bin/maildecode $SUBJECT `

 addy 回复于:2003-05-09 11:08:01
谢谢已经成功解决了
maildecode 程序
[code:1:f486c6bb70]
#!/usr/bin/perl

# Convert Base64 Or Quoted-printable TO Text

my $a = $ARGV[0] || '';

if ($a=~/^Subject/) {
        $a = $ARGV[1] || '';
 };


if ($a=~/=\?[\w-]+\?B\?(.*)\?=$/) {
   use MIME:;:;Base64;
   $a = decode_base64($1);
};
if ($a=~/=\?[\w-]+\?Q\?(.*)\?=$/) {
   use MIME:;:;QuotedPrint;
   $a = decode_qp($1);
};

#open(OUTFILE, ">/tmp/list.log");
#print OUTFILE $a;
#close(OUTFILE);

print $a;

exit(0);
[/code:1:f486c6bb70]

在.mailfilter中加入
[code:1:f486c6bb70]
if (/^Subject:;.*/) 
 {
 SUBJECT=$MATCH 
 }

if ($SUBJECT ne "")
 {
   NSUB=`/usr/local/bin/maildecode $SUBJECT `
}

[/code:1:f486c6bb70]
以后所有的主题过滤只要对$NSUB进行过滤即可

在此感谢gadfly兄的帮助,非常感谢!!!

 HonestQiao 回复于:2004-01-31 00:02:51
咱现在需要这个,在这方面真的经验太少,还希望多多指点一下子,该怎么应用$NSUB呢?

全英文标题邮件,过滤test,规则如下:
包含test标题的信件全部垃圾箱
[code:1:270f2bf4ac]if(/^Subject:;.*test*/ || /^Subject:;.*TEST*/)
{
to "/mail/sms.org/test/Maildir/.Trash/."
}
to "/mail/sms.org/test/Maildir/."[/code:1:270f2bf4ac]

如今中文的标题包含test
[code:1:270f2bf4ac]if (/^Subject:;.*/) 

SUBJECT=$MATCH 


if ($SUBJECT ne "") 

   NSUB=`/usr/local/bin/maildecode $SUBJECT ` 


if($NSUB=~/^.*test*/ || $NSUB=~/^.*TEST*/)
{
to "/mail/sms.org/test/Maildir/.Trash/."
}
to "/mail/sms.org/test/Maildir/."[/code:1:270f2bf4ac]

可是没有任何效果哦.
我想可能是我这里:
[code:1:270f2bf4ac]if($NSUB=~/^.*test*/ || $NSUB=~/^.*TEST*/)[/code:1:270f2bf4ac]

错误了,我在这方面的经验少,希望大伙给个正确的写法

 myblessu 回复于:2004-12-13 09:39:42
我正需要这知识,哪位兄弟在讲讲.

 abel 回复于:2004-12-13 19:35:03
這個問題完全沒考慮  charset 問題,只考慮了 MIME 或 QP 還原可能稍
嫌不足 , 所謂若 local encoding 與你的 patten 相符固然沒問題,
若人家以 UTF8 傳來,還是檔不到 ,EX:
=?UTF-8?B?5q2j5Zyo5a+E6YC....

NSUB=`/usr/local/bin/maildecode $SUBJECT ` 
這個 SUBJECT 若有 ' " 等,有時也會有問題 
若不懂我的意思,再想想 `ls -la "a ` 可以跑嗎 ?

本文关键:maildrop于subject使用base64编码的问题!急..
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top