I recently switched from Thunderbird to Mail.app, on my MacBook Pro.
For years, I’ve been appending random fortunes to the bottom of my email
messages, and I wanted this feature for Mail.app, too.
When I used Emacs’ VM to read mail, I merely had to hack together a tiny
bit of Elisp and wire
it into a VM hook.
When I moved to Thunderbird, I simply wrote a small shell script to concatenate
a signature prefix file with a random fortune; I then told cron(8) to run
that shell script once a minute, to create a new .signature file. I pointed
Thunderbird at that generated .signature file.
But, as it turns out, you can’t point Mail.app at an external .signature
file, so the Thunderbird solution won’t work.
The answer is to write a small bit of AppleScript (one of the stranger
programming languages I’ve ever used). The AppleScript script:
Uses the same signature prefix file that the Thunderbird shell script uses.
Concatenates the contents of that prefix file with the output from my
Tells Mail.app to replace the named signature. (I have more than one
signature, and I only want to append a random fortune to one of them.)
-- Appends a fortune to the end of a specific signature.---- CONFIGURATION:-- 1. Change the "fortune" variable to the path of your fortune program.-- 2. Change the "signatureName" variable to the name of the signature to update.-- 3. Change the "signatureTemplate" variable to the path to the file containing-- the signature prefix content.---- INSTALLATION:-- Use the AppleScript editor to compile to a .scpt file, then install someplace appropriate.---- USAGE:-- You can wire the script to a key combination, using something like iKey (a-- third party application). Or, you can run it as a cron job, every so often.-- e.g., Once a minute:-- * * * * * osascript /path/to/fortune-sig.scptsetfortunetodo shell script"/Users/bmc/bin/fortune"setsignatureNameto"clapper.org"setsignatureTemplateto(POSIXfile"/Users/bmc/.sig-preamble.clapper")setsigPrefixto(readsignatureTemplateas text)onappIsRunning(appName)tellapplication"System Events"to(nameofprocesses)containsappNameendappIsRunningifappIsRunning("Mail")thentellapplication"Mail"tellsignature(signatureNameasrich text)setitscontenttosigPrefix&fortuneendtellendtellendif
The final piece of the puzzle is another cron(8) entry, in my personal