| Mail-SPF documentation | Contained in the Mail-SPF distribution. |
Mail::SPF::Mod::Exp - SPF record exp modifier class
An object of class Mail::SPF::Mod::Exp represents an SPF record modifier of
type exp.
The following constructors are provided:
Creates a new SPF record exp modifier object.
%options is a list of key/value pairs representing any of the following options:
Creates a new SPF record exp modifier object by parsing the string and
any options given.
The following class methods are provided:
Returns 'exp'.
Returns a regular expression that matches a modifier name of 'exp'.
Returns a precedence value of 0.2. See precedence in Mail::SPF::Mod.
The following instance methods are provided:
Returns the domain-spec parameter of the modifier.
If the given SPF result is a fail result, retrieves the authority domain's
explanation string from the modifier's target domain and attaches it to the SPF
result. If an error occurs during the retrieval of the explanation string,
does nothing, as if the modifier was not present. See RFC 4408, 6.2, for
details.
See Mail::SPF::Mod for other supported instance methods.
Mail::SPF, Mail::SPF::Mod, Mail::SPF::Term, Mail::SPF::Record
http://www.ietf.org/rfc/rfc4408.txt
For availability, support, and license information, see the README file included with Mail::SPF.
Julian Mehnle <julian@mehnle.net>, Shevek <cpan@anarres.org>
| Mail-SPF documentation | Contained in the Mail-SPF distribution. |
# # Mail::SPF::Mod::Exp # SPF record "exp" modifier class. # # (C) 2005-2008 Julian Mehnle <julian@mehnle.net> # 2005 Shevek <cpan@anarres.org> # $Id: Exp.pm 50 2008-08-17 21:28:15Z Julian Mehnle $ # ############################################################################## package Mail::SPF::Mod::Exp;
use warnings; use strict; use Mail::SPF::Mod; use base 'Mail::SPF::GlobalMod'; use Error ':try'; use Mail::SPF::MacroString; use constant TRUE => (0 == 0); use constant FALSE => not TRUE; use constant name => 'exp'; use constant name_pattern => qr/${\name}/i; use constant precedence => 0.2;
sub parse_params { my ($self) = @_; $self->parse_domain_spec(TRUE); return; }
sub params { my ($self) = @_; return $self->{domain_spec}; }
# Make read-only accessor: __PACKAGE__->make_accessor('domain_spec', TRUE);
sub process { my ($self, $server, $request, $result) = @_; try { my $exp_domain = $self->{domain_spec}->new(server => $server, request => $request); my $txt_packet = $server->dns_lookup($exp_domain, 'TXT'); my @txt_rrs = grep($_->type eq 'TXT', $txt_packet->answer); @txt_rrs > 0 or $server->throw_result('permerror', $request, "No authority explanation string available at domain '$exp_domain'"); # RFC 4408, 6.2/4 @txt_rrs == 1 or $server->throw_result('permerror', $request, "Redundant authority explanation strings found at domain '$exp_domain'"); # RFC 4408, 6.2/4 my $explanation = Mail::SPF::MacroString->new( text => join('', $txt_rrs[0]->char_str_list), server => $server, request => $request, is_explanation => TRUE ); $request->state('authority_explanation', $explanation); } # Ignore DNS and other errors: catch Mail::SPF::EDNSError with {} catch Mail::SPF::Result::Error with {}; return; }
TRUE;