Acontece que minha resposta estava na extensa documentação do getmail. Eu preciso usar as chamadas do getmail MultiGuesser
.
No entanto, como no meu caso, meu ISP estava adicionando uma linha como essa nos cabeçalhos de envelope:
for <[email protected]>
e como o MultiGuesser não é perfeito (por exemplo, não é possível adivinhar se o destinatário está bcc'ed), finalmente implementei a ideia original de adicionar delivered_to
lines. Eu mantive o MultiGuesser apenas no caso do meu ISP parar de adicionar essa linha útil. O utilitário é um script bash que usa formail
(sugerido por dirkt em sua resposta). Não é rápido porque cria arquivos temporários para todos os e-mails que processa, mas funciona bem.
#!/bin/bash
# Reads email from stdin and prints it to stdout with a twist:
# If it finds a line like " for <[email protected]>" in the envelope
# it will assume it refers to the receipient and will add a "Delivered-To"
# envelope line that will make getmail happy. -- Nick Demou 2018
# bash options for safety in case of errors
set -euf -o pipefail
# read stdin to temp file
cat - > /tmp/deliver.to.$$
logger -p mail.info "getmail, filtering via temp file /tmp/deliver.to.$$"
formail -X "" < /tmp/deliver.to.$$ > /tmp/deliver.to.$$.env
# logger -p mail.info "getmail, extracted envelope/headers to /tmp/deliver.to.$$.env"
ID='grep 'SMTP id ' /tmp/deliver.to.$$.env 2>/dev/null| head -1|sed -e 's/^ *//'' || ID=UNKNOWN
# logger -p mail.info "getmail, extracted ID $ID"
ADDR='grep '^ *for <.*@domain\.com>' /tmp/deliver.to.$$.env 2>/dev/null|head -1|sed -e 's/^.*<\([^>]*\)>.*$//'' || ADDR=UNKNOWN
# logger -p mail.info "getmail, extracted delivery address $ADDR"
if echo $ADDR | grep -q '^[^@]*@domain.com *$' ; then
cat /tmp/deliver.to.$$ | formail -A "Delivered-To: $ADDR"
else
cat /tmp/deliver.to.$$
fi
logger -p mail.info "getmail filtered mail for $ADDR, $ID"
rm /tmp/deliver.to.$$
rm /tmp/deliver.to.$$.env
Meu getmailrc
contém um filtro como este, que chama o script acima:
[filter-1]
type = Filter_external
path = /opt/envelope-add-delivered-to.sh