1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
//! Method spf Result
/// Parsed SPF Result
#[derive(Clone, Debug, Default, PartialEq)]
pub struct SpfResult<'hdr> {
/// Result
pub code: SpfResultCode,
/// Reason if supplied
pub reason: Option<&'hdr str>,
/// smtp.mailfrom
pub smtp_mailfrom: Option<&'hdr str>,
/// smtp.helo
pub smtp_helo: Option<&'hdr str>,
/// Unparsed raw
pub raw: Option<&'hdr str>,
}
impl<'hdr> SpfResult<'hdr> {
pub(crate) fn set_smtp(&mut self, prop: &ptypes::SpfSmtp<'hdr>) -> bool {
match prop {
ptypes::SpfSmtp::MailFrom(val) => self.smtp_mailfrom = Some(val),
ptypes::SpfSmtp::Helo(val) => self.smtp_helo = Some(val),
}
true
}
}
/// SPF Result Codes - s.2.7.2
/// SPF defined in RFC 7208 s.2.6 - Results evaluation
#[derive(Clone, Debug, Default, PartialEq)]
pub enum SpfResultCode {
/// Result code not seen
#[default]
Unknown,
/// Either (a) syntactically valid DNS domain name was extracted from the
/// SMTP session that could be used as the one to be authorized, or (b) no
/// SPF records were retrieved from the DNS.
NoneSpf,
/// An explicit statement that the client is authorized to inject mail with
/// the given identity.
Pass,
/// An explicit statement that the client is not authorized to use the domain
/// in the given identity.
Fail,
/// A weak statement by the publishing ADMD that the host is probably not
/// authorized. It has not published a stronger, more definitive policy that
/// results in a "fail".
SoftFail,
/// RFC 8601 - Section 2.4
/// Indication that some local policy mechanism was applied that augments or
/// even replaces (i.e., overrides) the result returned by the authentication
/// mechanism. The property and value in this case identify the local policy
/// that was applied and the result it returned.
Policy,
/// The ADMD has explicitly stated that it is not asserting whether the IP
/// address is authorized.
Neutral,
/// The SPF verifier encountered a transient (generally DNS) error while
/// performing the check. A later retry may succeed without further DNS
/// operator action.
TempError,
/// The domain's published records could not be correctly interpreted.
/// This signals an error condition that definitely requires DNS operator
/// intervention to be resolved.
PermError,
}
pub mod ptypes;
pub use ptypes::SpfProperty;