module SPF::Query

Constants

VERSION

spf-query version

Public Class Methods

query(domain,resolver=Resolv::DNS.new) click to toggle source

Queries the domain for it's SPF record.

@param [String] domain

The domain to query.

@param [Resolv::DNS] resolver

The optional resolver to use.

@return [String, nil]

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

@api semipublic

# 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