Spring naar hoofdtekst

Alternatief voor AttachmentExtractor

Geplaatst op door ,
Laatste aanpassing op .

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.

Inhoudsopgave

Atom-feed Atom-feed van FWiePs weblog

Artikelen


Doorzoek de onderstaande categorieën om de lijst met artikelen te filteren.