💾 Archived View for duncan.bayne.id.au › gemlog › finding-and-pretty-printing-many-emails captured on 2024-02-05 at 09:35:43. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-01-29)
-=-=-=-=-=-=-
Posted on 2023-01-04
[This is a repost from my old Weblog - original publication date 2021-09-08.]
Back in 2020, we were one of many customers sold cars with undisclosed defects by a local car dealer.
We’re off to VCAT soon, and so I recently needed to print out a whole bunch of emails. But printing emails from mail clients is slow, and it’s easy to miss individual messages. So I sought to find a solution that used command-line tools to handle the task in bulk.
Unix to the rescue :)
(I’m leaving aside the philosophical question of just how Unixy some of these tools are. I’d argue that despite the odd miss (like --exec options in mail searchers) they have the Unix nature by virtue of being somewhat single-focused, and pleasantly composable.)
Anyway, my approach was to break down the problem into the following steps:
1. Download a local copy of the mail.
2. Search the mail for the individual messages of interest.
3. Pretty-print the messages of interest.
4. Send the pretty-printed documents to the printer.
To download the email, I used mbsync. My email provider is Fastmail; I already use mbsync with mu4e for my own email so this was a natural step. The configuration I used is as follows:
IMAPAccount foo Host mail.messagingengine.com User foo@bayne.id.au Pass REDACTED Port 993 SSLType IMAPS AuthMechs Login IMAPStore foo-remote Account foo MaildirStore foo-local SubFolders Legacy Path ~/email/foo/ Inbox ~/email/foo/INBOX/ Channel foo Master :foo-remote: Slave :foo-local: Patterns * INBOX Create Slave Sync All Expunge Both SyncState *
Having synchronised the mail with:
$ mbsync -c ~/email/foo foo
... the next step was to find the emails I was interested in.
This is where the email indexing tool mu came in. I’ve already initialised an email index in ~/email/ with mu init --maildir=~/email as part of my regular email setup, so all I needed to do was to find the files was to use mu along with GNU Parallel:
$ mkdir ~/tmp/mails $ mu find --skip-dups to:REDACTED or subject:REDACTED --fields=l | parallel -N 1 cp {1} ~/tmp/mails
... where:
--fields=l
... just returns the full path to the email in question.
The next step was to install an email pretty-printer. I chose to use Nick Russler’s email-to-pdf-converter tool, which I installed along with wkhtmltopdf.
This produces pleasant-looking output out of the box, e.g.:
From: Duncan Bayne <duncan@bayne.id.au> To: dhgbayne@fastmail.fm Subject: Test 3 Date: Wed, 09 Jun 2021 16:07:32 +1000 Testing, testing, one two three. -- Duncan Bayne +61 420 817 082 | https://duncan.bayne.id.au/ I usually check my mail every 24 - 48 hours. If there's something urgent going on, please send me an SMS or call me.
... becomes:
Pretty-printing the emails in PDF format was then just a matter of:
$ cd ~/tmp/mails $ find . -type f -exec java -jar ~/bin/emailconverter-2.5.3-all.jar {} \;
Finally, then, all that remained was the fourth and final step: sending the PDFs to the printer:
$ find . -type f -name '*.pdf' -exec lpr {} \;
The end result is a stack of email hard copies, and a slightly more insistent low toner warning on my printer :)
Thanks to:
Wikimedia Commons for the Unix licence plate photo
Jonathan Leffler for the suggestion to use GNU Parallel.
______
______