.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "Mail::SPF::Mech 3" .TH Mail::SPF::Mech 3 2026-04-02 "perl v5.42.1" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NAME Mail::SPF::Mech \- SPF record mechanism base class .SH VERSION .IX Header "VERSION" version 3.20260331 .SH DESCRIPTION .IX Header "DESCRIPTION" An object of class \fBMail::SPF::Mech\fR represents a mechanism within an SPF record. Mail::SPF::Mech cannot be instantiated directly. Create an instance of a concrete sub\-class instead. .SS Constructors .IX Subsection "Constructors" The following constructors are provided: .IP "\fBnew(%options)\fR: returns \fIMail::SPF::Mech\fR" 4 .IX Item "new(%options): returns Mail::SPF::Mech" \&\fIAbstract\fR. Creates a new SPF record mechanism object. .Sp \&\f(CW%options\fR is a list of key/value pairs representing any of the following options: .RS 4 .IP \fBtext\fR 4 .IX Item "text" A \fIstring\fR denoting the unparsed text of the mechanism. .IP \fBqualifier\fR 4 .IX Item "qualifier" A single\-character \fIstring\fR denoting the qualifier of the mechanism. Any of the following may be specified: \fB\*(Aq+\*(Aq\fR (\f(CW\*(C`Pass\*(C'\fR), \fB\*(Aq\-\*(Aq\fR (\f(CW\*(C`Fail\*(C'\fR), \&\fB\*(Aq~\*(Aq\fR (\f(CW\*(C`SoftFail\*(C'\fR), \fB\*(Aq?\*(Aq\fR (\f(CW\*(C`Neutral\*(C'\fR). See RFC 4408, 4.6.2 and 2.5, for their meanings. Defaults to \fB\*(Aq+\*(Aq\fR. .IP \fBname\fR 4 .IX Item "name" A \fIstring\fR denoting the name of the mechanism. \fIRequired\fR if a generic \&\fIMail::SPF::Mech\fR object (as opposed to a specific sub\-class) is being constructed. .IP \fBip_network\fR 4 .IX Item "ip_network" A \fINetAddr::IP\fR object denoting an optional IP address network parameter of the mechanism. Can be either an IPv4 or an IPv6 address, with an optional network prefix length. IPv4\-mapped IPv6 addresses (e.g. \*(Aq::ffff:192.168.0.1\*(Aq) must \fInot\fR be specified directly, but as plain IPv4 addresses. .IP \fBdomain_spec\fR 4 .IX Item "domain_spec" Either a plain \fIstring\fR or a \fIMail::SPF::MacroString\fR object denoting an optional \f(CW\*(C`domain\-spec\*(C'\fR parameter of the mechanism. .IP \fBipv4_prefix_length\fR 4 .IX Item "ipv4_prefix_length" .PD 0 .IP \fBipv6_prefix_length\fR 4 .IX Item "ipv6_prefix_length" .PD A \fIstring\fR denoting an optional IPv4 or IPv6 network prefix length for the \&\f(CW\*(C`domain_spec\*(C'\fR of the mechanism. Note that these options do not apply to the \&\f(CW\*(C`ip_network\*(C'\fR option, which already includes an optional network prefix length. .RE .RS 4 .Sp Other options may be specified by sub\-classes of Mail::SPF::Mech. .RE .ie n .IP "\fBnew_from_string($text, \fR\fB%options\fR\fB)\fR: returns \fIMail::SPF::Mech\fR; throws \fIMail::SPF::ENothingToParse\fR, \fIMail::SPF::EInvalidMech\fR" 4 .el .IP "\fBnew_from_string($text, \fR\f(CB%options\fR\fB)\fR: returns \fIMail::SPF::Mech\fR; throws \fIMail::SPF::ENothingToParse\fR, \fIMail::SPF::EInvalidMech\fR" 4 .IX Item "new_from_string($text, %options): returns Mail::SPF::Mech; throws Mail::SPF::ENothingToParse, Mail::SPF::EInvalidMech" \&\fIAbstract\fR. Creates a new SPF record mechanism object by parsing the string and any options given. .SS "Class methods" .IX Subsection "Class methods" The following class methods are provided: .IP "\fBdefault_qualifier\fR: returns \fIstring\fR" 4 .IX Item "default_qualifier: returns string" Returns the default qualifier, i.e. \fB\*(Aq+\*(Aq\fR. .IP "\fBdefault_ipv4_prefix_length\fR: returns \fIinteger\fR" 4 .IX Item "default_ipv4_prefix_length: returns integer" Returns the default IPv4 network prefix length, i.e. \fB32\fR. .IP "\fBdefault_ipv6_prefix_length\fR: returns \fIinteger\fR" 4 .IX Item "default_ipv6_prefix_length: returns integer" Returns the default IPv6 network prefix length, i.e. \fB128\fR. .IP "\fBqualifier_pattern\fR: returns \fIRegexp\fR" 4 .IX Item "qualifier_pattern: returns Regexp" Returns a regular expression that matches any legal mechanism qualifier, i.e. \fB\*(Aq+\*(Aq\fR, \&\fB\*(Aq\-\*(Aq\fR, \fB\*(Aq~\*(Aq\fR, or \fB\*(Aq?\*(Aq\fR. .IP "\fBname\fR: returns \fIstring\fR" 4 .IX Item "name: returns string" \&\fIAbstract\fR. Returns the name of the mechanism. .Sp This method is abstract and must be implemented by sub\-classes of Mail::SPF::Mech. .IP "\fBname_pattern\fR: returns \fIRegexp\fR" 4 .IX Item "name_pattern: returns Regexp" Returns a regular expression that matches any legal mechanism name. .SS "Instance methods" .IX Subsection "Instance methods" The following instance methods are provided: .IP "\fBtext\fR: returns \fIstring\fR; throws \fIMail::SPF::ENoUnparsedText\fR" 4 .IX Item "text: returns string; throws Mail::SPF::ENoUnparsedText" Returns the unparsed text of the mechanism. Throws a \&\fIMail::SPF::ENoUnparsedText\fR exception if the mechanism was created synthetically instead of being parsed, and no text was provided. .IP "\fBqualifier\fR: returns \fIstring\fR" 4 .IX Item "qualifier: returns string" Returns the qualifier of the mechanism. See the description of the \f(CW\*(C`new\*(C'\fR constructor\*(Aqs \f(CW\*(C`qualifier\*(C'\fR option. .IP "\fBparams\fR: returns \fIstring\fR" 4 .IX Item "params: returns string" \&\fIAbstract\fR. Returns the mechanism\*(Aqs parameters formatted as a string. .Sp A sub\-class of Mail::SPF::Mech does not have to implement this method if it supports no parameters. .IP "\fBstringify\fR: returns \fIstring\fR" 4 .IX Item "stringify: returns string" Formats the mechanism\*(Aqs qualifier, name, and parameters as a string and returns it. (A qualifier that matches the default of \fB\*(Aq+\*(Aq\fR is omitted.) You can simply use a Mail::SPF::Mech object as a string for the same effect, see "OVERLOADING". .ie n .IP "\fBdomain($server, \fR\fB$request\fR\fB)\fR: returns \fIstring\fR" 4 .el .IP "\fBdomain($server, \fR\f(CB$request\fR\fB)\fR: returns \fIstring\fR" 4 .IX Item "domain($server, $request): returns string" Returns the target domain of the mechanism. Depending on whether the mechanism does have an explicit \f(CW\*(C`domain_spec\*(C'\fR parameter, this is either the macro\-expanded \f(CW\*(C`domain_spec\*(C'\fR parameter, or the request\*(Aqs authority domain (see "authority_domain" in Mail::SPF::Request) otherwise. Both a \&\fIMail::SPF::Server\fR and a \fIMail::SPF::Request\fR object are required for resolving the target domain. .ie n .IP "\fBmatch($server, \fR\fB$request\fR\fB)\fR: returns \fIboolean\fR; throws \fIMail::SPF::Result::Error\fR" 4 .el .IP "\fBmatch($server, \fR\f(CB$request\fR\fB)\fR: returns \fIboolean\fR; throws \fIMail::SPF::Result::Error\fR" 4 .IX Item "match($server, $request): returns boolean; throws Mail::SPF::Result::Error" \&\fIAbstract\fR. Checks whether the mechanism matches the parameters of the given request (see Mail::SPF::Request) and returns \fBtrue\fR if it does, or \fBfalse\fR otherwise. In any case, takes both a \fIMail::SPF::Server\fR and a \&\fIMail::SPF::Request\fR object. .Sp This method is abstract and must be implemented by sub\-classes of Mail::SPF::Mech. .ie n .IP "\fBmatch_in_domain($server, \fR\fB$request\fR\fB)\fR: returns \fIboolean\fR; throws \fIMail::SPF::Result::Error\fR" 4 .el .IP "\fBmatch_in_domain($server, \fR\f(CB$request\fR\fB)\fR: returns \fIboolean\fR; throws \fIMail::SPF::Result::Error\fR" 4 .IX Item "match_in_domain($server, $request): returns boolean; throws Mail::SPF::Result::Error" .PD 0 .ie n .IP "\fBmatch_in_domain($server, \fR\fB$request\fR\fB, \fR\fB$domain\fR\fB)\fR: returns \fIboolean\fR; throws \fIMail::SPF::Result::Error\fR" 4 .el .IP "\fBmatch_in_domain($server, \fR\f(CB$request\fR\fB, \fR\f(CB$domain\fR\fB)\fR: returns \fIboolean\fR; throws \fIMail::SPF::Result::Error\fR" 4 .IX Item "match_in_domain($server, $request, $domain): returns boolean; throws Mail::SPF::Result::Error" .PD Checks whether the mechanism\*(Aqs target domain name (that is, any of its DNS \f(CW\*(C`A\*(C'\fR or \f(CW\*(C`AAAA\*(C'\fR records) matches the given request\*(Aqs IP address (see "ip_address" in Mail::SPF::Request), and returns \fBtrue\fR if it does, or \fBfalse\fR otherwise. If an explicit domain is specified, it is used instead of the mechanism\*(Aqs target domain. The mechanism\*(Aqs IP network prefix lengths are respected when matching DNS address records against the request\*(Aqs IP address. See RFC 4408, 5, for the exact algorithm used. .Sp This method exists mainly for the convenience of sub\-classes of Mail::SPF::Mech. .ie n .IP "\fBexplain($server, \fR\fB$request\fR\fB, \fR\fB$result\fR\fB)\fR" 4 .el .IP "\fBexplain($server, \fR\f(CB$request\fR\fB, \fR\f(CB$result\fR\fB)\fR" 4 .IX Item "explain($server, $request, $result)" Locally generates an explanation for why the mechanism caused the given result, and stores it in the given request object\*(Aqs state. .Sp There is no need to override this method in sub\-classes. See the "explanation_template" method. .ie n .IP "\fBexplanation_template($server, \fR\fB$request\fR\fB, \fR\fB$result\fR\fB)\fR: returns \fIstring\fR" 4 .el .IP "\fBexplanation_template($server, \fR\f(CB$request\fR\fB, \fR\f(CB$result\fR\fB)\fR: returns \fIstring\fR" 4 .IX Item "explanation_template($server, $request, $result): returns string" Returns a macro string template for a locally generated explanation for why the mechanism caused the given result object. .Sp Sub\-classes should either define an \f(CW\*(C`explanation_templates_by_result_code\*(C'\fR hash constant with their own templates, or override this method. .SH OVERLOADING .IX Header "OVERLOADING" If a Mail::SPF::Mech object is used as a \fIstring\fR, the \f(CW\*(C`stringify\*(C'\fR method is used to convert the object into a string. .SH "SEE ALSO" .IX Header "SEE ALSO" Mail::SPF::Mech::All, Mail::SPF::Mech::IP4, Mail::SPF::Mech::IP6, Mail::SPF::Mech::A, Mail::SPF::Mech::MX, Mail::SPF::Mech::PTR, Mail::SPF::Mech::Exists, Mail::SPF::Mech::Include .PP Mail::SPF, Mail::SPF::Record, Mail::SPF::Term .PP .PP For availability, support, and license information, see the README file included with Mail::SPF. .SH AUTHORS .IX Header "AUTHORS" Julian Mehnle , Shevek