Sha256: 6374ba6ceffa07533285f8be1fac6748b3e7a455610a3c6ab7479600a540c0dd
Contents?: true
Size: 1.67 KB
Versions: 7
Compression:
Stored size: 1.67 KB
Contents
# frozen_string_literal: true module Truemail module Validate class Smtp < Truemail::Validate::Base ERROR = 'smtp error' attr_reader :smtp_results def initialize(result) super(result) @smtp_results = [] end def run return false unless Truemail::Validate::Mx.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 def request smtp_results.last end def attempts @attempts ||= mail_servers.one? ? { attempts: configuration.connection_attempts } : {} end def rcptto_error request.response.errors[:rcptto] end def establish_smtp_connection mail_servers.each do |mail_server| smtp_results << Truemail::Validate::Smtp::Request.new( host: mail_server, email: result.email, **attempts ) next unless request.check_port request.run || rcptto_error ? break : next end end def success_response? smtp_results.map(&:response).any?(&:rcptto) end 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 end end end
Version data entries
7 entries across 7 versions & 1 rubygems