我要投稿
  • 您当前的位置:中国教育资源网 -> 技术教程 -> 服务器网络 -> 服务器教程 -> 邮件服务器教程 -> 教程内容
  • [ 收藏本页教程 ]
  • maildrop于subject使用base64编码的问题!急..邮件服务器教程

    教程作者:佚名    教程来源:不详   教程栏目:邮件服务器教程    收藏本页
                  摘要:maildrop于subject使用base64编码的问题!急..
    我现在发现现在所有的信件的主题都使用base64编码.
    我使用outlook发送了两封信,一个主题是纯英文(test),一个包含汉字(test一二).
    在我的邮箱中察看邮件原文,发现包含中文的已经被编码了.
    我想问如何使用maildrop过滤规则来过滤所有包含test的邮件呢?
    或者说maildrop能否将编码的主题进行解码呢?

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

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

     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 ` 可以跑嗎 ?

    我要投稿   -   广告合作   -   关于本站   -   友情连接   -   网站地图   -   联系我们   -   版权声明   -   设为首页   -   加入收藏   -   网站留言
    Copyright © 2009 - 20012 www.chinesejy.com All Rights Reserved.中国教育资源网 版权所有