Email::AddressParser - RFC 2822 Address Parsing and Creation


Email-AddressParser documentation Contained in the Email-AddressParser distribution.

Index


Code Index:

NAME

Top

Email::AddressParser - RFC 2822 Address Parsing and Creation

SYNOPSIS

Top

  use Email::AddressParser;

  my @addresses = Email::AddressParser->parse($line);
  my $address   = Email::AddressParser->new(Tony => 'tony@localhost');

  print $address->format;

VERSION

Top

version 0.01

DESCRIPTION

Top

This class is a near drop-in replacement for the regex parsing of Email::Address, which has serious issues for production use (exponential to infinite computation time in some cases). It uses code from Mark Crispin's c-client library to implement the parsing. The resulting parser is much more stable than the regex-based version of Email::Address.

Note, RFC2822 comments are removed by this version (you can pass them in, and you can ask for them, but they will always be empty).

Class Methods

parse
  my @addrs = Email::Address->parse(
    q[me@local, Tony <me@local>, "Tony" <me@local>]
  );

This method returns a list of Email::Address objects it finds in the input string.

There are no comment nesting limitations on this method, though all comments will be ignored.

new
  my $address = Email::Address->new(undef, 'tony@local');
  my $address = Email::Address->new('tony kay', 'tony@local');
  my $address = Email::Address->new(undef, 'tony@local', '(tony)');

Constructs and returns a new Email::AddressParser object. Takes four positional arguments: phrase, email, and comment.

Instance Methods

phrase
  my $phrase = $address->phrase;
  $address->phrase( "Me oh my" );

Accessor for the phrase portion of an address.

address my $addr = $address->address; $addr->address( "me@PROTECTED.com" );

Accessor for the address portion of an address.

comment
  my $comment = $address->comment;
  $address->comment( "(Work address)" );

Accessor for the comment portion of an address. Currently a no-op.

format
  my $printable = $address->format;

Returns a properly formatted RFC 2822 address representing the object.

SEE ALSO

Top

Email::Address.

AUTHOR

Top

Parser by Mark Crispin. Perl integration by Anthony Kay <tkay@cs.uoregon.edu>. Most documentation shamelessly borrowed from Email::Address.

COPYRIGHT

Top


Email-AddressParser documentation Contained in the Email-AddressParser distribution.

package Email::AddressParser;

use 5.008;
use strict;
use warnings;

require Exporter;

our @ISA = qw(Exporter);

# Items to export into callers namespace by default. Note: do not export
# names by default without a very good reason. Use EXPORT_OK instead.
# Do not simply export all your public functions/methods/constants.

# This allows declaration	use Email::AddressParser ':all';
# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
# will save memory.
our %EXPORT_TAGS = ( 'all' => [ qw(
	
) ] );

our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );

our @EXPORT = qw(
	
);

our $VERSION = '0.04';

require XSLoader;
XSLoader::load('Email::AddressParser', $VERSION);

sub new { 
   bless { personal => $_[1],
           email => $_[2],
           comment => $_[3],
           original => $_[4],
         }, $_[0]; 
}

sub phrase
{
   my $this = shift;

   return $this->{personal};
}

sub original
{
   my $this = shift;

   return $this->format;
}

sub address
{
   my $this = shift;
   return $this->{email};
}

sub format
{
   my $this = shift;
   if($this->{personal}) {
      return _quoted_phrase($this->{personal}) . " <" . $this->{email} . ">";
   } else {
      return $this->{email};
   }
}

sub comment { "" }

sub parse
{
   my $class = shift;
   my $data = shift;
   my $arr = internal_parse($data);
   my @rv = ();

   for my $v (@$arr) {
      bless $v, "Email::AddressParser";
      push @rv, $v;
   }

   return @rv;
}

sub _quoted_phrase {
  my $phrase = shift;

  return $phrase if $phrase =~ /\A=\?.+\?=\z/;

  $phrase =~ s/\A"(.+)"\z/$1/;
  $phrase =~ s/\"/\\"/g;

  return qq{"$phrase"};
}

1;
__END__