zerobounce-sdk 1.2.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zerobounce-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zero Bounce
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2025-10-22 00:00:00.000000000 Z
10
+ date: 2026-04-08 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rest-client
@@ -38,6 +37,34 @@ dependencies:
38
37
  - - ">="
39
38
  - !ruby/object:Gem::Version
40
39
  version: '0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: base64
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: bigdecimal
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
41
68
  - !ruby/object:Gem::Dependency
42
69
  name: bundler
43
70
  requirement: !ruby/object:Gem::Requirement
@@ -233,26 +260,33 @@ executables: []
233
260
  extensions: []
234
261
  extra_rdoc_files: []
235
262
  files:
236
- - ".env.sample"
263
+ - ".dockerignore"
264
+ - ".env.example"
265
+ - ".github/auto_assign.yml"
266
+ - ".github/dependabot.yml"
267
+ - ".github/workflows/auto_assign_ci.yaml"
268
+ - ".github/workflows/codeql.yml"
269
+ - ".github/workflows/sdk_ci.yml"
237
270
  - ".gitignore"
238
271
  - ".rspec"
239
272
  - ".ruby-version"
240
273
  - CHANGELOG.md
241
274
  - CODE_OF_CONDUCT.md
242
275
  - CONTRIBUTING.md
276
+ - Dockerfile
243
277
  - Gemfile
244
278
  - Gemfile.lock
245
279
  - LICENSE
246
280
  - LICENSE.txt
247
281
  - README.md
248
282
  - Rakefile
283
+ - SECURITY.md
249
284
  - bin/bundle
250
285
  - bin/console
251
286
  - bin/setup
252
287
  - data/zerobounce-ai-scoring.csv
253
288
  - data/zerobounce-batch-validation.csv
254
289
  - documentation.md
255
- - documentation_es.md
256
290
  - files/scoring.csv
257
291
  - files/validation.csv
258
292
  - files/zerobounce-ai-scoring.csv
@@ -261,9 +295,14 @@ files:
261
295
  - lib/zerobounce/api_urls.rb
262
296
  - lib/zerobounce/base_request.rb
263
297
  - lib/zerobounce/configuration.rb
298
+ - lib/zerobounce/download_type.rb
264
299
  - lib/zerobounce/error.rb
300
+ - lib/zerobounce/get_file_helper.rb
301
+ - lib/zerobounce/get_file_options.rb
265
302
  - lib/zerobounce/mock_request.rb
266
303
  - lib/zerobounce/request.rb
304
+ - lib/zerobounce/validate_status.rb
305
+ - lib/zerobounce/validate_sub_status.rb
267
306
  - lib/zerobounce/version.rb
268
307
  - zerobounce.gemspec
269
308
  homepage: https://zerobounce.net
@@ -271,7 +310,6 @@ licenses:
271
310
  - MIT
272
311
  metadata:
273
312
  yard.run: yri
274
- post_install_message:
275
313
  rdoc_options: []
276
314
  require_paths:
277
315
  - lib
@@ -286,8 +324,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
286
324
  - !ruby/object:Gem::Version
287
325
  version: '0'
288
326
  requirements: []
289
- rubygems_version: 3.4.6
290
- signing_key:
327
+ rubygems_version: 3.6.6
291
328
  specification_version: 4
292
329
  summary: A Ruby client for Zerobounce.net.
293
330
  test_files: []
