【问题标题】:Decode base64 from “content-disposition: attachment” body part从“内容处置:附件”正文部分解码 base64
【发布时间】:2015-12-04 13:34:57
【问题描述】:

我正在尝试使用 procmail 提取邮件正文,无论是在邮件中还是在附件中,但我从下面得到了前两个字符:

:0B
* ^()[a-z]+[0-9]+[^\+]
{ msgID = "$MATCH" }
:0B
* ^Content-Disposition: *attachment.*(($)[a-z0-9].*)*($)($)\/[a-z]+[0-9]+
| base64 --decode
{ msgID = "$MATCH" }

base64 的解码不起作用,它要么不匹配整个条件,要么分配LASTFOLDER=base64 --decode"

另见my earlier question

【问题讨论】:

    标签: email base64 procmail mime-mail


    【解决方案1】:

    您不能对一个食谱执行两个操作。你在哪里

    :0B
    * ^stuff\/more stuff
    { msgid="$MATCH" }
    | base64 --decode
    

    第二行是语法错误。我猜你的意思是这样的

    :0B
    * ^stuff\/more stuff
    {
         msgid="$MATCH"
         :0
         | base64 --decode
    }
    

    看到了吗?如果您需要多个操作,请在另一组食谱周围添加一对大括号(不要忘记最后的右大括号!)作为操作部分。也可以看看http://www.iki.fi/era/procmail/quickref.html

    但在您的情况下,您显然想提取经过 base64 解码的令牌,因此您要查找的代码是

    :0B
    * ^Content-Disposition: *attachment.*(($)[a-z0-9].*)*($)($)\/[a-z]+[0-9]+
    { msgID=`echo "$MATCH" | base64 --decode` }
    

    还要注意,等号周围不能有空格。并且正则表达式对于任意 base64 是不正确的;加号和斜杠也在允许的字符中,并且在末尾等于。把\/后面的部分改成[a-z0-9/+]+=*

    【讨论】:

    • 现在我提取了它,但不知何故它没有解码有效的输入:procmail:分配“LASTFOLDER = base64 --decode”procmail:通知comsat:“r@:/var/mail// base64 -d" procmail: 执行 "base64,-d" 主题: Fwd: hi 文件夹: base64 --decode base64: invalid input
    • @tripleeee 对于base64,我在解码之前添加了以下内容:* ^Content-Transfer-Encoding: .*base64 or ...:*64,总是不匹配,我检查了电子邮件,确实有。
    • 为我工作:pastebin.com/ESHtyxkc ...也许用类似的尝试记录更新您的问题。 (不要作为评论发布;即使使用code tags,您也无法在 cmets 中获得体面的代码格式。)
    • 现在也可以查看stackoverflow.com/a/32733374/874188,它更喜欢printf 而不是echo
    • procmail: 分配 "LASTFOLDER={msgID=printf %s "$MATCH" | base64 --decode}" procmail: 打开 "{msgID=printf %s "$MATCH" | base64 --decode }" procmail: 写入 "{msgID=printf %s "$MATCH" | base64 --decode}" @tripleee 时出错
    猜你喜欢
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 2018-10-28
    • 2016-11-21
    • 1970-01-01
    • 2011-06-15
    相关资源
    最近更新 更多