class Email::Verification::Base
Attributes
configuration[RW]
Public Class Methods
new(configuration: ::Email::Verification.configuration)
click to toggle source
# File lib/email/verification/base.rb, line 6 def initialize(configuration: ::Email::Verification.configuration) self.configuration = configuration end
Public Instance Methods
email_body(email)
click to toggle source
# File lib/email/verification/base.rb, line 73 def email_body(email) body = (email.html_part || email.text_part || email)&.body begin body = body&.decoded rescue Mail::UnknownEncodingType body = body&.encoded end body = force_utf8(body) unless body.to_s.empty? return body end
force_utf8(string)
click to toggle source
# File lib/email/verification/base.rb, line 87 def force_utf8(string) string&.encode("UTF-8", invalid: :replace, undef: :replace, replace: '')&.force_encoding('UTF-8') end
log(message)
click to toggle source
# File lib/email/verification/base.rb, line 91 def log(message) puts "[Email::Verification] - #{Time.now.to_s}: #{message}" if self.configuration.verbose end
retrieve_verification_code(email:, password:, host:, port: 993, enable_ssl: true, count: :all, mailboxes: %w(Inbox), settings: {}, proxy: nil)
click to toggle source
# File lib/email/verification/base.rb, line 33 def retrieve_verification_code(email:, password:, host:, port: 993, enable_ssl: true, count: :all, mailboxes: %w(Inbox), settings: {}, proxy: nil) emails = [] result = nil begin set_retriever(email: email, password: password, host: host, port: port, enable_ssl: enable_ssl, proxy: proxy) mailboxes.each do |mailbox| Mail.find(mailbox: mailbox, order: :desc, count: count)&.each do |email| log("From: #{email.from&.first&.strip}. Subject: #{email.subject}") if settings_provided?(settings) matching_address = email.from&.first&.strip == settings[:address] matching_subject = settings[:subject].nil? || (!settings[:subject].nil? && !(email.subject =~ settings[:subject]).nil?) emails << email_body(email) if matching_address && matching_subject else emails << email_body(email) end end end rescue Net::IMAP::NoResponseError => e raise ::Email::Verification::Errors::InvalidCredentialsError.new("Please check account/password settings for email #{email}!") end if settings_provided?(settings) message = emails.first&.to_s result = message&.match(settings[:regex])&.[](:match) else result = emails end return result end
set_retriever(email:, password:, host:, port: 993, enable_ssl: true, proxy: nil)
click to toggle source
# File lib/email/verification/base.rb, line 10 def set_retriever(email:, password:, host:, port: 993, enable_ssl: true, proxy: nil) retriever = :imap options = { address: host, port: port, user_name: email, password: password, enable_ssl: enable_ssl } if proxy && !proxy.empty? && !proxy[:host].to_s.empty? && !proxy[:port].to_s.empty? retriever = ::Net::IMAP::Proxy::RetrieverMethod proxy[:host] = "http://#{proxy[:host]}" unless proxy[:host] =~ /^http(s)?:\/\//i options = options.merge(proxy_address: proxy[:host], proxy_port: proxy[:port]) log("Using proxy #{proxy[:host]}:#{proxy[:port]} to fetch messages from #{options[:address]}:#{options[:port]}") end Mail.defaults do retriever_method retriever, options end end
settings_provided?(settings = {})
click to toggle source
# File lib/email/verification/base.rb, line 69 def settings_provided?(settings = {}) settings && !settings.empty? end