data/.env.sample DELETED
@@ -1,5 +0,0 @@
1
- ZEROBOUNCE_API_KEY=99e7ef20ceea4480a173b07b1be75371
2
- INCORRECT_API_KEY=thiskeyisinvalidorotherwiseincorrect
3
-
4
- ZEROBOUNCE_API_URL=https://api.zerobounce.net/v2
5
- ZEROBOUNCE_BULK_API_URL=https://bulkapi.zerobounce.net/v2
data/documentation_es.md DELETED
@@ -1,524 +0,0 @@
1
- #### Uso
2
- Agrega esta línea a tu Gemfile de la aplicación:
3
- ```ruby
4
- gem 'zerobounce-sdk'
5
- ```
6
-
7
- Y luego ejecuta:
8
- ```bash
9
- $ bundle
10
- ```
11
-
12
- O instálalo directamente con:
13
- ```bash
14
- $ gem install zerobounce-sdk
15
- ```
16
-
17
- Importa:
18
- ```ruby
19
- require 'zerobounce'
20
- ```
21
-
22
- Configura una clave de API válida de ZeroBounce:
23
- ```ruby
24
- Zerobounce.configure do |config|
25
- config.apikey = '<clave-de-api-de-zerobounce>'
26
- ...
27
- end
28
- ```
29
- o
30
- ```ruby
31
- Zerobounce.config.apikey = '<clave-de-api-de-zerobounce>'
32
- ...
33
- ```
34
-
35
- Créditos
36
- ```ruby
37
- Zerobounce.credits
38
- => 79 ### devuelve -1 si la clave es inválida
39
- ```
40
-
41
- Actividad
42
- ```ruby
43
- Zerobounce.activity('ss@gmail.com')
44
- => {"found"=>true, "active_in_days"=>"180"}
45
- ```
46
-
47
- Estadísticas de uso
48
- ```ruby
49
- Zerobounce.api_usage(Date.today, Date.today)
50
- =>
51
- {"total"=>0,
52
- "status_valid"=>0,
53
- "status_invalid"=>0,
54
- "status_catch_all"=>0,
55
- "status_do_not_mail"=>0,
56
- "status_spamtrap"=>0,
57
- "status_unknown"=>0,
58
- "sub_status_toxic"=>0,
59
- "sub_status_disposable"=>0,
60
- "sub_status_role_based"=>0,
61
- "sub_status_possible_trap"=>0,
62
- "sub_status_global_suppression"=>0,
63
- "sub_status_timeout_exceeded"=>0,
64
- "sub_status_mail_server_temporary_error"=>0,
65
- "sub_status_mail_server_did_not_respond"=>0,
66
- "sub_status_greylisted"=>0,
67
- "sub_status_antispam_system"=>0,
68
- "sub_status_does_not_accept_mail"=>0,
69
- "sub_status_exception_occurred"=>0,
70
- "sub_status_failed_syntax_check"=>0,
71
- "sub_status_mailbox_not_found"=>0,
72
- "sub_status_unroutable_ip_address"=>0,
73
- "sub_status_possible_typo"=>0,
74
- "sub_status_no_dns_entries"=>0,
75
- "sub_status_role_based_catch_all"=>0,
76
- "sub_status_mailbox_quota_exceeded"=>0,
77
- "sub_status_forcible_disconnect"=>0,
78
- "sub_status_failed_smtp_connection"=>0,
79
- "sub_status_mx_forward"=>0,
80
- "sub_status_alternate"=>0,
81
- "sub_status_blocked"=>0,
82
- "sub_status_allowed"=>0,
83
- "start_date"=>"4/28/2023",
84
- "end_date"=>"4/28/2023"}
85
- ```
86
-
87
- ##### Validación de correo electrónico
88
-
89
- Validar un solo correo electrónico
90
- ```ruby
91
- Zerobounce.validate('valid@example.com')
92
- ### Zerobounce.validate('valid@example.com', '192.168.0.1') # dirección IP opcional
93
- =>
94
- {"address"=>"valid@example.com",
95
- "status"=>"valid",
96
- "sub_status"=>"",
97
- "free_email"=>false,
98
- "did_you_mean"=>nil,
99
- "account"=>nil,
100
- "domain"=>nil,
101
- "domain_age_days"=>"9692",
102
- "smtp_provider"=>"example",
103
- "mx_found"=>"true",
104
- "mx_record"=>"mx.example.com",
105
- "firstname"=>"zero",
106
- "lastname"=>"bounce",
107
- "gender"=>"male",
108
- "country"=>nil,
109
- "region"=>nil,
110
- "city"=>nil,
111
- "zipcode"=>nil,
112
- "processed_at"=>"2023-04-28 15:18:45.631"}
113
- ```
114
-
115
- Validar
116
-
117
- en lote
118
- ```ruby
119
- emails
120
- =>
121
- ["disposable@example.com",
122
- "invalid@example.com",
123
- "valid@example.com",
124
- "toxic@example.com",
125
- "donotmail@example.com",
126
- "spamtrap@example.com"]
127
-
128
- ### ip_addresses
129
- => ["192.168.0.1", "192.168.0.1", "192.168.0.1", "192.168.0.1", "192.168.0.1", "192.168.0.1"]
130
- ### Zerobounce.validate_batch(emails, ip_addresses) # parámetro ip_addresses opcional
131
-
132
- Zerobounce.validate_batch(emails)
133
- =>
134
- [{"address"=>"disposable@example.com",
135
- "status"=>"do_not_mail",
136
- "sub_status"=>"disposable",
137
- "free_email"=>false,
138
- "did_you_mean"=>nil,
139
- "account"=>nil,
140
- "domain"=>nil,
141
- "domain_age_days"=>"9692",
142
- "smtp_provider"=>"example",
143
- "mx_found"=>"true",
144
- "mx_record"=>"mx.example.com",
145
- "firstname"=>"zero",
146
- "lastname"=>"bounce",
147
- "gender"=>"male",
148
- "country"=>nil,
149
- "region"=>nil,
150
- "city"=>nil,
151
- "zipcode"=>nil,
152
- "processed_at"=>"2023-04-28 15:21:44.340"},
153
- {"address"=>"invalid@example.com",
154
- "status"=>"invalid",
155
- "sub_status"=>"mailbox_not_found",
156
- "free_email"=>false,
157
- "did_you_mean"=>nil,
158
- "account"=>nil,
159
- "domain"=>nil,
160
- "domain_age_days"=>"9692",
161
- "smtp_provider"=>"example",
162
- "mx_found"=>"true",
163
- "mx_record"=>"mx.example.com",
164
- "firstname"=>"zero",
165
- "lastname"=>"bounce",
166
- "gender"=>"male",
167
- "country"=>nil,
168
- "region"=>nil,
169
- "city"=>nil,
170
- "zipcode"=>nil,
171
- "processed_at"=>"2023-04-28 15:21:44.340"},
172
- {"address"=>"valid@example.com",
173
- "status"=>"valid",
174
- "sub_status"=>"",
175
- "free_email"=>false,
176
- "did_you_mean"=>nil,
177
- "account"=>nil,
178
- "domain"=>nil,
179
- "domain_age_days"=>"9692",
180
- "smtp_provider"=>"example",
181
- "mx_found"=>"true",
182
- "mx_record"=>"mx.example.com",
183
- "firstname"=>"zero",
184
- "lastname"=>"bounce",
185
- "gender"=>"male",
186
- "country"=>nil,
187
- "region"=>nil,
188
- "city"=>nil,
189
- "zipcode"=>nil,
190
- "processed_at"=>"2023-04-28 15:21:44.340"},
191
- {"address"=>"toxic@example.com",
192
- "status"=>"do_not_mail",
193
- "sub_status"=>"toxic",
194
- "free_email"=>false,
195
- "did_you_mean"=>nil,
196
- "account"=>nil,
197
- "domain"=>nil,
198
- "domain_age_days"=>"9692",
199
- "smtp_provider"=>"example",
200
- "mx_found"=>"true",
201
- "mx_record"=>"mx.example.com",
202
- "firstname"=>"zero",
203
- "lastname"=>"bounce",
204
- "gender"=>"male",
205
- "country"=>nil,
206
- "region"=>nil,
207
- "city"=>nil,
208
- "zipcode"=>nil,
209
- "processed_at"=>"2023-04-28 15:21:44.340"},
210
- {"address"=>"donotmail@example.com",
211
- "status"=>"do_not_mail",
212
- "sub_status"=>"role_based",
213
- "free_email"=>false,
214
- "did_you_mean"=>nil,
215
- "account"=>nil,
216
- "domain"=>nil,
217
- "domain
218
-
219
- _age_days"=>"9692",
220
- "smtp_provider"=>"example",
221
- "mx_found"=>"true",
222
- "mx_record"=>"mx.example.com",
223
- "firstname"=>"zero",
224
- "lastname"=>"bounce",
225
- "gender"=>"male",
226
- "country"=>nil,
227
- "region"=>nil,
228
- "city"=>nil,
229
- "zipcode"=>nil,
230
- "processed_at"=>"2023-04-28 15:21:44.340"},
231
- {"address"=>"spamtrap@example.com",
232
- "status"=>"spamtrap",
233
- "sub_status"=>"",
234
- "free_email"=>false,
235
- "did_you_mean"=>nil,
236
- "account"=>nil,
237
- "domain"=>nil,
238
- "domain_age_days"=>"9692",
239
- "smtp_provider"=>"example",
240
- "mx_found"=>"true",
241
- "mx_record"=>"mx.example.com",
242
- "firstname"=>"zero",
243
- "lastname"=>"bounce",
244
- "gender"=>"male",
245
- "country"=>nil,
246
- "region"=>nil,
247
- "city"=>nil,
248
- "zipcode"=>nil,
249
- "processed_at"=>"2023-04-28 15:21:44.340"}]
250
- ```
251
-
252
- ###### Validación de archivo en lote
253
-
254
- Enviar archivo
255
- ```ruby
256
- ### puedes encontrar un archivo de muestra en la carpeta files de este repositorio
257
- validate_file_path = File.join(Dir.pwd, 'files', 'validation.csv')
258
- => "/home/zb/wrappers/ruby-test/files/validation.csv"
259
- Zerobounce.validate_file_send(validate_file_path)
260
- =>
261
- {"success"=>true,
262
- "message"=>"File Accepted",
263
- "file_name"=>"validation.csv",
264
- "file_id"=>"75d854a6-565c-49f9-b4c8-b3344480ec4c"}
265
- ### se requerirá el file_id para los próximos pasos
266
- ### parámetros opcionales:
267
- email_address_column: 1,
268
- first_name_column: 2,
269
- last_name_column: 3,
270
- gender_column: 4,
271
- has_header_row: true,
272
- return_url: nil ### URL de devolución de resultados
273
- ### Zerobounce.validate_file_send(validate_file_path, email_address_column: 1, gender_column: 4)
274
- ```
275
-
276
- Verificar archivo
277
- ```ruby
278
- file_id = "75d854a6-565c-49f9-b4c8-b3344480ec4c"
279
- => "75d854a6-565c-49f9-b4c8-b3344480ec4c"
280
- Zerobounce.validate_file_check(file_id)
281
- =>
282
- {"success"=>true,
283
- "file_id"=>"75d854a6-565c-49f9-b4c8-b3344480ec4c",
284
- "file_name"=>"validation.csv",
285
- "upload_date"=>"2023-04-28T15:25:41Z",
286
- "file_status"=>"Greylisted",
287
- "complete_percentage"=>"0%",
288
- "error_reason"=>nil,
289
- "return_url"=>nil}
290
- ```
291
-
292
- Obtener archivo
293
- ```ruby
294
- file_id = "75d854a6-565c-49f9-b4c8-b3344480ec4c"
295
- => "75d854a6-565c-49f9-b4c8-b3344480ec4c"
296
- Zerobounce.validate_file_get(file_id)
297
- => "\"email\",\"first\",\"last\",\"gender\",\"ip\",\"ZB Status\",\"ZB Sub Status\",\"ZB Account\",\"ZB Domain\",\"ZB First Name\",\"ZB Last Name\",\"ZB Gender\",\"ZB Free Email\",\"ZB MX Found\",\"ZB MX Record\",\"ZB SMTP Provider\",\"ZB Did You Mean\"\n\"disposable@example.com\",\"
298
-
299
- First\",\"Last\",\"male\",\"127.0.0.1\",\"do_not_mail\",\"disposable\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"invalid@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"invalid\",\"mailbox_not_found\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"valid@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"valid\",\"\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"toxic@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"do_not_mail\",\"toxic\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"donotmail@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"do_not_mail\",\"role_based\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"spamtrap@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"spamtrap\",\"\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"abuse@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"abuse\",\"\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"unknown@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"mail_server_temporary_error\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"catch_all@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"catch-all\",\"\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"antispam_system@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"antispam_system\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"does_not_accept_mail@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"invalid\",\"does_not_accept_mail\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"exception_occurred@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"exception_occurred\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"failed_smtp_connection@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"failed_smtp_connection\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"failed_syntax_check@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"invalid\",\"failed_syntax_check\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"forcible_disconnect@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"forcible_disconnect\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"global_suppression@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"do_not_mail\",\"global_suppression\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"greylisted@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"greylisted\",\"\",\"\",\"zero\",\"
300
-
301
- bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"leading_period_removed@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"valid\",\"leading_period_removed\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"mail_server_did_not_respond@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"mail_server_did_not_respond\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"mail_server_temporary_error@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"mail_server_temporary_error\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"mailbox_quota_exceeded@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"invalid\",\"mailbox_quota_exceeded\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"mailbox_not_found@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"invalid\",\"mailbox_not_found\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"no_dns_entries@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"invalid\",\"no_dns_entries\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"possible_trap@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"do_not_mail\",\"possible_trap\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"possible_typo@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"invalid\",\"possible_typo\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"role_based@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"do_not_mail\",\"role_based\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"timeout_exceeded@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"timeout_exceeded\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"unroutable_ip_address@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"invalid\",\"unroutable_ip_address\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"free_email@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"valid\",\"\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"True\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"role_based_catch_all@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"do_not_mail\",\"role_based_catch_all\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n"
302
- ```
303
-
304
- Eliminar archivo
305
- ```ruby
306
- file_id = "75d854a6-565c-49f9-b4c8-b3344480ec4c"
307
- => "75d854a6-565c-49f9-b4c8-b3344480ec4c"
308
- Zerobounce.validate_file_delete(file_id)
309
- =>
310
- {"success"=>true,
311
- "message"=>"File Deleted",
312
- "file_name"=>"validation.csv",
313
- "file_id"=>"75d854a6-565c-49f9-b4c8-b3344480ec4
314
-
315
- c"}
316
- ```
317
-
318
- ##### Puntuación de IA
319
-
320
- Enviar archivo
321
- ```ruby
322
- scoring_file_path = File.join(Dir.pwd, 'files', 'scoring.csv')
323
- => "/home/odin/zb/wrappers/ruby-test/files/scoring.csv"
324
- Zerobounce.scoring_file_send(scoring_file_path)
325
- =>
326
- {"success"=>true,
327
- "message"=>"File Accepted",
328
- "file_name"=>"scoring.csv",
329
- "file_id"=>"89fb7262-b845-4fa1-aa25-e486347ec64e"}
330
- ### se requerirá el file_id para los próximos pasos
331
- ### parámetros opcionales
332
- email_address_column: 1,
333
- has_header_row: true,
334
- return_url: nil ### URL de devolución de resultados
335
- ### Zerobounce.scoring_file_send(scoring_file_path, email_address_column: 1)
336
- ```
337
-
338
- Verificar archivo
339
- ```ruby
340
- file_id = "89fb7262-b845-4fa1-aa25-e486347ec64e"
341
- => "89fb7262-b845-4fa1-aa25-e486347ec64e"
342
- Zerobounce.scoring_file_check(file_id)
343
- =>
344
- {"success"=>true,
345
- "file_id"=>"89fb7262-b845-4fa1-aa25-e486347ec64e",
346
- "file_name"=>"scoring.csv",
347
- "upload_date"=>"2023-04-28T16:57:18Z",
348
- "file_status"=>"Complete",
349
- "complete_percentage"=>"100% Complete.",
350
- "return_url"=>nil}
351
- ```
352
-
353
- Obtener archivo
354
- ```ruby
355
- file_id = "89fb7262-b845-4fa1-aa25-e486347ec64e"
356
- => "89fb7262-b845-4fa1-aa25-e486347ec64e"
357
- Zerobounce.scoring_file_get(file_id)
358
- => "\"email\",\"ZeroBounceQualityScore\"\r\n\"disposable@example.com\",\"0\"\r\n\"invalid@example.com\",\"10\"\r\n\"valid@example.com\",\"10\"\r\n\"toxic@example.com\",\"2\"\r\n\"donotmail@example.com\",\"0\"\r\n\"spamtrap@example.com\",\"0\"\r\n\"abuse@example.com\",\"10\"\r\n\"unknown@example.com\",\"10\"\r\n\"catch_all@example.com\",\"10\"\r\n\"antispam_system@example.com\",\"0\"\r\n\"does_not_accept_mail@example.com\",\"0\"\r\n\"exception_occurred@example.com\",\"0\"\r\n\"failed_smtp_connection@example.com\",\"0\"\r\n\"failed_syntax_check@example.com\",\"0\"\r\n\"forcible_disconnect@example.com\",\"0\"\r\n\"global_suppression@example.com\",\"0\"\r\n\"greylisted@example.com\",\"0\"\r\n\"leading_period_removed@example.com\",\"0\"\r\n\"mail_server_did_not_respond@example.com\",\"0\"\r\n\"mail_server_temporary_error@example.com\",\"0\"\r\n\"mailbox_quota_exceeded@example.com\",\"0\"\r\n\"mailbox_not_found@example.com\",\"0\"\r\n\"no_dns_entries@example.com\",\"0\"\r\n\"possible_trap@example.com\",\"0\"\r\n\"possible_typo@example.com\",\"0\"\r\n\"role_based@example.com\",\"0\"\r\n\"timeout_exceeded@example.com\",\"0\"\r\n\"unroutable_ip_address@example.com\",\"0\"\r\n\"free_email@example.com\",\"0\"\r\n\"role_based_catch_all@example.com\",\"0\""
359
- ```
360
-
361
- Eliminar archivo
362
- ```ruby
363
- file_id = "89fb7262-b845-4fa1-aa25-e486347ec64e"
364
-
365
-
366
- => "89fb7262-b845-4fa1-aa25-e486347ec64e"
367
- Zerobounce.validate_file_delete(file_id)
368
- => {"success"=>false, "message"=>"File cannot be found."}
369
- ```
370
-
371
- ### Email Finder
372
-
373
- Guess Format
374
- ```ruby
375
- Zerobounce.guessformat("zerobounce.net")
376
- =>
377
- {"email"=>"",
378
- "domain"=>"zerobounce.net",
379
- "format"=>"first.last",
380
- "status"=>"",
381
- "sub_status"=>"",
382
- "confidence"=>"high",
383
- "did_you_mean"=>"",
384
- "failure_reason"=>"",
385
- "other_domain_formats"=>
386
- [{"format"=>"first", "confidence"=>"high"},
387
- {"format"=>"last.first", "confidence"=>"high"},
388
- {"format"=>"lfirst", "confidence"=>"high"},
389
- {"format"=>"lastfirst", "confidence"=>"high"},
390
- {"format"=>"firstl", "confidence"=>"high"},
391
- {"format"=>"last", "confidence"=>"medium"},
392
- {"format"=>"first.middle.last", "confidence"=>"medium"},
393
- {"format"=>"first-last", "confidence"=>"medium"},
394
- {"format"=>"l.first", "confidence"=>"medium"},
395
- {"format"=>"f.last", "confidence"=>"medium"},
396
- {"format"=>"f-last", "confidence"=>"medium"},
397
- {"format"=>"first.l", "confidence"=>"medium"},
398
- {"format"=>"first-l", "confidence"=>"medium"},
399
- {"format"=>"firstlast", "confidence"=>"medium"},
400
- {"format"=>"first_l", "confidence"=>"medium"},
401
- {"format"=>"f_last", "confidence"=>"medium"},
402
- {"format"=>"last.f", "confidence"=>"medium"},
403
- {"format"=>"last-f", "confidence"=>"medium"},
404
- {"format"=>"last-first", "confidence"=>"medium"},
405
- {"format"=>"first_last", "confidence"=>"medium"},
406
- {"format"=>"last_f", "confidence"=>"medium"},
407
- {"format"=>"last_first", "confidence"=>"medium"},
408
- {"format"=>"flast", "confidence"=>"medium"},
409
- {"format"=>"lastf", "confidence"=>"medium"},
410
- {"format"=>"l-first", "confidence"=>"low"},
411
- {"format"=>"l_first", "confidence"=>"low"}]}
412
- # Zerobounce.guessformat("zerobounce.net", first_name: "John", middle_name: 'Deere', last_name: "Doe")
413
- ```
414
-
415
- Encontrar Dirección de Email
416
- ```ruby
417
- Zerobounce.find_email("John", domain: "zerobounce.net")
418
- =>
419
- {
420
- "email": "john@zerobounce.net",
421
- "email_confidence": "medium",
422
- "domain": "zerobounce.net",
423
- "company_name": "ZeroBounce",
424
- "did_you_mean": "",
425
- "failure_reason": ""
426
- }
427
-
428
- # Con información adicional de nombres para mayor precisión
429
- Zerobounce.find_email("John", domain: "zerobounce.net", middle_name: "Deere", last_name: "Doe")
430
- ```
431
-
432
- Encontrar Información del Dominio
433
- ```ruby
434
- Zerobounce.find_domain(domain: "zerobounce.net")
435
- =>
436
- {
437
- "domain": "zerobounce.net",
438
- "company_name": "Hertza, LLC",
439
- "format": "first.last",
440
- "confidence": "high",
441
- "did_you_mean": "",
442
- "failure_reason": "",
443
- "other_domain_formats": [
444
- {"format": "first", "confidence": "high"},
445
- {"format": "last.first", "confidence": "high"},
446
- {"format": "lastfirst", "confidence": "high"},
447
- {"format": "firstl", "confidence": "high"},
448
- {"format": "lfirst", "confidence": "high"},
449
- {"format": "firstlast", "confidence": "high"},
450
- {"format": "last_middle_f", "confidence": "high"},
451
- {"format": "last", "confidence": "high"},
452
- {"format": "f.last", "confidence": "medium"},
453
- {"format": "last-f", "confidence": "medium"},
454
- {"format": "l.first", "confidence": "medium"},
455
- {"format": "last_f", "confidence": "medium"},
456
- {"format": "first.middle.last", "confidence": "medium"},
457
- {"format": "first-last", "confidence": "medium"},
458
- {"format": "last.f", "confidence": "medium"},
459
- {"format": "last_first", "confidence": "medium"},
460
- {"format": "f-last", "confidence": "medium"},
461
- {"format": "first.l", "confidence": "medium"},
462
- {"format": "first-l", "confidence": "medium"},
463
- {"format": "first_l", "confidence": "medium"},
464
- {"format": "first_last", "confidence": "medium"},
465
- {"format": "f_last", "confidence": "medium"},
466
- {"format": "last-first", "confidence": "medium"},
467
- {"format": "flast", "confidence": "medium"},
468
- {"format": "lastf", "confidence": "medium"},
469
- {"format": "l_first", "confidence": "medium"},
470
- {"format": "l-first", "confidence": "medium"},
471
- {"format": "first-middle-last", "confidence": "low"},
472
- {"format": "firstmlast", "confidence": "low"},
473
- {"format": "last.middle.first", "confidence": "low"},
474
- {"format": "last_middle_first", "confidence": "low"},
475
- {"format": "first_middle_last", "confidence": "low"},
476
- {"format": "last-middle-first", "confidence": "low"},
477
- {"format": "first-m-last", "confidence": "low"},
478
- {"format": "firstmiddlelast", "confidence": "low"},
479
- {"format": "last.m.first", "confidence": "low"},
480
- {"format": "lastmfirst", "confidence": "low"},
481
- {"format": "lastmiddlefirst", "confidence": "low"},
482
- {"format": "last_m_first", "confidence": "low"},
483
- {"format": "first.m.last", "confidence": "low"},
484
- {"format": "first_m_last", "confidence": "low"},
485
- {"format": "last-m-first", "confidence": "low"}
486
- ]
487
- }
488
- ```
489
-
490
-
491
- #### Desarrollo
492
-
493
- Después de revisar el repositorio, ejecuta las pruebas:
494
- ```bash
495
- rspec --init ### si es necesario
496
- bundle exec rspec
497
- ```
498
-
499
- Deberías ver una salida como esta:
500
- ```bash
501
- Run options: include {:focus=>true}
502
- running live tests
503
- .....................................................
504
-
505
- Finished in 6.81 seconds (files took 0.40587 seconds to load)
506
- 53 examples, 0 failures
507
- ```
508
-
509
- ##### Parámetros de prueba
510
- Las pruebas utilizan los siguientes parámetros de entorno:
511
- TEST {unit|live} influye en si se ejecutan las pruebas simuladas de unidad o se utiliza el servidor en vivo (se pueden utilizar créditos si eliges hacer esto)
512
- ZEROBOUNCE_API_KEY {<zerobounce-api-key-value>} esta clave se utiliza para realizar solicitudes al servidor en vivo; también se utiliza en las pruebas simuladas como un ejemplo de clave válida (cualquier valor funcionará para las pruebas simuladas)
513
- INCORRECT_API_KEY {cualquier cadena sin espacios en blanco que no sea una clave válida} se utiliza para pruebas en las que las solicitudes deben fallar debido al valor de la clave de la API.
514
-
515
- Para configurarlos:
516
- ```bash
517
- export ZEROBOUNCE_API_KEY=99e7ef20ceea4480a173b07b1be75371
518
- export INCORRECT_API_KEY=thiskeyisinvalidorotherwiseincorrect
519
- export TEST=unit
520
- ```
521
-
522
- Se proporciona un archivo .env.sample.
523
-
524
- Las pruebas simuladas se generaron utilizando webmock y vcr. Esto significa que se realizaron solicitudes reales y se grabaron en los archivos .yml bajo spec/cassettes con una clave API válida en ese momento utilizada con fines de prueba. Sin embargo, esta clave se ha invalidado en el ínterin, pero se proporciona en el archivo .env.sample para que las pruebas simuladas funcionen. Si no desea utilizar esta clave para simulaciones, puede reemplazarla con cualquier valor en los archivos .yml bajo spec/cassettes o eliminarlos todos y volver a ejecutar las pruebas para que vcr los grabe con una nueva clave.