2015-08-10 3 views
0

Я пытаюсь, чтобы procmail расшифровывал вложенное в base64 вложение. Для начала я следую простой рецепт, найденный здесь:procmail, дающий «нет соответствия» по типу контента

http://www.linuxquestions.org/questions/linux-software-2/procmailrc-decode-data-from-base64-encoded-emails-trying-to-decode-with-uudeview-933670/

Однако, по-видимому Procmail не может найти матч:

procmail: [7459] Mon Aug 10 10:54:43 2015 
procmail: Assigning "LOGFILE=/home/myself/procmail.log" 
procmail: Opening "/home/myself/procmail.log" 
procmail: Assigning "LOGABSTRACT=yes" 
procmail: Assigning "LINEBUF=65535" 
procmail: No match on "^Content-Type: *text/plain" 
procmail: Locking "/home/myself/scratch/prc.out.lock" 
procmail: Assigning "LASTFOLDER=/home/myself/scratch/prc.out" 
procmail: Opening "/home/myself/scratch/prc.out" 
procmail: Acquiring kernel-lock 
procmail: Unlocking "/home/myself/scratch/prc.out.lock" 
Subject: FMSG:219 
Folder: /home/myself/scratch/prc.out      8312 
[168]% 

Мой ~/.procmailrc очень просто:

SHELL=/bin/sh 
PATH=/bin:/usr/bin/:/sbin:/usr/sbin:$PATH 
MAILDIR=$HOME/scratch # this is a symlink to a scratch disk 
DEFAULT=$HOME/scratch/prc.out 
VERBOSE=yes 
LOGFILE=/home/myself/procmail.log 
LOGABSTRACT=yes 
LINEBUF=65535 

:0 
* ^Content-Type: *text/plain 
{ 
     :0 fbw 
     * ^Content-Transfer-Encoding: *base64 
     | $HOME/mmencode -u -b 

     :0 Afhw 
     | formail -I "Content-Transfer-Encoding: 8bit" 
} 

и это начало почтового файла:

Return-Path: <unknown> 
Delivered-To: unknown 
From: <user1> 
To: ole <user2> 
Date: Mon, 20 Jul 2015 14:46:49 +0200 
Subject: FMSG:219 
Message-ID: <[email protected]> 
Accept-Language: en-US 
Content-Language: en-US 
Content-Type: multipart/mixed; 
boundary="_002_6959f239a4d111111111111111111111111111111oletestl_" 
MIME-Version: 1.0 

--_002_6959f239a4d111111111111111111111111111111oletestl_ 
Content-Type: text/plain; charset="us-ascii" 
Content-Transfer-Encoding: quoted-printable 


--_002_6959f239a4d111111111111111111111111111111oletestl_ 
Content-Type: application/x-ole-envelope; name="20150720" 
Content-Description: ole envelope 
Content-Disposition: attachment; filename="20150720"; size=5528; 
creation-date="Mon, 20 Jul 2015 12:46:52 GMT"; 
modification-date="Mon, 20 Jul 2015 12:46:52 GMT" 
Content-Transfer-Encoding: base64 

SDRzSUFBQUFBQUFBQzYxWFdZK2pXTEordnBiOEgxTDEwZzhvaDgxZ3V6dXJSb2ZGZ0EzWWJHWVp6 
UU83d1d4bU1kaS8vaDY3DQpNcnV5ZW5wNjVrbzNKU3NoNG9zNHNaOUFrUlQrOVJpM1hWWlh2Nzdn 
THQzOUFsMTVsVm5vQmg4TS8vL0hIS3ZqblA0NzRQMkZtdjJ0NDlpSDYzb2h2NkhzamYvdC9IVUZS 

... 

--_002_6959f239a4d6959f239a4d111111111111111111111111111111oletestl_ 

Если я пытаюсь соответствовать на "Content-Type: многочастному/смешанная" Я на самом деле получить матч:

procmail: Match on "^Content-Type: multipart/mixed;" 
procmail: No match on "^Content-Transfer-Encoding: *base64" 

, но тогда не на следующих из них ... :(

Подобно с попыткой на

 
procmail: No match on "^Content-Type: application/x-ole-envelope" 

Что мне не хватает?

Благодаря

+0

Это не совсем понятно, что вы хотите сделать. В текстовой/простой части нет текста, а данные base64 - в части x-ole-envelope. Похоже, вы пытаетесь декодировать часть x-ole-envelope, встроенную в тело; Я не уверен, что такое конверт OLE, но данные примера в вашем вопросе, безусловно, не переводят во что-либо значимое. – tripleee

ответ

0

Там нет совпадения в сообщении заголовке на регулярном выражении. Если вы хотите найти совпадение в теле (включая, но не ограничиваясь ими, заголовки частей кузова MIME), используйте флаг B; но правильная поддержка MIME будет намного сложнее, чем это, и почти невозможно сделать в Procmail.

Рецепт, который вы копируете, очень специфичен для нормализации одночастных сообщений text/plain, а не нескольких.

Ваш вопрос очень общий, поэтому я могу предложить только альтернативы в широких пределах. Возможно, сообщение может быть связано с munpack, возможно, на основе некоторых критериев регулярного выражения, которые вполне могут быть выражены в Procmail; но для чего-то более сложного, возможно, для специализированного скрипта Python (или Perl, или Ruby и т. д.).

+0

Спасибо. Я просто перепутал эти флаги ... Я закончил тем, что писал письмо на маленький скрипт, используя ripmime для разметки вложений, затем mmencode -u -b, чтобы декодировать, извлекать заголовки через форму и объединять все в новую почту с (около) оригинальными заголовками и декодированными вложениями, с mailx. –