X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=delay_mail;h=68e4d92f0e28fec10746eb3dd6072262f54345b1;hb=3d5241a316e3ff729b19b878b0841558120f75e9;hp=56529732c2f0e80eeea8aab8af82dc0745b97aee;hpb=f14a8572977fb15a0f0285bb626dae41c8fbfc27;p=bin.git diff --git a/delay_mail b/delay_mail index 5652973..68e4d92 100755 --- a/delay_mail +++ b/delay_mail @@ -41,7 +41,8 @@ Enqueue a message which should be sent out later =item B<--delay> -Length of delay (man at for details of specification) +Length of delay (man at for details of specification; Debian systems +see /usr/share/doc/at/timespec) =item B<--email> @@ -93,6 +94,25 @@ Display this manual. =head1 EXAMPLES +The following entry in your procmailrc (or similar) will do the dirty +work: + + :0 Hhbw + * !Message-Id: .*delay[0-9]+@ + * ^TO \/you\+de[^@]+ + |delay_mail --mailto you@foo.com --enqueue --email --delay $MATCH + + delay_mail --list; + +and + + atq; + +will tell you that things are queued up and ready to go. + +You can then bounce messages that you want to deal with later to +you+delay+10=30am_tomorrow@foo.com or similar, and you'll receive the +message again at 10:30 AM tomorrow to deal with. =cut @@ -107,6 +127,7 @@ my %options = (debug => 0, GetOptions(\%options,'debug|d+','help|h|?','man|m', 'list|l','dequeue=s','process|p=s','enqueue|e', + 'queue=s', 'delay|D=s','email|E', 'mailto|mail-to|M=s', ); @@ -225,22 +246,19 @@ elsif ($options{process}) { die "Unable to parse $options{process}"; } # munge the message id - my ($message_id) = $q_e->{email} =~ m/^Message-Id:\s*(.+)/; + my ($message_id) = $q_e->{email} =~ m/^Message-Id:\s*(.+)/mi; if (not $message_id =~ s/\@/delay$q_e->{entry}@/){ $message_id =~ s/(\w)/delay$q_e->{entry}$1/; } - $q_e->{email} =~ s/^(Message-Id:\s*)(.+)/$1$message_id/; + $q_e->{email} =~ s/^(Message-Id:\s*)(.+)/$1$message_id/mi; # send the message my $sendmail_fh; open($sendmail_fh,'|-','/usr/sbin/sendmail',$q_e->{mailto}) or die "Unable to open sendmail to send message"; print {$sendmail_fh} $q_e->{email}; - close($sendmail_fh); - waitpid(-1,0); - if ($?) { - print STDERR "Sendmail failed with $?\n"; - exit $?; - } + close($sendmail_fh) or + print STDERR "Sendmail failed with $?\n" and + exit $?; unlink("$options{queue}/$options{process}"); } else {