Module: SPF::Query

Defined in:
lib/spf/query/ip.rb,
lib/spf/query/macro.rb,
lib/spf/query/query.rb,
lib/spf/query/parser.rb,
lib/spf/query/record.rb,
lib/spf/query/version.rb,
lib/spf/query/modifier.rb,
lib/spf/query/mechanism.rb,
lib/spf/query/exceptions.rb,
lib/spf/query/macro_string.rb

Defined Under Namespace

Classes: IP, InvalidRecord, Macro, MacroString, Mechanism, Modifier, Parser, Record, UnknownModifier

Constant Summary collapse

VERSION =
'0.0.1'

Class Method Summary collapse

Class Method Details

.query(domain, resolver = Resolv::DNS.new) ⇒ String?

Queries the domain for it’s SPF record.

Parameters:

  • domain (String)

    The domain to query.

  • resolver (Resolv::DNS) (defaults to: Resolv::DNS.new)

    The optional resolver to use.

Returns:

  • (String, nil)

    The SPF record or ‘nil` if there is none.



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
# File 'lib/spf/query/query.rb', line 20

def self.query(domain,resolver=Resolv::DNS.new)
  # check for an SPF record on the domain
  begin
    record = resolver.getresource(domain, Resolv::DNS::Resource::IN::SPF)

    return record.strings.join
  rescue Resolv::ResolvError
  end

  # check for SPF in the TXT records
  ["_spf.#{domain}", domain].each do |host|
    begin
      records = resolver.getresources(host, Resolv::DNS::Resource::IN::TXT)

      records.each do |record|
        txt = record.strings.join

        if txt.include?('v=spf1')
          return txt
        end
      end
    rescue Resolv::ResolvError
    end
  end

  return nil
end