Mail::Field::Received.3pm

Langue: en

Autres versions - même langue

Version: 2003-03-17 (ubuntu - 07/07/09)

Section: 3 (Bibliothèques de fonctions)

NAME

Mail::Field::Received -- mostly RFC822-compliant parser of Received headers

SYNOPSIS

   use Mail::Field;
 
   my $received = Mail::Field->new('Received', $header);
   my $results = $received->parse_tree();
   my $parsed_ok = $received->parsed_ok();
   my $diagnostics = $received->diagnostics();
 
 

DESCRIPTION

Don't use this class directly! Instead ask Mail::Field for new instances based on the field name!

Mail::Field::Received provides subroutines for parsing Received headers from e-mails. It mostly complies with RFC822, but deviates to accomodate a number of broken MTAs which are in common use. It also attempts to extract useful information which MTAs often embed within the "(comments)".

It is a subclass derived from the Mail::Field and Mail::Field::Generic classes.

ROUTINES

debug

Returns current debugging level obtained via the "diagnostics" method. If a parameter is given, the debugging level is changed. The default level is 3.

diagnose
   $received->diagnose("foo", "\n");
 
 

Appends stuff to the parser's diagnostics buffer.

diagnostics
   my $diagnostics = $received->diagnostics();
 
 

Returns the contents of the parser's diagnostics buffer.

parse

The actual parser. Returns the object (Mail::Field barfs otherwise).

parsed_ok
   if ($received->parsed_ok()) {
     ...
   }
 
 

Returns true if the parse succeed, or if it failed, but was permitted to fail for some reason, such as encountering evidence of a known broken (non-RFC822-compliant) format mid-parse.

parse_tree
   my $parse_tree = $received->parse_tree();
 
 

Returns the actual parse tree, which is where you get all the useful information. It is returned as a hashref whose keys are strings like `from', `by', `with', `id', `via' etc., corresponding to the components of Received headers as defined by RFC822:

   received    =  "Received"    ":"            ; one per relay
                     ["from" domain]           ; sending host
                     ["by"   domain]           ; receiving host
                     ["via"  atom]             ; physical path
                    *("with" atom)             ; link/mail protocol
                     ["id"   msg-id]           ; receiver msg id
                     ["for"  addr-spec]        ; initial form
                      ";"    date-time         ; time received
 
 

The corresponding values are more hashrefs which are mini-parse-trees for these individual components. A typical parse tree looks something like:

   {
    'by' => {
             'domain' => 'host5.hostingcheck.com',
             'whole' => 'by host5.hostingcheck.com',
             'comments' => [
                            '(8.9.3/8.9.3)'
                           ],
            },
    'date_time' => {
                    'year' => 2000,
                    'week_day' => 'Tue',
                    'minute' => 57,
                    'day_of_year' => '1 Feb',
                    'month_day' => ' 1',
                    'zone' => '-0500',
                    'second' => 18,
                    'hms' => '21:57:18',
                    'date_time' => 'Tue, 1 Feb 2000 21:57:18 -0500',
                    'hour' => 21,
                    'month' => 'Feb',
                    'rest' => '2000 21:57:18 -0500',
                    'whole' => 'Tue, 1 Feb 2000 21:57:18 -0500'
                   },
    'with' => {
               'with' => 'ESMTP',
               'whole' => 'with ESMTP'
              },
    'from' => {
               'domain' => 'mediacons.tecc.co.uk',
               'HELO' => 'tr909.mediaconsult.com',
               'from' => 'tr909.mediaconsult.com',
               'address' => '193.128.6.132',
               'comments' => [
                              '(mediacons.tecc.co.uk [193.128.6.132])',
                             ],
               'whole' => 'from tr909.mediaconsult.com (mediacons.tecc.co.uk [193.128.6.132])
 '  
              },
    'id' => {
             'id' => 'VAA24164',
             'whole' => 'id VAA24164'
            },
    'comments' => [
                   '(mediacons.tecc.co.uk [193.128.6.132])',
                   '(8.9.3/8.9.3)'
                  ],
    'for' => {
              'for' => '<adam@spiers.net>',
              'whole' => 'for <adam@spiers.net>'
             },
    'whole' => 'from tr909.mediaconsult.com (mediacons.tecc.co.uk [193.128.6.132]) by host5.hostingcheck.com (8.9.3/8.9.3) with ESMTP id VAA24164 for <adam@spiers.net>; Tue, 1 Feb 2000 21:57:18 -0500'
   }
 
 

BUGS

Doesn't use Parse::RecDescent, which it maybe should.

Doesn't offer a `strict RFC822' parsing mode. To implement that would be a royal pain in the arse, unless we move to Parse::RecDescent.

SEE ALSO

Mail::Field, Mail::Header

AUTHOR

Adam Spiers <adam@spiers.net>

LICENSE

All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.