Se o seu Procmail ou o MTA destinatário estiver configurado para colocar uma From_
line antes da mensagem propriamente dita, este pseudo-cabeçalho geralmente já contém a data. Você precisará analisá-lo, o que é um empecilho, portanto, a menos que seja um sistema em que você realmente precise otimizar o desempenho (centenas de correspondências por segundo nessa condição?), A solução mais fácil é chamar date +%Y%m%d
. / p>
Para combinar em um dos dois cabeçalhos não relacionados, basta colocar os dois em uma expressão regular com |
:
:0
* ^Content-type:
* ^From:(.*\<)?foo@example\.tld|^Subject: Your daily report
| ripmime --overwrite --no-nameless -i - -d /dir/to/save/attachment/$(date +%Y%m%d)_report.xslx
(bug aqui; veja a atualização abaixo.)
As sinalizações fw
não fazem sentido neste contexto, então eu as tirei (e, na verdade, não tenho certeza se a condição Content-type:
faz muito sentido também; a maioria das mensagens terá de qualquer maneira, nos dias de hoje ).
Se você tem condições mais complexas que você deseja combinar, você pode usar um princípio fundamental da lógica chamado leis de Morgan. Não existe nenhuma sintaxe direct no Procmail para dizer "esta condição ou essa condição", mas você pode refatorar isto para" não ((não esta condição) e (não essa condição)). "
:0
* ! this condition
* ! that condition
{ } # nothing happens here
:0E # else
{ LOG="at least one of them matched
" }
Ou simplesmente use pontuação;
:0
* 1^0 this condition
* 1^0 that conditon
{ LOG="at least one of them matched
" }
Atualização:
Parece que ripmime
não suporta (extraindo ou nomeando) um anexo individual. A solução mais fácil é talvez um trabalho cron
que renomeia a chegada mais recente um pouco antes da meia-noite (ou se você sabe quando ela chega, um pouco depois da última vez que você espera):
55 23 * * * cd /dir/to/save/attachment && mv report.xslx "$(date +%%Y%%m%%d)"_report.xslx
Observe como (peculiarmente) você precisa dobrar qualquer sinal de porcentagem em um comando cron
! Você obviamente reverteria a receita do Procmail acima para simplesmente ter ripmime
save em /dir/to/save/attachment
Alternativamente, eu mudaria o nome do anexo logo depois que ele chegasse, talvez ao mesmo tempo em que aumentasse consideravelmente as condições. O que se segue inclui uma quantidade razoável de adivinhação de como exatamente a mensagem que entrega o anexo é codificada - ele pode escolher entre vários tipos de conteúdo, estruturas MIME, convenções de cabeçalho MIME, etc. provavelmente não funciona sem alguns ajustes.
:0
* ^From:(.*\<)?foo@example\.tld
* ^Subject: Your daily report
* HB ?? ^Content-type: application/(octet-stream|vnd\.openxmlformats-officedocument\.spreadsheetml\.sheet|vnd\.ms-here-be-dragons-xslx); filename="?report.xslx
| ( cd dir/to/save/attachment; \
ripmime --overwrite --no-nameless -i - -d . && \
mv report.xslx $(date +%Y%m%d)"_report.xslx )
O cabeçalho Content-type:
pode não conter o nome do arquivo; ele poderia (e esses dias devem) ser especificados em Content-Disposition:
, mas muitos remetentes os colocam em ambos os lugares para compatibilidade com versões anteriores. O nome do arquivo deve ser corretamente codificado com RFC2231, o que significa que vários campos opcionais podem ser preenchidos onde eu convenientemente assumi que eles estarão vazios, como eram quando os nomes de arquivos ASCII eram o único jogo na cidade.
Observe também como eu preciso do remetente e do assunto para corresponder agora. O HB ??
diz (imprecisamente) para procurar uma correspondência nos cabeçalhos das mensagens principais ou em algum lugar do corpo. Corretamente falando, a correspondência deve estar nos cabeçalhos de uma parte do corpo MIME no último caso, mas o Procmail não tem uma maneira fácil de especificar isso.