Skip to content

Instantly share code, notes, and snippets.

@Freika
Created May 24, 2017 10:08
Show Gist options
  • Save Freika/aadea2754359ecf47c5ace1673e1bd35 to your computer and use it in GitHub Desktop.
Save Freika/aadea2754359ecf47c5ace1673e1bd35 to your computer and use it in GitHub Desktop.
пробы с SPF
#!/usr/bin/env ruby
require 'spf'
require 'spf/query'
require 'pry'
KIOSK_IP = '136.243.75.105' # Адрес сервера srv-1.kiiiosk.ru с которого отправляются письма
# KIOSK_IP = '2a01:4f8:212:295d::2' # Адрес сервера srv-1.kiiiosk.ru с которого отправляются письма
KIOSK_SPF = %w[
_spf.kiiiosk.ru
_spf-ipv4.kiiiosk.ru
_spf-ipv6.kiiiosk.ru
].freeze
def validate_spf(domain)
spf_server = SPF::Server.new
request = SPF::Request.new(
versions: [1, 2], # optional
identity: 'info@' + domain,
ip_address: KIOSK_IP
)
result = spf_server.process(request)
result.code # :pass, :fail, etc.
end
def check_spf(domain)
SPF::Query::Record.query domain
rescue SPF::Query::InvalidRecord
''
end
def include_kiosk?(domain)
res = SPF::Query::Record.query domain
!!res.include.find { |i| KIOSK_SPF.include?(i.value) }
rescue SPF::Query::InvalidRecord
false
end
%w(
hello-oils.ru
wanna-be.ru
yopage.ru
kiiiosk.ru
_spf-ipv4.kiiiosk.ru
).each do |domain|
puts "Домен #{domain}"
result = validate_spf(domain)
spf = check_spf(domain)
i = include_kiosk?(domain)
puts "\t#{result}: #{spf}"
puts "\tInclude kiosk: #{i}"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment