Atualmente tenho um servidor Postfix em execução que entrega mensagens recebidas através do procmail. Isso funciona bem, mas agora quero descriptografar qualquer e-mail recebido que seja criptografado automaticamente com pgp. Então criei uma regra procmail para acionar o gnupg.
Este é o meu .procmailrc atual:
:0 fw
* ^Subject: encryptme
| /usr/bin/gpg --decrypt | mail -s "ENCRYPTED: $subject" [email protected]
Agora o e-mail foi descriptografado com sucesso e enviado para[e-mail protegido]mas com assunto vazio (o e-mail mostra apenas "ENCRIPTO: ") e com o endereço de e-mail do servidor como remetente. E é claro que o e-mail descriptografado contém partes do cabeçalho do e-mail.
Content-Type: multipart/mixed; boundary="713bkotRlnRGA7FAhJANoI0IsDpX3ws8N"
--713bkotRlnRGA7FAhJANoI0IsDpX3ws8N
Content-Type: text/plain; charset=ISO-8859-15
Content-Transfer-Encoding: quoted-printable
Just a test.
--713bkotRlnRGA7FAhJANoI0IsDpX3ws8N--
Existe alguma possibilidade de descriptografar os e-mails recebidos dessa maneira automaticamente e "limpar" (apenas a mensagem descriptografada) sem software adicional como o GNU Anubis? E qual é uma boa regra para o procmail acionar o programa (em vez do assunto)?
Espero que esta informação seja suficiente para alguém me ajudar.
Responder1
Em outras palavras, gpg --decrypt
deseja um arquivo, não uma mensagem de e-mail. Uma mensagem de e-mail normalmente consiste em várias partes MIME (seu exemplo mostra uma multipart/mixed
com apenas uma parte do corpo, mas o conceito ainda é válido), que não são arquivos. Você precisa passar apenas a carga criptografada, não o contêiner MIME, para gpg
, ou encontrar um wrapper ou opção que ajude a gpg
analisar o wrapper MIME.
Uma pesquisa rápida no Google revelou um wrapper Perl MIME simples que faz isso:
Caso o link dê errado, reinventar a mesma roda novamente não deve ser um desafio significativo; você basicamente precisa identificar a parte MIME que contém uma carga criptografada, decodificá-la (provavelmente está base64
codificada, a menos que use gpg
a própria "armadura ASCII") e passá-la para gpg
. A existência de uma carga criptografada é provavelmente um bom gatilho, mas talvez o wrapper deva simplesmente passar por qualquer coisa que não contenha uma carga criptografada, e você alimentaria tudo no wrapper.
Tangencialmente, não há nada que defina $subject
no Procmail ou nas suas regras. Você pode fazer algo assim:
:0
* ^Subject:[ ]\/[^ ].*
{ subject=$MATCH }
... onde o espaço em branco entre os colchetes deve ser um espaço e uma tabulação.