class Truemail::Validate::Smtp::Request
Constants
- CONNECTION_DROPPED
- CONNECTION_TIMEOUT_ERROR
- RESPONSE_TIMEOUT_ERROR
- SMTP_PORT
Attributes
attempts[R]
configuration[R]
email[R]
host[R]
port_open_status[R]
response[R]
Public Class Methods
new(configuration:, host:, email:, attempts: nil, port_open_status: proc { true })
click to toggle source
# File lib/truemail/validate/smtp/request.rb, line 16 def initialize(configuration:, host:, email:, attempts: nil, port_open_status: proc { true }) @configuration = Truemail::Validate::Smtp::Request::Configuration.new(configuration) @response = Truemail::Validate::Smtp::Response.new @host = host @email = email @attempts = attempts @port_open_status = port_open_status end
Public Instance Methods
check_port()
click to toggle source
# File lib/truemail/validate/smtp/request.rb, line 25 def check_port response.port_opened = ::Socket.tcp( host, Truemail::Validate::Smtp::Request::SMTP_PORT, connect_timeout: configuration.connection_timeout, &port_open_status ) rescue => error retry if attempts_exist? && error.is_a?(::Errno::ETIMEDOUT) response.port_opened = false end
run()
click to toggle source
# File lib/truemail/validate/smtp/request.rb, line 37 def run session.start(configuration.verifier_domain) do |smtp_request| response.connection = response.helo = true smtp_handshakes(smtp_request, response) end rescue => error retry if attempts_exist? assign_error(attribute: :connection, message: compose_from(error)) end
Private Instance Methods
assign_error(attribute:, message:)
click to toggle source
# File lib/truemail/validate/smtp/request.rb, line 83 def assign_error(attribute:, message:) response.errors[attribute] = message response.public_send(:"#{attribute}=", false) end
attempts_exist?()
click to toggle source
# File lib/truemail/validate/smtp/request.rb, line 62 def attempts_exist? return false unless attempts (@attempts -= 1).positive? end
compose_from(error)
click to toggle source
# File lib/truemail/validate/smtp/request.rb, line 74 def compose_from(error) case error.class.name when 'Net::OpenTimeout' then Truemail::Validate::Smtp::Request::CONNECTION_TIMEOUT_ERROR when 'Net::ReadTimeout' then Truemail::Validate::Smtp::Request::RESPONSE_TIMEOUT_ERROR when 'EOFError' then Truemail::Validate::Smtp::Request::CONNECTION_DROPPED else error.message end end
session()
click to toggle source
# File lib/truemail/validate/smtp/request.rb, line 67 def session ::Net::SMTP.new(host, Truemail::Validate::Smtp::Request::SMTP_PORT).tap do |settings| settings.open_timeout = configuration.connection_timeout settings.read_timeout = configuration.response_timeout end end
session_data()
click to toggle source
# File lib/truemail/validate/smtp/request.rb, line 88 def session_data { mailfrom: configuration.verifier_email, rcptto: email } end
smtp_handshakes(smtp_request, smtp_response)
click to toggle source
# File lib/truemail/validate/smtp/request.rb, line 101 def smtp_handshakes(smtp_request, smtp_response) session_data.all? do |method, value| smtp_response.public_send(:"#{method}=", smtp_resolver(smtp_request, method, value)) end end
smtp_resolver(smtp_request, method, value)
click to toggle source
# File lib/truemail/validate/smtp/request.rb, line 95 def smtp_resolver(smtp_request, method, value) smtp_request.public_send(method, value) rescue => error assign_error(attribute: method, message: compose_from(error)) end