1
0
مراية لـ https://github.com/postalserver/postal.git تم المزامنة 2025-11-30 21:32:30 +00:00

fix(smtp_server): refactor mx lookups to randomly order mx records with the same priority

closes #1408
closes #1405
هذا الالتزام موجود في:
Adam Cooke
2021-07-27 14:07:38 +00:00
الأصل fcb63616e1
التزام bc22394fdd
4 ملفات معدلة مع 40 إضافات و8 حذوفات

عرض الملف

@@ -19,5 +19,6 @@ ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.acronym 'UUID'
inflect.acronym 'HTTP'
inflect.acronym 'DB'
inflect.acronym 'MX'
inflect.acronym 'DKIM'
end

عرض الملف

@@ -19,12 +19,13 @@ module Postal
autoload :MessageInspection
autoload :MessageParser
autoload :MessageRequeuer
autoload :MXLookup
autoload :QueryString
autoload :RabbitMQ
autoload :ReplySeparator
autoload :RspecHelpers
autoload :SendResult
autoload :Sender
autoload :SendResult
autoload :SMTPSender
autoload :SMTPServer
autoload :SpamCheck

34
lib/postal/mx_lookup.rb Normal file
عرض الملف

@@ -0,0 +1,34 @@
module Postal
class MXLookup
class << self
def lookup(domain)
records = resolve(domain)
records = sort(records)
records.map { |m| m[1] }
end
private
def sort(records)
records.sort do |a, b|
if a[0] == b[0]
[-1, 1].sample
else
a[0] <=> b[0]
end
end
end
def resolve(domain)
Resolv::DNS.open do |dns|
dns.timeouts = [10,5]
dns.getresources(domain, Resolv::DNS::Resource::IN::MX).map { |m| [m.preference.to_i, m.exchange.to_s] }
end
end
end
end
end

عرض الملف

@@ -200,13 +200,9 @@ module Postal
def servers
@options[:servers] || self.class.relay_hosts || @servers ||= begin
mx_servers = []
Resolv::DNS.open do |dns|
dns.timeouts = [10,5]
mx_servers = dns.getresources(@domain, Resolv::DNS::Resource::IN::MX).map { |m| [m.preference.to_i, m.exchange.to_s] }.sort.map{ |m| m[1] }
if mx_servers.empty?
mx_servers = [@domain] # This will be resolved to an A or AAAA record later
end
mx_servers = MXLookup.lookup(@domain)
if mx_servers.empty?
mx_servers = [@domain] # This will be resolved to an A or AAAA record later
end
mx_servers
end