A print filter for e-mail that relies on a2ps and uses no temp files
#!/bin/sh # \ exec tclsh $0 ${1+"$@"} # Fun little mail message formatting tool. # Relies on a2ps. set data [ read stdin ] set output <html> set sig 0 set header 1 set recipients 0 set hpat {<b>\1</b><i>\2</i><br>} set spat {<b>\1</b><i><b>\2</b></i><br>} # the name of the print queue to use set printer hpmlknco1 # if you want a graphic in the upper right corner # of page 1. set graphic /home/pehrens/public_html/mutt_letter.gif if { [ file readable $graphic ] } { lappend output "<img align=right src=$graphic>" } foreach line [ split $data "\n" ] { set done 0 if { $header } { # handle header lines. if { [ regsub -nocase {^(Date:|Sent:|From:)(.+)$} $line $hpat line ] } { set recipients 0 set done 1 } # might be a long list of recipients... if { [ regsub -nocase {^(To:|Cc:)(.+)$} $line $hpat line ] } { set recipients 1 set done 1 } # will be the last line of contained message headers if { [ regsub -nocase {^(Subject:)(.+)$} $line $spat line ] } { set recipients 0 set done 1 } # will generally be the last line of the header if { [ regsub -nocase {^(X-mailer:)(.+)$} $line $hpat line ] } { set recipients 0 set done 1 } # if we had a long recipients list in the "To:" or # "Cc:" field if { ! $done && $recipients && ! [ regexp : $line ] } { set line <i>$line</i><br> set done 1 } else { set recipients 0 } # horizontal rule and blank line after header if { ! $done && $header } { set header 0 lappend output <hr><p><pre> } } # we have reached a quoted line if { [ regexp {^(>.+)$} $line ] } { set done 1 } # we have reached a line consisting solely of dashes. # this should signal the start of the signature if { [ regexp -- {^(-+)$} $line ] } { set line <p><p><pre><b> set sig 1 set done 1 } # we are in the body of the sig... if { $sig && ! [ string equal <p><p><pre><b> $line ] } { set done 1 } if { ! $done } { set line <b>$line</b> } # collect htmlized lines lappend output $line } set output [ join $output "\n" ] set out [ open "|a2ps --printer=$printer --pretty-print=html" a+ ] puts $out $output catch { close $out }