我现在发现现在所有的信件的主题都使用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 ` 可以跑嗎 ? |