Inleiding
Al vele jaren maak ik dankbaar gebruik van Mozilla Thunderbird, een programma om e-mails mee op te halen, te lezen, versturen en beheren. Functionaliteit die niet standaard aan boord is, kan met behulp van zogenaamde add-ons worden toegevoegd. Zo gebruikte ik AttachmentExtractor voor het eenvoudig tegelijk opslaan van bijlagen uit meerdere berichten. Dat was heel flexibel, snel en comfortabel…
Totdat ik laatst mijn computer opnieuw installeerde, en ook Thunderbird vanuit het niets naar wens mocht configureren. De genoemde add-on bleek niet (meer) compatibel met nieuwere versies van Thunderbird! Ik ging op zoek naar een werkbaar alternatief maar vond, binnen de gebaande paden, geen oplossing.
Update
Na de overstap van Ubuntu naar Debian, waar ik op korte termijn een eigen
artikel aan zal wijden, bleken de hieronder staande instructies niet meer
te werken. Het pakket cpanminus
was niet beschikbaar in de repositories.
Aldus ging ik op zoek naar een alternatief voor het alternatief en vond de
maildir-utils
met het programma mu
en het commando extract
.
Samen met gpg
voor het eventuele ontsleutelen van de berichten en
bijlagen ontstond uiteindelijk onderstaand shell-script. Dit gaat op zoek
naar .gz
-bijlagen en pakt deze uit. Tot slot wordt het .eml
-bestand
verwijderd.
#!/usr/bin/env bash
# Loop through *.eml files
find "." -maxdepth 1 -name "*.eml" 2>/dev/null -print | while read f
do
echo "Processing '${f}'...";
echo "Extracting...";
( mu extract "${f}" 'encrypted\.asc' 2>/dev/null && \
gpg --decrypt-files 'encrypted.asc' 2>/dev/null && \
mu extract 'encrypted' '.*\.gz' 2>/dev/null && \
rm 'encrypted' 'encrypted.asc';
) || ( \
mu extract "${f}" '.*\.gz' 2>/dev/null \
);
echo "Removing...";
rm "${f}";
done
Met Perl in de aanval
Met een zoekmachine in de hand, kom je tegenwoordig een heel eind. Ik kwam terecht bij een forum over UNIX en aanverwante artikelen. Een onbekende auteur had een Perl-script geschreven om e-mail bijlagen automatisch op te slaan. Zo onervaren als ik ben in Perl, kon ik toch zien, dat dit script veel méér deed dan alleen het opslaan van de bijlagen. Ook moest ik eerst nog een aantal benodigdheden installeren:
sudo apt install cpanminus
sudo cpanm MIME::Parser
Stripshow
Het script verwacht een .eml
-bestand op STDIN
, dus selecteerde ik in
Thunderbird een aantal berichten met bijlagen, drukte Ctrl +
S en riep het script op de commandline aan:
extract-attachment.pl < mijn-email.eml
Ja, de bijlagen werden opgeslagen, maar ook de tekstuele inhoud van de berichten
werd als HTML-bestand opgeslagen. Ik ging aan de slag om het script zo slank en
schoon mogelijk te maken. Uiteindelijk bleef het volgende stukje code over,
waarbij ik op eigen initiatief de hard gecodeerde $TMPDIR
heb vervangen door
de huidige map (cwd
):
#!/usr/bin/perl
use MIME::Parser;
use Cwd qw(cwd);
my $dir = cwd;
sub main {
my $parser = new MIME::Parser;
$parser->output_dir($dir);
$entity = $parser->read(\*STDIN);
unlink<$dir/msg-*.txt>;
unlink<$dir/msg-*.html>;
1;
}
exit(&main ? 0 : -1);
Conclusie
Als bestaande programma's of uitbreidingen niet meer worden onderhouden en
daardoor niet meer werken, gaan creatieve geesten altijd op zoek naar een
werkbaar alternatief. Voor mij is dit slanke script, een eenvoudige wrapper om
Perls MIME::Parser
, ruim voldoende. Ik kan nu weer mijn dagelijkse mails met
bijlagen geautomatiseerd verwerken.