Mail::SPF::v1::Record - SPFv1 record class


Mail-SPF documentation Contained in the Mail-SPF distribution.

Index


Code Index:

NAME

Top

Mail::SPF::v1::Record - SPFv1 record class

SYNOPSIS

Top

See Mail::SPF::Record.

DESCRIPTION

Top

An object of class Mail::SPF::v1::Record represents an SPFv1 (v=spf1) record.

Constructors

The following constructors are provided:

new(%options): returns Mail::SPF::v1::Record

Creates a new SPFv1 record object.

%options is a list of key/value pairs representing any of the following options:

text
terms
global_mods

See new in Mail::SPF::Record.

scopes

See new in Mail::SPF::Record. Since SPFv1 records always implicitly cover the helo and mfrom scopes, this option must either be exactly ['helo', 'mfrom'] (or ['mfrom', 'helo']) or be omitted.

new_from_string($text, %options): returns Mail::SPF::v1::Record; throws Mail::SPF::ENothingToParse, Mail::SPF::EInvalidRecordVersion, Mail::SPF::ESyntaxError

Creates a new SPFv1 record object by parsing the string and any options given.

Class methods

The following class methods are provided:

version_tag_pattern: returns Regexp

Returns a regular expression that matches a version tag of 'v=spf1'.

default_qualifier
results_by_qualifier

See Class methods in Mail::SPF::Record.

Instance methods

The following instance methods are provided:

text
scopes
terms
global_mods
global_mod
stringify
eval

See Instance methods in Mail::SPF::Record.

version_tag: returns string

Returns 'v=spf1'.

SEE ALSO

Top

Mail::SPF, Mail::SPF::Record, Mail::SPF::Term, Mail::SPF::Mech, Mail::SPF::Mod

http://www.ietf.org/rfc/rfc4408.txt

For availability, support, and license information, see the README file included with Mail::SPF.

AUTHORS

Top

Julian Mehnle <julian@mehnle.net>, Shevek <cpan@anarres.org>


Mail-SPF documentation Contained in the Mail-SPF distribution.
#
# Mail::SPF::v1::Record
# SPFv1 record class.
#
# (C) 2005-2008 Julian Mehnle <julian@mehnle.net>
#     2005      Shevek <cpan@anarres.org>
# $Id: Record.pm 50 2008-08-17 21:28:15Z Julian Mehnle $
#
##############################################################################

package Mail::SPF::v1::Record;

use warnings;
use strict;

use base 'Mail::SPF::Record';

use constant TRUE   => (0 == 0);
use constant FALSE  => not TRUE;

use constant mech_classes => {
    all         => 'Mail::SPF::Mech::All',
    ip4         => 'Mail::SPF::Mech::IP4',
    ip6         => 'Mail::SPF::Mech::IP6',
    a           => 'Mail::SPF::Mech::A',
    mx          => 'Mail::SPF::Mech::MX',
    ptr         => 'Mail::SPF::Mech::PTR',
   'exists'     => 'Mail::SPF::Mech::Exists',
    include     => 'Mail::SPF::Mech::Include'
};

use constant mod_classes => {
    redirect    => 'Mail::SPF::Mod::Redirect',
   'exp'        => 'Mail::SPF::Mod::Exp'
};

eval("require $_")
    foreach values(%{mech_classes()}), values(%{mod_classes()});

use constant version_tag            => 'v=spf1';
use constant version_tag_pattern    => qr/ v=spf(1) (?= \x20 | $ ) /ix;

use constant scopes                 => ('helo', 'mfrom');

sub new {
    my ($self, %options) = @_;
    $self = $self->SUPER::new(%options);
    
    if (defined(my $scopes = $self->{scopes})) {
        @$scopes > 0
            or throw Mail::SPF::EInvalidScope('No scopes for v=spf1 record');
        @$scopes == 2 and
        (
            $scopes->[0] eq 'help'  and $scopes->[1] eq 'mfrom' or
            $scopes->[0] eq 'mfrom' and $scopes->[1] eq 'help'
        )
            or throw Mail::SPF::EInvalidScope(
                "Invalid set of scopes " . join(', ', map("'$_'", @$scopes)) . " for v=spf1 record");
    }
    
    return $self;
}

TRUE;