Viewing file: reply.pl (2.82 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/perl
# Demonstration on how to create a reply based on some message in # some folder. # # Usage: # ./reply.pl folder messagenr [signaturefile] # # This code can be used and modified without restriction. # Mark Overmeer, <mailbox@overmeer.net>, 9 nov 2001
use warnings; use strict; use lib '..', '.';
use Mail::Box::Manager 2.00; use Mail::Message::Body::Lines; use Mail::Message::Construct;
# # Get the command line arguments. #
die "Usage: $0 folderfile messagenr [signaturefile]\n" unless @ARGV==3 || @ARGV==2;
my ($filename, $msgnr, $sigfile) = @ARGV;
# You may create different kinds of objects to store body data, but # usually the ::Lines object is ok. If you handle a body as 'reply' # does, you want fast access to the separate lines. Preferably use # ::File when the data is binary, and ::String when it is to be # converted as a whole. Each type will work, but the performance will # differ.
my $bodytype = 'Mail::Message::Body::Lines';
# # Open the folder #
my $mgr = Mail::Box::Manager->new;
my $folder = $mgr->open ( $filename , extract => 'LAZY' # never take the body unless needed ); # which saves memory and time.
die "Cannot open $filename: $!\n" unless defined $folder;
# # Get the message to reply to #
die "There are only ",scalar $folder->messages, " messages in $filename.\n" if $msgnr > $folder->messages;
my $orig = $folder->message($msgnr);
# # Create the reply prelude. # The default only produces the replyPrelude line, but we extend it # a little. #
my $prelude = <<'PRELUDE'; Dear friend,
This automatically produced message is just a reply on yours. Please do not be disturbed. Best wishes, Me, myself, and I.
PRELUDE
$prelude .= $orig->replyPrelude($orig->get('From')); # The usual quote line.
# # The postlude is appended after the inlined source text. It is # less visible than the prelude, because the quoted source text # may be very long. However, when include is ATTACH on NO, the # body is turned into one line, so this will be neat. #
my $postlude = <<'POST';
Herewith, I reply to your message, and I intend to ignore it completely unless you plan to complain to my boss about that.
See you (hope not)
POST
# # Create a new signature #
my $signature; if(defined $sigfile) { $signature = $bodytype->new ( mime_type => 'text/x-vCard' , file => $sigfile ); } else { $signature = $bodytype->new(mime_type => 'text/x-vCard', data => <<'SIG'); This is my signature. It is attached, in case we create a multipart reply, and inlined otherwise. SIG }
# # Create reply # The original signature is stripped, the message is quoted, and a # new signature is added. #
my $reply = $orig->reply ( prelude => $prelude , postlude => $postlude , signature => $signature );
# And now $reply->print; # or $reply->send;
$folder->close;
|