X-Git-Url: https://git.donarmstrong.com/?p=bin.git;a=blobdiff_plain;f=delay_mail;h=68e4d92f0e28fec10746eb3dd6072262f54345b1;hp=71d1663ad31385b9851a137aa7b2c5be2f258998;hb=HEAD;hpb=4b99383e317a51af892013c53e086d512dd5f089 diff --git a/delay_mail b/delay_mail index 71d1663..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> @@ -50,8 +51,8 @@ regex to parse it: $delay =~ m/[+-]d(?:ela?y?)?[-+]([^\@]+)/; $delay = $1; - $delay =~ s/_/ /; - $delay =~ s/=/:/; + $delay =~ s/_/ /g; + $delay =~ s/=/:/g; Thus, foo-delay-now+5_min@bar.baz becomes now+5 min and foo-del+00=30=00@bar.baz becomes 00:30:00 @@ -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', ); @@ -160,8 +181,8 @@ if (exists $options{enqueue}) { if ($options{email}) { $delay =~ m/[+-]d(?:ela?y?)?[-+]([^\@]+)/; $delay = $1; - $delay =~ s/_/ /; - $delay =~ s/=/:/; + $delay =~ s/_/ /g; + $delay =~ s/=/:/g; } # slurp email local $/; @@ -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 {