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.




Recent Comments