Pine and Outgoing Filters

Article replaced 9/5/05

One mailing list I’m on requires that all posts have a signature block; it even requires additional information not found in my normal signature. The problem is, I rarely remember to bother playing that game, especially after a big bulk delete of quoted material. So, my options were either one hell of a neurosurgeon to fix my memory issues, or to find a way to force outgoing mail, but only for that list, to forcefully have a specific signature block.

I use “pine” on unix, which I’m sure will elicit a crowd of laughter. Okay, done? So, pine does have the ability to send outbound messages through a filter. Normally, this is an optional step, and allows people to do things like set up GPG signatures on outbound mail. I’m using that hook to handle signatures.

 #! /usr/local/bin/perl5

 # PINE .pinerc:
 #sending-filters=/home/jfesler/bin/sending-filter _TMPFILE_ _RECIPIENTS_

 my $tmpfile = shift @ARGV;
 die "Missing tmpfile"  unless (-f $tmpfile);
 open(MESSAGE,">>$tmpfile");

 if (scalar grep(/\@st1100.com/,@ARGV)) {
   addsig("/home/jfesler/.signature.stoc");
 }

 sub addsig {
  my($sig) = @_;
  unless(open(SIG,"<$sig")) {
    print STDERR "Missing $sig : $!";
    sleep 3;
    return;
  }
  print MESSAGE "-- \n";
  while(<SIG>) {
    print MESSAGE;
  }
  close SIG;
 }

These do a few things; 1: they set up logging. 2: they match one specific destination, and if found, append a signature file (in this case, .signature.stoc) at the end. And, lastly, it outputs *only* the message body (not the header) to “stdout”. Pine will do unhappy things if you output a header, so don’t do that.

[permalink] · Blog ·