chain_mail 0.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.
- checksums.yaml +7 -0
- data/.pre-commit-config.yaml +9 -0
- data/.rspec +3 -0
- data/.rubocop.yml +24 -0
- data/CHANGELOG.md +5 -0
- data/LICENSE +21 -0
- data/README.md +220 -0
- data/Rakefile +12 -0
- data/assets/images/logo.png +0 -0
- data/chain_mail.gemspec +38 -0
- data/config/initializers/chain_mail.rb +16 -0
- data/lib/chain_mail/configuration.rb +23 -0
- data/lib/chain_mail/delivery.rb +107 -0
- data/lib/chain_mail/providers/base.rb +28 -0
- data/lib/chain_mail/providers/brevo.rb +23 -0
- data/lib/chain_mail/providers/mailgun.rb +55 -0
- data/lib/chain_mail/providers/one_signal.rb +21 -0
- data/lib/chain_mail/providers/postmark.rb +21 -0
- data/lib/chain_mail/providers/send_grid.rb +29 -0
- data/lib/chain_mail/providers/send_pulse.rb +90 -0
- data/lib/chain_mail/providers/ses.rb +25 -0
- data/lib/chain_mail/railtie.rb +11 -0
- data/lib/chain_mail/version.rb +5 -0
- data/lib/chain_mail.rb +58 -0
- data/sig/chain_mail.rbs +4 -0
- data/vendor/sendpulse/sendpulse_api.rb +656 -0
- metadata +102 -0
@@ -0,0 +1,656 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2015 SendPulse
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require 'net/http'
|
18
|
+
require 'json'
|
19
|
+
require 'base64'
|
20
|
+
|
21
|
+
|
22
|
+
#
|
23
|
+
# Sendpulse REST API Ruby class
|
24
|
+
#
|
25
|
+
# Documentation
|
26
|
+
# https://login.sendpulse.com/manual/rest-api/
|
27
|
+
# https://sendpulse.com/api
|
28
|
+
#
|
29
|
+
class SendpulseApi
|
30
|
+
|
31
|
+
#
|
32
|
+
# Sendpulse API constructor
|
33
|
+
#
|
34
|
+
# @param [Fixnum] user_id
|
35
|
+
# @param [String] secret
|
36
|
+
# @param [String] protocol
|
37
|
+
# @param [String] token
|
38
|
+
# @raise [Exception]
|
39
|
+
#
|
40
|
+
def initialize(user_id, secret, protocol = 'https', token = '')
|
41
|
+
raise 'Empty ID or SECRET' if user_id.to_s.empty? || secret.to_s.empty?
|
42
|
+
|
43
|
+
@url = "#{protocol}://api.sendpulse.com"
|
44
|
+
@user_id = user_id
|
45
|
+
@secret = secret
|
46
|
+
@protocol = protocol
|
47
|
+
@refresh_token = 0
|
48
|
+
@token = token
|
49
|
+
|
50
|
+
if @token.nil? || @token.empty?
|
51
|
+
raise 'Could not connect to api, check your ID and SECRET' unless refresh_token
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
#
|
57
|
+
# Refresh token
|
58
|
+
#
|
59
|
+
# @return [Boolean]
|
60
|
+
#
|
61
|
+
def refresh_token
|
62
|
+
@refresh_token += 1
|
63
|
+
|
64
|
+
data = {
|
65
|
+
grant_type: 'client_credentials',
|
66
|
+
client_id: @user_id,
|
67
|
+
client_secret: @secret
|
68
|
+
}
|
69
|
+
|
70
|
+
request_data = send_request('oauth/access_token', 'POST', data, false)
|
71
|
+
|
72
|
+
if !request_data.nil? && request_data[:data]['access_token']
|
73
|
+
@token = request_data[:data]['access_token']
|
74
|
+
@refresh_token = 0
|
75
|
+
else
|
76
|
+
return false
|
77
|
+
end
|
78
|
+
|
79
|
+
true
|
80
|
+
end
|
81
|
+
private :refresh_token
|
82
|
+
|
83
|
+
#
|
84
|
+
# Get token
|
85
|
+
#
|
86
|
+
# @return [String]
|
87
|
+
#
|
88
|
+
def get_token
|
89
|
+
@token
|
90
|
+
end
|
91
|
+
|
92
|
+
#
|
93
|
+
# Get serialized string
|
94
|
+
#
|
95
|
+
# @param [Mixed] data
|
96
|
+
# @return [String]
|
97
|
+
#
|
98
|
+
def serialize(data)
|
99
|
+
JSON.generate(data)
|
100
|
+
end
|
101
|
+
private :serialize
|
102
|
+
|
103
|
+
#
|
104
|
+
# Get unserialized data
|
105
|
+
#
|
106
|
+
# @param [String] data
|
107
|
+
# @return [Mixed]
|
108
|
+
#
|
109
|
+
def unserialize(data)
|
110
|
+
JSON.parse(data)
|
111
|
+
end
|
112
|
+
private :unserialize
|
113
|
+
|
114
|
+
#
|
115
|
+
# Form and send request to API service
|
116
|
+
#
|
117
|
+
# @param [String] path
|
118
|
+
# @param [String] method
|
119
|
+
# @param [Hash] data
|
120
|
+
# @param [Boolean] use_token
|
121
|
+
# @return [Hash]
|
122
|
+
#
|
123
|
+
def send_request(path, method = 'GET', data = {}, use_token = true)
|
124
|
+
|
125
|
+
request_data = {}
|
126
|
+
|
127
|
+
uri = URI.parse("#{@url}/#{path}")
|
128
|
+
|
129
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
130
|
+
http.use_ssl = true if @protocol == 'https'
|
131
|
+
|
132
|
+
token = {}
|
133
|
+
token.merge!( 'authorization' => "Bearer #{@token}" ) if use_token
|
134
|
+
|
135
|
+
case method
|
136
|
+
when 'POST'
|
137
|
+
request = Net::HTTP::Post.new(uri.request_uri, token)
|
138
|
+
request.set_form_data(data)
|
139
|
+
when 'PUT'
|
140
|
+
request = Net::HTTP::Put.new(uri.request_uri, token)
|
141
|
+
request.set_form_data(data)
|
142
|
+
when 'DELETE'
|
143
|
+
request = Net::HTTP::Delete.new(uri.request_uri, token)
|
144
|
+
request.set_form_data(data)
|
145
|
+
else
|
146
|
+
request = Net::HTTP::Get.new(uri.request_uri, token)
|
147
|
+
end
|
148
|
+
|
149
|
+
begin
|
150
|
+
response = http.request(request)
|
151
|
+
if response.code.to_i == 401 && @refresh_token == 0
|
152
|
+
refresh_token
|
153
|
+
return send_request(path, method, data, use_token)
|
154
|
+
else
|
155
|
+
request_data[:data] = JSON.parse(response.body)
|
156
|
+
request_data[:http_code] = response.code
|
157
|
+
end
|
158
|
+
rescue Exception => e
|
159
|
+
puts "Exception \n message: #{e.message} \n backtrace: #{e.backtrace}"
|
160
|
+
end
|
161
|
+
|
162
|
+
handle_result(request_data)
|
163
|
+
end
|
164
|
+
private :send_request
|
165
|
+
|
166
|
+
#
|
167
|
+
# Process results
|
168
|
+
#
|
169
|
+
# @param [String] custom_message
|
170
|
+
# @return [Hash]
|
171
|
+
#
|
172
|
+
def handle_error (custom_message = nil)
|
173
|
+
data = { is_error: true }
|
174
|
+
data[:message] = custom_message unless custom_message.nil?
|
175
|
+
data
|
176
|
+
end
|
177
|
+
private :handle_error
|
178
|
+
|
179
|
+
#
|
180
|
+
# Process errors
|
181
|
+
#
|
182
|
+
# @param [Hash] data
|
183
|
+
# @return [Hash]
|
184
|
+
#
|
185
|
+
def handle_result (data)
|
186
|
+
unless data[:http_code].to_i == 200
|
187
|
+
data[:is_error] = true
|
188
|
+
end
|
189
|
+
data
|
190
|
+
end
|
191
|
+
private :handle_result
|
192
|
+
|
193
|
+
#
|
194
|
+
# Create address book
|
195
|
+
#
|
196
|
+
# @param [String] book_name
|
197
|
+
# @return [Hash]
|
198
|
+
#
|
199
|
+
def create_address_book(book_name)
|
200
|
+
handle_error('Empty book name') if book_name.to_s.empty?
|
201
|
+
data = { bookName: book_name }
|
202
|
+
send_request('addressbooks', 'POST', data)
|
203
|
+
end
|
204
|
+
|
205
|
+
#
|
206
|
+
# Edit address book name
|
207
|
+
#
|
208
|
+
# @param [Fixnum] id
|
209
|
+
# @param [String] new_name
|
210
|
+
# @return [Hash]
|
211
|
+
#
|
212
|
+
def edit_address_book(id, new_name)
|
213
|
+
return handle_error('Empty new name or book id') if id.to_i <= 0 || new_name.to_s.empty?
|
214
|
+
data = { name: new_name }
|
215
|
+
send_request("addressbooks/#{id}", 'PUT', data)
|
216
|
+
end
|
217
|
+
|
218
|
+
#
|
219
|
+
# Remove address book
|
220
|
+
#
|
221
|
+
# @param [Fixnum] id
|
222
|
+
# @return [Hash]
|
223
|
+
#
|
224
|
+
def remove_address_book(id)
|
225
|
+
return handle_error('Empty book id') unless id.to_i > 0
|
226
|
+
send_request("addressbooks/#{id}", 'DELETE')
|
227
|
+
end
|
228
|
+
|
229
|
+
#
|
230
|
+
# Get list of address books
|
231
|
+
#
|
232
|
+
# @param [Fixnum] limit
|
233
|
+
# @param [Fixnum] offset
|
234
|
+
# @return [Hash]
|
235
|
+
#
|
236
|
+
def list_address_books(limit = nil, offset = nil)
|
237
|
+
data = {}
|
238
|
+
data.merge!({limit: limit}) unless limit.nil?
|
239
|
+
data.merge!({offset: offset}) unless offset.nil?
|
240
|
+
send_request('addressbooks', 'GET', data)
|
241
|
+
end
|
242
|
+
|
243
|
+
#
|
244
|
+
# Get information about book
|
245
|
+
#
|
246
|
+
# @param [Fixnum] id
|
247
|
+
# @return [Hash]
|
248
|
+
#
|
249
|
+
def get_book_info(id)
|
250
|
+
return handle_error('Empty book id') unless id.to_i > 0
|
251
|
+
send_request("addressbooks/#{id}")
|
252
|
+
end
|
253
|
+
|
254
|
+
#
|
255
|
+
# List email addresses from book
|
256
|
+
#
|
257
|
+
# @param [Fixnum] id
|
258
|
+
# @return [Hash]
|
259
|
+
#
|
260
|
+
def get_emails_from_book(id)
|
261
|
+
return handle_error('Empty book id') unless id.to_i > 0
|
262
|
+
send_request("addressbooks/#{id}/emails")
|
263
|
+
end
|
264
|
+
|
265
|
+
#
|
266
|
+
# Add new emails to address book
|
267
|
+
#
|
268
|
+
# @param [Fixnum] book_id
|
269
|
+
# @param [Hash] emails
|
270
|
+
# @return [Hash]
|
271
|
+
#
|
272
|
+
def add_emails(book_id, emails)
|
273
|
+
return handle_error('Empty book id or emails') if book_id.to_i <= 0 || emails.empty?
|
274
|
+
data = { emails: serialize(emails) }
|
275
|
+
send_request("addressbooks/#{book_id}/emails", 'POST', data)
|
276
|
+
end
|
277
|
+
|
278
|
+
#
|
279
|
+
# Remove email addresses from book
|
280
|
+
#
|
281
|
+
# @param [Fixnum] book_id
|
282
|
+
# @param [Hash] emails
|
283
|
+
# @return [Hash]
|
284
|
+
#
|
285
|
+
def remove_emails(book_id, emails)
|
286
|
+
return handle_error('Empty book id or emails') if book_id.to_i <= 0 || emails.empty?
|
287
|
+
data = { emails: serialize(emails) }
|
288
|
+
send_request("addressbooks/#{book_id}/emails", 'DELETE', data)
|
289
|
+
end
|
290
|
+
|
291
|
+
#
|
292
|
+
# Get information about email address from book
|
293
|
+
#
|
294
|
+
# @param [Fixnum] book_id
|
295
|
+
# @param [String] email
|
296
|
+
# @return [Hash]
|
297
|
+
#
|
298
|
+
def get_email_info(book_id, email)
|
299
|
+
return handle_error('Empty book id or email') if book_id.to_i <= 0 || email.to_s.empty?
|
300
|
+
send_request("addressbooks/#{book_id}/emails/#{email}")
|
301
|
+
end
|
302
|
+
|
303
|
+
#
|
304
|
+
# Get cost of campaign based on address book
|
305
|
+
#
|
306
|
+
# @param [Fixnum] book_id
|
307
|
+
# @return [Hash]
|
308
|
+
#
|
309
|
+
def campaign_cost(book_id)
|
310
|
+
return handle_error('Empty book id') unless book_id.to_i > 0
|
311
|
+
send_request("addressbooks/#{book_id}/cost")
|
312
|
+
end
|
313
|
+
|
314
|
+
#
|
315
|
+
# Get list of campaigns
|
316
|
+
#
|
317
|
+
# @param [Fixnum] limit
|
318
|
+
# @param [Fixnum] offset
|
319
|
+
# @return [Hash]
|
320
|
+
#
|
321
|
+
def list_campaigns(limit = nil, offset = nil)
|
322
|
+
data = {}
|
323
|
+
data.merge!({limit: limit}) unless limit.nil?
|
324
|
+
data.merge!({offset: offset}) unless offset.nil?
|
325
|
+
send_request('campaigns', 'GET', data)
|
326
|
+
end
|
327
|
+
|
328
|
+
#
|
329
|
+
# Get information about campaign
|
330
|
+
#
|
331
|
+
# @param [Fixnum] id
|
332
|
+
# @return [Hash]
|
333
|
+
#
|
334
|
+
def get_campaign_info(id)
|
335
|
+
return handle_error('Empty campaign id') unless id.to_i > 0
|
336
|
+
send_request("campaigns/#{id}")
|
337
|
+
end
|
338
|
+
|
339
|
+
#
|
340
|
+
# Get campaign statistic by countries
|
341
|
+
#
|
342
|
+
# @param [Fixnum] id
|
343
|
+
# @return [Hash]
|
344
|
+
#
|
345
|
+
def campaign_stat_by_countries(id)
|
346
|
+
return handle_error('Empty campaign id') unless id.to_i > 0
|
347
|
+
send_request("campaigns/#{id}/countries")
|
348
|
+
end
|
349
|
+
|
350
|
+
#
|
351
|
+
# Get campaign statistic by referrals
|
352
|
+
#
|
353
|
+
# @param [Fixnum] id
|
354
|
+
# @return [Hash]
|
355
|
+
#
|
356
|
+
def campaign_stat_by_referrals(id)
|
357
|
+
return handle_error('Empty campaign id') unless id.to_i > 0
|
358
|
+
send_request("campaigns/#{id}/referrals")
|
359
|
+
end
|
360
|
+
|
361
|
+
#
|
362
|
+
# Create new campaign
|
363
|
+
#
|
364
|
+
# @param [String] sender_name
|
365
|
+
# @param [String] sender_email
|
366
|
+
# @param [String] subject
|
367
|
+
# @param [String] body
|
368
|
+
# @param [Fixnum] book_id
|
369
|
+
# @param [String] name
|
370
|
+
# @param [String] attachments
|
371
|
+
# @return [Hash]
|
372
|
+
#
|
373
|
+
def create_campaign(sender_name, sender_email, subject, body, book_id, name = '', attachments = '')
|
374
|
+
if sender_name.empty? || sender_email.empty? || subject.empty? || body.empty? || book_id.to_i <= 0
|
375
|
+
return handle_error('Not all data.')
|
376
|
+
end
|
377
|
+
attachments = serialize(attachments) unless attachments.empty?
|
378
|
+
data = {
|
379
|
+
sender_name: sender_name,
|
380
|
+
sender_email: sender_email,
|
381
|
+
subject: subject,
|
382
|
+
body: Base64.encode64(body),
|
383
|
+
list_id: book_id,
|
384
|
+
name: name,
|
385
|
+
attachments: attachments
|
386
|
+
}
|
387
|
+
send_request('campaigns', 'POST', data)
|
388
|
+
end
|
389
|
+
|
390
|
+
#
|
391
|
+
# Cancel campaign
|
392
|
+
#
|
393
|
+
# @param [Fixnum] id
|
394
|
+
# @return [Hash]
|
395
|
+
#
|
396
|
+
def cancel_campaign(id)
|
397
|
+
return handle_error('Empty campaign id') unless id.to_i > 0
|
398
|
+
send_request("campaigns/#{id}", 'DELETE')
|
399
|
+
end
|
400
|
+
|
401
|
+
#
|
402
|
+
# List all senders
|
403
|
+
#
|
404
|
+
# @return [Hash]
|
405
|
+
#
|
406
|
+
def list_senders
|
407
|
+
send_request('senders')
|
408
|
+
end
|
409
|
+
|
410
|
+
#
|
411
|
+
# Cancel Add new sender
|
412
|
+
#
|
413
|
+
# @param [String] sender_name
|
414
|
+
# @param [String] sender_email
|
415
|
+
# @return [Hash]
|
416
|
+
#
|
417
|
+
def add_sender(sender_name, sender_email)
|
418
|
+
return handle_error('Empty book sender name or sender email') if sender_name.to_s.empty? || sender_email.to_s.empty?
|
419
|
+
data = {
|
420
|
+
email: sender_email,
|
421
|
+
name: sender_name
|
422
|
+
}
|
423
|
+
send_request('senders', 'POST', data)
|
424
|
+
end
|
425
|
+
|
426
|
+
#
|
427
|
+
# Remove sender
|
428
|
+
#
|
429
|
+
# @param [String] email
|
430
|
+
# @return [Hash]
|
431
|
+
#
|
432
|
+
def remove_sender(email)
|
433
|
+
return handle_error('Empty email') if email.to_s.empty?
|
434
|
+
data = { email: email }
|
435
|
+
send_request('senders', 'DELETE', data)
|
436
|
+
end
|
437
|
+
|
438
|
+
#
|
439
|
+
# Activate sender using code
|
440
|
+
#
|
441
|
+
# @param [String] email
|
442
|
+
# @param [String] code
|
443
|
+
# @return [Hash]
|
444
|
+
#
|
445
|
+
def activate_sender(email, code)
|
446
|
+
return handle_error('Empty email or activation code') if email.to_s.empty? || code.to_s.empty?
|
447
|
+
data = { code: code }
|
448
|
+
send_request("senders/#{email}/code", 'POST', data)
|
449
|
+
end
|
450
|
+
|
451
|
+
#
|
452
|
+
# Request mail with activation code
|
453
|
+
#
|
454
|
+
# @param [String] email
|
455
|
+
# @return [Hash]
|
456
|
+
#
|
457
|
+
def get_sender_activation_mail(email)
|
458
|
+
return handle_error('Empty email') if email.to_s.empty?
|
459
|
+
send_request("senders/#{email}/code")
|
460
|
+
end
|
461
|
+
|
462
|
+
#
|
463
|
+
# Get global information about email
|
464
|
+
#
|
465
|
+
# @param [String] email
|
466
|
+
# @return [Hash]
|
467
|
+
#
|
468
|
+
def get_email_global_info(email)
|
469
|
+
return handle_error('Empty email') if email.to_s.empty?
|
470
|
+
send_request("emails/#{email}")
|
471
|
+
end
|
472
|
+
|
473
|
+
#
|
474
|
+
# Remove email from all books
|
475
|
+
#
|
476
|
+
# @param [String] email
|
477
|
+
# @return [Hash]
|
478
|
+
#
|
479
|
+
def remove_email_from_all_books(email)
|
480
|
+
return handle_error('Empty email') if email.to_s.empty?
|
481
|
+
send_request("emails/#{email}", 'DELETE')
|
482
|
+
end
|
483
|
+
|
484
|
+
#
|
485
|
+
# Get email statistic by all campaigns
|
486
|
+
#
|
487
|
+
# @param [String] email
|
488
|
+
# @return [Hash]
|
489
|
+
#
|
490
|
+
def email_stat_by_campaigns(email)
|
491
|
+
return handle_error('Empty email') if email.to_s.empty?
|
492
|
+
send_request("emails/#{email}/campaigns")
|
493
|
+
end
|
494
|
+
|
495
|
+
#
|
496
|
+
# Get all emails from blacklist
|
497
|
+
#
|
498
|
+
# @return [Hash]
|
499
|
+
#
|
500
|
+
def get_black_list
|
501
|
+
send_request('blacklist')
|
502
|
+
end
|
503
|
+
|
504
|
+
#
|
505
|
+
# Add email to blacklist
|
506
|
+
#
|
507
|
+
# @param [String] emails
|
508
|
+
# @param [String] comment
|
509
|
+
# @return [Hash]
|
510
|
+
#
|
511
|
+
def add_to_black_list(emails, comment = '')
|
512
|
+
return handle_error('Empty emails') if emails.to_s.empty?
|
513
|
+
data = {
|
514
|
+
emails: Base64.encode64(emails),
|
515
|
+
comment: comment
|
516
|
+
}
|
517
|
+
send_request('blacklist', 'POST', data)
|
518
|
+
end
|
519
|
+
|
520
|
+
#
|
521
|
+
# Remove emails from blacklist
|
522
|
+
#
|
523
|
+
# @param [String] emails
|
524
|
+
# @return [Hash]
|
525
|
+
#
|
526
|
+
def remove_from_black_list(emails)
|
527
|
+
return handle_error('Empty emails') if emails.to_s.empty?
|
528
|
+
data = { emails: Base64.encode64(emails) }
|
529
|
+
send_request('blacklist', 'DELETE', data)
|
530
|
+
end
|
531
|
+
|
532
|
+
#
|
533
|
+
# Get balance
|
534
|
+
#
|
535
|
+
# @param [String] currency
|
536
|
+
# @return [Hash]
|
537
|
+
#
|
538
|
+
def get_balance(currency = '')
|
539
|
+
url = 'balance'
|
540
|
+
url += '/' + currency.to_s.upcase unless currency.empty?
|
541
|
+
send_request(url)
|
542
|
+
end
|
543
|
+
|
544
|
+
#
|
545
|
+
# SMTP: get list of emails
|
546
|
+
#
|
547
|
+
# @param [Fixnum] limit
|
548
|
+
# @param [Fixnum] offset
|
549
|
+
# @param [String] from_date
|
550
|
+
# @param [String] to_date
|
551
|
+
# @param [String] sender
|
552
|
+
# @param [String] recipient
|
553
|
+
# @return [Hash]
|
554
|
+
#
|
555
|
+
def smtp_list_emails(limit = 0, offset = 0, from_date = '', to_date = '', sender = '', recipient = '')
|
556
|
+
data = {
|
557
|
+
limit: limit,
|
558
|
+
offset: offset,
|
559
|
+
from_date: from_date,
|
560
|
+
to_date: to_date,
|
561
|
+
sender: sender,
|
562
|
+
recipient: recipient
|
563
|
+
}
|
564
|
+
send_request('/smtp/emails', 'GET', data)
|
565
|
+
end
|
566
|
+
|
567
|
+
#
|
568
|
+
# SMTP: add emails to unsubscribe list
|
569
|
+
#
|
570
|
+
# @param [Fixnum] id
|
571
|
+
# @return [Hash]
|
572
|
+
#
|
573
|
+
def smtp_get_email_info_by_id(id)
|
574
|
+
return handle_error('Empty id') if id.to_s.empty?
|
575
|
+
send_request("smtp/emails/#{id}")
|
576
|
+
end
|
577
|
+
|
578
|
+
#
|
579
|
+
# SMTP: remove emails from unsubscribe list
|
580
|
+
#
|
581
|
+
# @param [Hash] emails
|
582
|
+
# @return [Hash]
|
583
|
+
#
|
584
|
+
def smtp_unsubscribe_emails(emails)
|
585
|
+
return handle_error('Empty emails') if emails.empty?
|
586
|
+
data = { emails: serialize(emails) }
|
587
|
+
send_request('smtp/unsubscribe', 'POST', data)
|
588
|
+
end
|
589
|
+
|
590
|
+
#
|
591
|
+
# SMTP: remove emails from unsubscribe list
|
592
|
+
#
|
593
|
+
# @param [Hash] emails
|
594
|
+
# @return [Hash]
|
595
|
+
#
|
596
|
+
def smtp_remove_from_unsubscribe(emails)
|
597
|
+
return handle_error('Empty emails') if emails.empty?
|
598
|
+
data = { emails: serialize(emails) }
|
599
|
+
send_request('smtp/unsubscribe', 'DELETE', data)
|
600
|
+
end
|
601
|
+
|
602
|
+
#
|
603
|
+
# SMTP: get list of IP
|
604
|
+
#
|
605
|
+
# @return [Hash]
|
606
|
+
#
|
607
|
+
def smtp_list_ip
|
608
|
+
send_request('smtp/ips')
|
609
|
+
end
|
610
|
+
|
611
|
+
#
|
612
|
+
# SMTP: get list of allowed domains
|
613
|
+
#
|
614
|
+
# @return [Hash]
|
615
|
+
#
|
616
|
+
def smtp_list_allowed_domains
|
617
|
+
send_request('smtp/domains')
|
618
|
+
end
|
619
|
+
|
620
|
+
#
|
621
|
+
# SMTP: add new domain
|
622
|
+
#
|
623
|
+
# @param [String] email
|
624
|
+
# @return [Hash]
|
625
|
+
#
|
626
|
+
def smtp_add_domain(email)
|
627
|
+
return handle_error('Empty email') if email.to_s.empty?
|
628
|
+
data = { email: email }
|
629
|
+
send_request('smtp/domains', 'POST', data)
|
630
|
+
end
|
631
|
+
|
632
|
+
#
|
633
|
+
# SMTP: verify domain
|
634
|
+
#
|
635
|
+
# @param [String] email
|
636
|
+
# @return [Hash]
|
637
|
+
#
|
638
|
+
def smtp_verify_domain(email)
|
639
|
+
return handle_error('Empty email') if email.to_s.empty?
|
640
|
+
send_request("smtp/domains/#{email}")
|
641
|
+
end
|
642
|
+
|
643
|
+
#
|
644
|
+
# SMTP: send mail
|
645
|
+
#
|
646
|
+
# @param [Hash] email
|
647
|
+
# @return [Hash]
|
648
|
+
#
|
649
|
+
def smtp_send_mail(email)
|
650
|
+
return handle_error('Empty email') if email.empty?
|
651
|
+
email[:html] = Base64.encode64(email[:html])
|
652
|
+
data = { email: serialize(email) }
|
653
|
+
send_request('smtp/emails', 'POST', data)
|
654
|
+
end
|
655
|
+
|
656
|
+
end
|