Module: Zerobounce
- Defined in:
- lib/zerobounce.rb,
lib/zerobounce/error.rb,
lib/zerobounce/request.rb,
lib/zerobounce/version.rb,
lib/zerobounce/api_urls.rb,
lib/zerobounce/base_request.rb,
lib/zerobounce/mock_request.rb,
lib/zerobounce/configuration.rb,
lib/zerobounce/download_type.rb,
lib/zerobounce/get_file_helper.rb,
lib/zerobounce/validate_status.rb,
lib/zerobounce/get_file_options.rb,
lib/zerobounce/validate_sub_status.rb
Overview
todo:
Defined Under Namespace
Modules: DownloadType, GetFileHelper, ValidateStatus, ValidateSubStatus Classes: ApiError, ApiUrls, BaseRequest, Configuration, Error, GetFileOptions, InternalServerError, MissingParameter, MockRequest, Request, UnknownError
Constant Summary collapse
- VERSION =
The version of the gem.
'2.1.4'- @@request =
ENV['TEST']=='unit' ? MockRequest : Request
Class Attribute Summary collapse
-
.configuration ⇒ Zerobounce::Configuration
(also: config)
Zerobounce configuration.
Class Method Summary collapse
-
.activity(email) ⇒ Hash
Get Activty for email.
-
.api_usage(start_date, end_date) ⇒ Hash
Get API usage.
-
.configure {|config| ... } ⇒ Object
Configure Zerobounce inside a block.
-
.credits ⇒ Integer
Get the number of remaining credits on the account.
-
.find_domain(domain: '', company_name: '') ⇒ Hash
Find domain format.
-
.find_email(first_name, domain: '', company_name: '', middle_name: '', last_name: '') ⇒ Hash
Find email address format.
-
.get_file_json_indicates_error?(body) ⇒ Boolean
Whether a getfile response body looks like a JSON error payload (including HTTP 200).
-
.guessformat(domain, first_name: '', middle_name: '', last_name: '') ⇒ Hash
Guess email formatDomain to guess format for.
-
.scoring_file_check(file_id) ⇒ Hash
Get validate file status.
-
.scoring_file_delete(file_id) ⇒ Hash
Delete validate file.
-
.scoring_file_get(file_id, options = nil) ⇒ String
Get scoring bulk results file.
-
.scoring_file_send(filepath, email_address_column: 1, has_header_row: true, return_url: nil) ⇒ Hash
Score CSV file.
-
.scoring_file_send_stream(io, file_name, **opts) ⇒ Hash
Score CSV from a stream (IO or String).
-
.validate(email, ip_address = nil) ⇒ Hash
Validates the email address and gets geoip information for an IP if provided.
-
.validate_batch(emails, ip_addresses = []) ⇒ Array
Validate email batch.
-
.validate_file_check(file_id) ⇒ Hash
Get validate file status.
-
.validate_file_delete(file_id) ⇒ Hash
Delete validate file.
-
.validate_file_get(file_id, options = nil) ⇒ String
Get validate results file.
-
.validate_file_send(filepath, email_address_column: 1, first_name_column: 2, last_name_column: 3, gender_column: 4, has_header_row: true, return_url: nil, allow_phase_2: nil) ⇒ Hash
Validate CSV file.
-
.validate_file_send_stream(io, file_name, **opts) ⇒ Hash
Validate CSV from a stream (IO or String).
Class Attribute Details
.configuration ⇒ Zerobounce::Configuration Also known as: config
Zerobounce configuration
30 31 32 |
# File 'lib/zerobounce.rb', line 30 def configuration @configuration ||= Configuration.new end |
Class Method Details
.activity(email) ⇒ Hash
Get Activty for email
"found": true,
"active_in_days": "180"
180 181 182 183 |
# File 'lib/zerobounce.rb', line 180 def activity(email) params = {email: email} @@request.get('activity', params) end |
.api_usage(start_date, end_date) ⇒ Hash
Get API usage
"total": 5,
"status_valid": 4,
"status_invalid": 1,
"status_catch_all": 0,
"status_do_not_mail": 0,
"status_spamtrap": 0,
"status_unknown": 0,
"sub_status_toxic": 0,
"sub_status_disposable": 0,
"sub_status_role_based": 0,
"sub_status_possible_trap": 0,
"sub_status_global_suppression": 0,
"sub_status_timeout_exceeded": 0,
"sub_status_mail_server_temporary_error": 0,
"sub_status_mail_server_did_not_respond": 0,
"sub_status_greylisted": 0,
"sub_status_antispam_system": 0,
"sub_status_does_not_accept_mail": 0,
"sub_status_exception_occurred": 0,
"sub_status_failed_syntax_check": 1,
"sub_status_mailbox_not_found": 0,
"sub_status_unroutable_ip_address": 0,
"sub_status_possible_typo": 0,
"sub_status_no_dns_entries": 0,
"sub_status_role_based_catch_all": 0,
"sub_status_mailbox_quota_exceeded": 0,
"sub_status_forcible_disconnect": 0,
"sub_status_failed_smtp_connection": 0,
"sub_status_accept_all": 0,
"sub_status_mx_forward": 0,
"sub_status_alternate": 0,
"sub_status_allowed": 0,
"sub_status_blocked": 0,
"sub_status_gold": 0,
"sub_status_role_based_accept_all": 0,
"start_date": "1/1/2018",
"end_date": "12/12/2023"
160 161 162 163 164 165 166 167 168 169 |
# File 'lib/zerobounce.rb', line 160 def api_usage(start_date, end_date) begin start_date_f = start_date.strftime('%Y-%m-%d') end_date_f = end_date.strftime('%Y-%m-%d') rescue NoMethodError => e raise ArgumentError.new('strftime method not found for provided arguments') end params = {start_date: start_date_f, end_date: end_date_f} @@request.get('getapiusage', params) end |
.configure {|config| ... } ⇒ Object
Configure Zerobounce inside a block.
51 52 53 |
# File 'lib/zerobounce.rb', line 51 def configure yield configuration end |
.credits ⇒ Integer
Get the number of remaining credits on the account.
90 91 92 93 94 95 |
# File 'lib/zerobounce.rb', line 90 def credits() json = @@request.get('getcredits', {}) credits = json['Credits'] credits_i = credits.to_i return credits_i end |
.find_domain(domain: '', company_name: '') ⇒ Hash
Find domain format
"domain": "zerobounce.net",
"company_name": "Hertza, LLC",
"format": "first.last",
"confidence": "high",
"did_you_mean": "",
"failure_reason": "",
"other_domain_formats": [
{"format": "first", "confidence": "high",
"last.first", "confidence": "high",
"lastfirst", "confidence": "high",
"firstl", "confidence": "high",
"lfirst", "confidence": "high",
"firstlast", "confidence": "high",
"last_middle_f", "confidence": "high",
"last", "confidence": "high",
"f.last", "confidence": "medium",
"last-f", "confidence": "medium",
"l.first", "confidence": "medium",
"last_f", "confidence": "medium",
"first.middle.last", "confidence": "medium",
"first-last", "confidence": "medium",
"last.f", "confidence": "medium",
"last_first", "confidence": "medium",
"f-last", "confidence": "medium",
"first.l", "confidence": "medium",
"first-l", "confidence": "medium",
"first_l", "confidence": "medium",
"first_last", "confidence": "medium",
"f_last", "confidence": "medium",
"last-first", "confidence": "medium",
"flast", "confidence": "medium",
"lastf", "confidence": "medium",
"l_first", "confidence": "medium",
"l-first", "confidence": "medium",
"first-middle-last", "confidence": "low",
"firstmlast", "confidence": "low",
"last.middle.first", "confidence": "low",
"last_middle_first", "confidence": "low",
"first_middle_last", "confidence": "low",
"last-middle-first", "confidence": "low",
"first-m-last", "confidence": "low",
"firstmiddlelast", "confidence": "low",
"last.m.first", "confidence": "low",
"lastmfirst", "confidence": "low",
"lastmiddlefirst", "confidence": "low",
"last_m_first", "confidence": "low",
"first.m.last", "confidence": "low",
"first_m_last", "confidence": "low",
"last-m-first", "confidence": "low"
]
}
602 603 604 605 606 607 608 609 610 611 612 613 614 615 |
# File 'lib/zerobounce.rb', line 602 def find_domain(domain: '', company_name: '') # Validate that exactly one of domain or company_name is provided if (domain.nil? || domain.empty?) && (company_name.nil? || company_name.empty?) raise ArgumentError, "Either domain or company_name must be provided" elsif !(domain.nil? || domain.empty?) && !(company_name.nil? || company_name.empty?) raise ArgumentError, "Only one of domain or company_name can be provided" end params = {} params[:domain] = domain unless domain.nil? || domain.empty? params[:company_name] = company_name unless company_name.nil? || company_name.empty? @@request.get('guessformat', params) end |
.find_email(first_name, domain: '', company_name: '', middle_name: '', last_name: '') ⇒ Hash
Find email address format
"email": "john@zerobounce.net",
"email_confidence": "medium",
"domain": "zerobounce.net",
"company_name": "ZeroBounce",
"did_you_mean": "",
"failure_reason": ""
527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 |
# File 'lib/zerobounce.rb', line 527 def find_email(first_name, domain: '', company_name: '', middle_name: '', last_name: '') # Validate that exactly one of domain or company_name is provided if (domain.nil? || domain.empty?) && (company_name.nil? || company_name.empty?) raise ArgumentError, "Either domain or company_name must be provided" elsif !(domain.nil? || domain.empty?) && !(company_name.nil? || company_name.empty?) raise ArgumentError, "Only one of domain or company_name can be provided" end params = { first_name: first_name } params[:domain] = domain unless domain.nil? || domain.empty? params[:company_name] = company_name unless company_name.nil? || company_name.empty? params[:middle_name] = middle_name unless middle_name.nil? || middle_name.empty? params[:last_name] = last_name unless last_name.nil? || last_name.empty? @@request.get('guessformat', params) end |
.get_file_json_indicates_error?(body) ⇒ Boolean
Whether a getfile response body looks like a JSON error payload (including HTTP 200).
39 40 41 |
# File 'lib/zerobounce.rb', line 39 def get_file_json_indicates_error?(body) GetFileHelper.json_indicates_error?(body) end |
.guessformat(domain, first_name: '', middle_name: '', last_name: '') ⇒ Hash
Guess email formatDomain to guess format for
{ “email”=>“”,
"domain"=>"zerobounce.net",
"format"=>"first.last",
"status"=>"",
"sub_status"=>"",
"confidence"=>"high",
"did_you_mean"=>"",
"failure_reason"=>"",
"other_domain_formats"=> [
“confidence”=>“high”, “confidence”=>“high”, “confidence”=>“high”, “confidence”=>“high”, “confidence”=>“high”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“medium”, “confidence”=>“low”, “confidence”=>“low”
]
}
499 500 501 502 503 504 505 506 507 |
# File 'lib/zerobounce.rb', line 499 def guessformat(domain, first_name: '', middle_name: '', last_name: '') warn "[DEPRECATION] `guessformat` is deprecated and will be removed in a future version.\n" \ "Please use `find_email` or `find_domain` instead." params = {domain: domain} params[:first_name] = first_name unless first_name.nil? || first_name.empty? params[:middle_name] = middle_name unless middle_name.nil? || middle_name.empty? params[:last_name] = last_name unless last_name.nil? || last_name.empty? @@request.get('guessformat', params) end |
.scoring_file_check(file_id) ⇒ Hash
Get validate file status
"success": true,
"file_id": "d391b463-cb56-4fb3-a9c0-9817653ff725",
"file_name": "zerobounce-ai-scoring.csv",
"upload_date": "2023-04-18T15:13:56Z",
"file_status": "Complete",
"complete_percentage": "100% Complete.",
"return_url": null
431 432 433 434 |
# File 'lib/zerobounce.rb', line 431 def scoring_file_check(file_id) params = {file_id: file_id} @@request.bulk_get('scoring/filestatus', params) end |
.scoring_file_delete(file_id) ⇒ Hash
Delete validate file
"success": true,
"message": "File Deleted",
"file_name": "zerobounce-ai-scoring.csv",
"file_id": "6d44a908-7283-42a9-aa5f-9e57b16f84bd"
447 448 449 450 |
# File 'lib/zerobounce.rb', line 447 def scoring_file_delete(file_id) params = {file_id: file_id} @@request.bulk_get('scoring/deletefile', params) end |
.scoring_file_get(file_id, options = nil) ⇒ String
Get scoring bulk results file
409 410 411 412 413 414 415 |
# File 'lib/zerobounce.rb', line 409 def scoring_file_get(file_id, = nil) params = { file_id: file_id } if && .download_type params[:download_type] = .download_type end @@request.bulk_getfile('scoring/getfile', params) end |
.scoring_file_send(filepath, email_address_column: 1, has_header_row: true, return_url: nil) ⇒ Hash
Score CSV file
"success": true,
"message": "File Accepted",
"file_name": "zerobounce-ai-scoring.csv",
"file_id": "6d44a908-7283-42a9-aa5f-9e57b16f84bd"
370 371 372 373 374 375 376 377 378 379 380 381 382 |
# File 'lib/zerobounce.rb', line 370 def scoring_file_send( filepath, email_address_column: 1, has_header_row: true, return_url: nil ) params = { email_address_column: email_address_column, has_header_row: has_header_row, } params[:return_url] = return_url if return_url @@request.bulk_post('scoring/sendfile', params, 'multipart/form-data', filepath) end |
.scoring_file_send_stream(io, file_name, **opts) ⇒ Hash
Score CSV from a stream (IO or String).
392 393 394 395 396 397 398 399 400 |
# File 'lib/zerobounce.rb', line 392 def scoring_file_send_stream(io, file_name, **opts) content = io.respond_to?(:read) ? io.read : io.to_s Tempfile.create(['zb', File.extname(file_name)]) do |tmp| tmp.binmode tmp.write(content) tmp.rewind scoring_file_send(tmp.path, **opts) end end |
.validate(email, ip_address = nil) ⇒ Hash
Validates the email address and gets geoip information for an IP if provided.
"address": "valid@example.com",
"status": "valid",
"sub_status": "",
"free_email": false,
"did_you_mean": null,
"account": null,
"domain": null,
"domain_age_days": "9692",
"smtp_provider": "example",
"mx_found": "true",
"mx_record": "mx.example.com",
"firstname": "zero",
"lastname": "bounce",
"gender": "male",
"country": null,
"region": null,
"city": null,
"zipcode": null,
"processed_at": "2023-04-18 12:09:39.074"
82 83 84 85 |
# File 'lib/zerobounce.rb', line 82 def validate(email, ip_address=nil) params = {email: email, ip_address: ip_address} @@request.get('validate', params) end |
.validate_batch(emails, ip_addresses = []) ⇒ Array
Validate email batch
[
{
"address": "disposable@example.com",
"status": "do_not_mail",
"sub_status": "disposable",
"free_email": false,
"did_you_mean": null,
"account": null,
"domain": null,
"domain_age_days": "9692",
"smtp_provider": "example",
"mx_found": "true",
"mx_record": "mx.example.com",
"firstname": "zero",
"lastname": "bounce",
"gender": "male",
"country": null,
"region": null,
"city": null,
"zipcode": null,
"processed_at": "2023-04-18 12:27:39.529"
},
{
...
},
...
]
218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 |
# File 'lib/zerobounce.rb', line 218 def validate_batch(emails, ip_addresses=[]) raise ArgumentError.new if emails.class != Array emails.each do |email| raise ArgumentError if email.class != String end email_batch = [] emails.each_index do |i| email_batch.push({ email_address: emails[i], ip_address: ip_addresses[i] }) end params = {email_batch: email_batch} results = @@request.bulk_post('validatebatch', params) return results['email_batch'] end |
.validate_file_check(file_id) ⇒ Hash
Get validate file status
"success": true,
"file_id": "6d44a908-7283-42a9-aa5f-9e57b16f84bd",
"file_name": "zerobounce-batch-validation.csv",
"upload_date": "2023-04-18T14:40:08Z",
"file_status": "Complete",
"complete_percentage": "100%",
"error_reason": null,
"return_url": null
315 316 317 318 319 |
# File 'lib/zerobounce.rb', line 315 def validate_file_check(file_id) # todo: params = {file_id: file_id} @@request.bulk_get('filestatus', params) end |
.validate_file_delete(file_id) ⇒ Hash
Delete validate file
"success": true,
"message": "File Deleted",
"file_name": "zerobounce-batch-validation.csv",
"file_id": "6d44a908-7283-42a9-aa5f-9e57b16f84bd"
350 351 352 353 354 |
# File 'lib/zerobounce.rb', line 350 def validate_file_delete(file_id) # todo: params = {file_id: file_id} @@request.bulk_get('deletefile', params) end |
.validate_file_get(file_id, options = nil) ⇒ String
Get validate results file
328 329 330 331 332 333 334 335 336 337 |
# File 'lib/zerobounce.rb', line 328 def validate_file_get(file_id, = nil) params = { file_id: file_id } if params[:download_type] = .download_type if .download_type unless .activity_data.nil? params[:activity_data] = .activity_data ? 'true' : 'false' end end @@request.bulk_getfile('getfile', params) end |
.validate_file_send(filepath, email_address_column: 1, first_name_column: 2, last_name_column: 3, gender_column: 4, has_header_row: true, return_url: nil, allow_phase_2: nil) ⇒ Hash
Validate CSV file
"success": true,
"message": "File Accepted",
"file_name": "zerobounce-batch-validation.csv",
"file_id": "6d44a908-7283-42a9-aa5f-9e57b16f84bd"
254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 |
# File 'lib/zerobounce.rb', line 254 def validate_file_send( filepath, email_address_column: 1, first_name_column: 2, last_name_column: 3, gender_column: 4, has_header_row: true, return_url: nil, allow_phase_2: nil ) params = { email_address_column: email_address_column, has_header_row: has_header_row, } params[:first_name_column] = first_name_column if first_name_column params[:last_name_column] = last_name_column if last_name_column params[:gender_column] = gender_column if gender_column params[:return_url] = return_url if return_url unless allow_phase_2.nil? params[:allow_phase_2] = allow_phase_2 ? 'true' : 'false' end @@request.bulk_post('sendfile', params, 'multipart/form-data', filepath) end |
.validate_file_send_stream(io, file_name, **opts) ⇒ Hash
Validate CSV from a stream (IO or String).
290 291 292 293 294 295 296 297 298 |
# File 'lib/zerobounce.rb', line 290 def validate_file_send_stream(io, file_name, **opts) content = io.respond_to?(:read) ? io.read : io.to_s Tempfile.create(['zb', File.extname(file_name)]) do |tmp| tmp.binmode tmp.write(content) tmp.rewind validate_file_send(tmp.path, **opts) end end |