Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Extracting a list of email addresses from a mail header

by nate (Monk)
on May 15, 2000 at 19:55 UTC ( [id://11664]=perlquestion: print w/replies, xml ) Need Help??

nate has asked for the wisdom of the Perl Monks concerning the following question:

Is there a function in one of the assorted CPAN mail modules that can return all of the email addresses from a mail header in a list? I need to be able to find all the addresses an email is being sent to.
  • Comment on Extracting a list of email addresses from a mail header

Replies are listed 'Best First'.
Re: Extracting a list of email addresses from a mail header
by ZZamboni (Curate) on May 15, 2000 at 20:13 UTC
    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

Re: Extracting a list of email addresses from a mail header
by nate (Monk) on May 15, 2000 at 21:52 UTC
    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.
      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

Re: Extracting a list of email addresses from a mail header
by kryten (Scribe) on May 15, 2000 at 20:17 UTC
    You could try Mail::Header which is part of MailTools (but does not seem to show up on its own though :/) Which lets you maniplate the headers with relative ease. Although I do not think it has a function to return all the email addresses you could look through the relevant header fields and grab the addresses from there..

    Update: It would appear that ZZamboni types faster than I do.

Re: Extracting a list of email addresses from a mail header
by Dominus (Parson) on Nov 27, 2000 at 00:03 UTC
    Use the CPAN Email::Find module for that.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://11664]
Approved by root
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (5)
As of 2025-06-13 17:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.