Sha256: 2a25d48428d2076dbfc01d24f3fe87be67797109b5cefec9f98c578172f0f729
Contents?: true
Size: 1.7 KB
Versions: 14
Compression:
Stored size: 1.7 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( configuration: configuration, host: mail_server, email: result.punycode_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
14 entries across 14 versions & 1 rubygems