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, SenderIDFound, UnknownModifier

Constant Summary collapse

VERSION =

spf-query version

'0.1.5'

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 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

  # 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

  return nil
end