class Truemail::Validate::Smtp
Constants
- ERROR
- RESPONSE_ATTRS
- Response
Attributes
smtp_results[R]
Public Class Methods
new(result)
click to toggle source
Calls superclass method
Truemail::Worker::new
# File lib/truemail/validate/smtp.rb, line 10 def initialize(result) super(result) @smtp_results = [] end
Public Instance Methods
run()
click to toggle source
# File lib/truemail/validate/smtp.rb, line 15 def run return false unless Truemail::Validate::MxBlacklist.check(result) establish_smtp_connection return true if success(success_response?) result.smtp_debug = smtp_results return true if success(not_includes_user_not_found_errors?) add_error(Truemail::Validate::Smtp::ERROR) false end
Private Instance Methods
attempts()
click to toggle source
# File lib/truemail/validate/smtp.rb, line 35 def attempts @attempts ||= begin return {} if fail_fast? || !mail_servers.one? { attempts: configuration.connection_attempts } # attempts should used for case with one mail server only end end
establish_smtp_connection()
click to toggle source
# File lib/truemail/validate/smtp.rb, line 50 def establish_smtp_connection filtered_mail_servers_by_fail_fast_scenario.each do |mail_server| smtp_results << Truemail::Validate::Smtp::Request.new( configuration: configuration, host: mail_server, email: result.punycode_email, **attempts ) next unless request.check_port request.run || rcptto_error ? break : next end end
fail_fast?()
click to toggle source
# File lib/truemail/validate/smtp.rb, line 27 def fail_fast? configuration.smtp_fail_fast end
filtered_mail_servers_by_fail_fast_scenario()
click to toggle source
# File lib/truemail/validate/smtp.rb, line 31 def filtered_mail_servers_by_fail_fast_scenario fail_fast? ? mail_servers.first(1) : mail_servers end
not_includes_user_not_found_errors?()
click to toggle source
# File lib/truemail/validate/smtp.rb, line 64 def not_includes_user_not_found_errors? return unless configuration.smtp_safe_check result.smtp_debug.map(&:response).map(&:errors).all? do |errors| next true unless errors.key?(:rcptto) errors.slice(:rcptto).values.none? do |error| configuration.smtp_error_body_pattern.match?(error) end end end
rcptto_error()
click to toggle source
# File lib/truemail/validate/smtp.rb, line 46 def rcptto_error request.response.errors[:rcptto] end
request()
click to toggle source
# File lib/truemail/validate/smtp.rb, line 42 def request smtp_results.last end
success_response?()
click to toggle source
# File lib/truemail/validate/smtp.rb, line 60 def success_response? smtp_results.map(&:response).any?(&:rcptto) end