Take a look at the MailTools
package from Graham Barr. In particular, Mail::Internet, Mail::Header and Mail::Address
may be what you are looking for. Also, doing a search for
Mail::
on CPAN yields some results that may be interesting.
--ZZamboni
| [reply] |
Thanks for the pointers -- I finally got it, but it's a little
messy:
use Mail::Internet;
use Mail::Address;
my @mail;
while(<>) { push @mail, $_; }
#read mail from STDIN and put it in @MAIL
my $EMAIL = new Mail::Internet([@mail]);
my $header = $EMAIL->head();
my @hlines;
push @hlines, $header->get('To');
push @hlines, $header->get('Cc');
push @hlines, $header->get('Bcc');
#thanks [ZZamboni]...
my @addr;
foreach (@hlines) {
my $line = $_;
$line =~ s/^\w+\:(.*)$/$1/gs;
#this is necessary to cut off the initial "To:" from the
#header line -- I'm not sure why Address::Parse doesn't
#do this
push (@addr, Mail::Address->parse($line));
}
#we now have a list of address objects -- convert to text addresses
foreach (@addr) { $_ = $_->address }
#our addresses are now in @addr
if anyone has any suggestions to tidy this up, please post.
Esp. clipping the "To:", "cc:", and "bcc:" seems like it shouldn't
need to be there -- but this worked on my test emails. | [reply] [d/l] |
I think you are bypassing the documented interface of Mail::Header
by accessing its internal data like that (mail_hdr_hash). The
following gives you the headers with the keyword removed:
push @hlines, $header->get('To');
push @hlines, $header->get('Cc');
push @hlines, $header->get('Bcc');
According to the Mail::Header documentation, get() in array
context returns "a list of all the text from all the instances of TAG".
Which should be what you are looking for.
--ZZamboni
| [reply] [d/l] |
| [reply] |
Use the CPAN Email::Find module for that.
| [reply] |