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.1.0'

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