I have a virtual machine that I set up as a secondary DNS server which runs OpenBSD 6.1. Today logging into it, I noticed system messages were piling up in /var/mail because I hadn’t configured the mail server to deliver those messages. Setting up OpenSMTPD was no trouble, but then I had the old mail (thankfully not much) that was still to be delivered.
There are a couple of solutions out there, written in Perl, Python and PHP (urgh!). I don’t have Python on this box, and the Perl one didn’t seem to work with the mailbox. So I cooked up my own:
#!/bin/sh for file in "$@"; do grep -n '^From ' ${file} | { prev=1 while read line; do cur=$( echo "${line}" | cut -f 1 -d: ) if [ "${prev}" != "${cur}" ]; then sed -ne "${prev},$(( ${cur} - 1 )) p" ${file} > ${prev}.eml fi prev=${cur} done } done
If there’s a line in your email body starting with “From “, it may get confused, but it was good enough for the messages that OpenBSD’s daemons send me. I was then able to pipe these individually into sendmail -t to send them on their way.