mailgun-ruby 1.2.16 → 1.3.1
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 +4 -4
- data/CHANGELOG.md +1 -2
- data/Gemfile +1 -0
- data/README.md +1 -0
- data/docs/Webhooks.md +4 -2
- data/lib/mailgun/client.rb +38 -30
- data/lib/mailgun/events/events.rb +4 -4
- data/lib/mailgun/exceptions/exceptions.rb +7 -7
- data/lib/mailgun/response.rb +11 -10
- data/lib/mailgun/version.rb +1 -1
- data/lib/mailgun.rb +1 -1
- data/mailgun.gemspec +2 -1
- data/spec/integration/mailgun_spec.rb +5 -5
- data/spec/unit/connection/test_client.rb +1 -1
- data/spec/unit/exceptions/exceptions_spec.rb +3 -3
- data/vcr_cassettes/bounces.yml +210 -1
- data/vcr_cassettes/complaints.yml +215 -5
- data/vcr_cassettes/domains.yml +777 -45
- data/vcr_cassettes/email_validation.yml +137 -8
- data/vcr_cassettes/events.yml +735 -2
- data/vcr_cassettes/exceptions.yml +48 -1
- data/vcr_cassettes/list_members.yml +343 -7
- data/vcr_cassettes/mailing_list.yml +301 -9
- data/vcr_cassettes/routes.yml +309 -1
- data/vcr_cassettes/send_message.yml +54 -3
- data/vcr_cassettes/stats.yml +47 -2
- data/vcr_cassettes/suppressions.yml +785 -0
- data/vcr_cassettes/unsubscribes.yml +215 -5
- metadata +21 -7
- /data/docs/{railgun/Templates.md → Templates.md} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4cd509b2c1f407b43b66a9ef400bb94845be7bf358ee0516dfc64f8ef9f139b7
|
4
|
+
data.tar.gz: aad61052482bfb86b04ef0111a4495346d2b48cf046543c1c2fb600ca06916db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 452423c6da36c0f23ec08d3a613002027fa80c41f48c3b0a8072ccc35df1230d16512273bce584ea470dc9ba05f557e8a5a617a95efe5305e663d2de4f18b54b
|
7
|
+
data.tar.gz: 5b28c5065060bcff51c7711b0a4b32796fa2c79ef83251fff5a11fbd0a573c80f4d7018b289c42d9a3c273d21941ffd7fa8eee3dcd317bf7463a45fd4131899d
|
data/CHANGELOG.md
CHANGED
@@ -25,7 +25,6 @@ All notable changes to this project will be documented in this file.
|
|
25
25
|
- Additional Domain Endpoints (https://github.com/mailgun/mailgun-ruby/pull/314)
|
26
26
|
- Webhooks Update Method (https://github.com/mailgun/mailgun-ruby/pull/305)
|
27
27
|
- Add support for AMP HTML (https://github.com/mailgun/mailgun-ruby/pull/304)
|
28
|
-
- Add support for AMP HTML (https://github.com/mailgun/mailgun-ruby/pull/304)
|
29
28
|
|
30
29
|
### Fixed
|
31
30
|
|
@@ -46,4 +45,4 @@ All notable changes to this project will be documented in this file.
|
|
46
45
|
### Fixed
|
47
46
|
|
48
47
|
- transform_for_mailgun block iteration issue (https://github.com/mailgun/mailgun-ruby/pull/298).
|
49
|
-
- Typos in several files (https://github.com/mailgun/mailgun-ruby/pull/297).
|
48
|
+
- Typos in several files (https://github.com/mailgun/mailgun-ruby/pull/297).
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -193,6 +193,7 @@ This SDK includes the following components:
|
|
193
193
|
- [Suppressions](docs/Suppressions.md)
|
194
194
|
- [Templates](docs/Templates.md)
|
195
195
|
- [EmailValidation](docs/EmailValidation.md)
|
196
|
+
- [Metrics](docs/Metrics.md)
|
196
197
|
|
197
198
|
Message Builder allows you to quickly create the array of parameters, required
|
198
199
|
to send a message, by calling a methods for each parameter.
|
data/docs/Webhooks.md
CHANGED
@@ -4,8 +4,7 @@ Mailgun - Webhooks
|
|
4
4
|
This is the Mailgun Ruby *Webhook* utilities.
|
5
5
|
|
6
6
|
The below assumes you've already installed the Mailgun Ruby SDK in to your
|
7
|
-
project. If not, go back to the master README for instructions.
|
8
|
-
all calls except updating webhooks.
|
7
|
+
project. If not, go back to the master README for instructions.
|
9
8
|
|
10
9
|
Usage - Webhooks
|
11
10
|
-----------------------
|
@@ -27,6 +26,9 @@ hook.create_all 'my.perfect.domain', 'https://the.webhook.url/'
|
|
27
26
|
# Add a url for a specific webhook
|
28
27
|
hook.create 'my.perfect.domain', 'deliver', 'https://the.webhook.url/'
|
29
28
|
|
29
|
+
# Update the url for a specific webhook
|
30
|
+
hook.update 'my.perfect.domain', 'deliver', 'https://the.webhook.url/'
|
31
|
+
|
30
32
|
# Remove a url for a specific webhook
|
31
33
|
hook.remove 'my.perfect.domain', 'deliver'
|
32
34
|
|
data/lib/mailgun/client.rb
CHANGED
@@ -19,16 +19,26 @@ module Mailgun
|
|
19
19
|
timeout = nil,
|
20
20
|
proxy_url = Mailgun.proxy_url)
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
endpoint = endpoint_generator(api_host, api_version, ssl)
|
23
|
+
|
24
|
+
request_options = {
|
25
|
+
url: endpoint,
|
26
|
+
proxy: Mailgun.proxy_url,
|
27
|
+
ssl: {verify: ssl},
|
28
|
+
headers: {
|
29
|
+
'User-Agent' => "mailgun-sdk-ruby/#{Mailgun::VERSION}",
|
30
|
+
'Accept' =>'*/*'
|
31
|
+
}
|
26
32
|
}
|
27
|
-
|
33
|
+
request_options.merge!(request: {timeout: timeout}) if timeout
|
34
|
+
|
35
|
+
@http_client = Faraday.new(request_options) do |conn|
|
36
|
+
conn.request :authorization, :basic, 'api', api_key
|
37
|
+
conn.request :url_encoded
|
38
|
+
conn.response :raise_error, include_request: true
|
39
|
+
conn.adapter Faraday.default_adapter
|
40
|
+
end
|
28
41
|
|
29
|
-
endpoint = endpoint_generator(api_host, api_version, ssl)
|
30
|
-
RestClient.proxy = proxy_url
|
31
|
-
@http_client = RestClient::Resource.new(endpoint, rest_client_params)
|
32
42
|
@test_mode = test_mode
|
33
43
|
@api_version = api_version
|
34
44
|
end
|
@@ -49,17 +59,17 @@ module Mailgun
|
|
49
59
|
|
50
60
|
# Change API key
|
51
61
|
def set_api_key(api_key)
|
52
|
-
@http_client.
|
62
|
+
@http_client.set_basic_auth('api', api_key)
|
53
63
|
end
|
54
64
|
|
55
65
|
# Add subaccount id to headers
|
56
66
|
def set_subaccount(subaccount_id)
|
57
|
-
@http_client.
|
67
|
+
@http_client.headers = @http_client.headers.merge!({ SUBACCOUNT_HEADER => subaccount_id })
|
58
68
|
end
|
59
69
|
|
60
70
|
# Reset subaccount for primary usage
|
61
71
|
def reset_subaccount
|
62
|
-
@http_client.
|
72
|
+
@http_client.headers.delete(SUBACCOUNT_HEADER)
|
63
73
|
end
|
64
74
|
|
65
75
|
# Client is in test mode?
|
@@ -95,7 +105,7 @@ module Mailgun
|
|
95
105
|
return Response.from_hash(
|
96
106
|
{
|
97
107
|
:body => "{\"id\": \"test-mode-mail-#{SecureRandom.uuid}@localhost\", \"message\": \"Queued. Thank you.\"}",
|
98
|
-
:
|
108
|
+
:status => 200,
|
99
109
|
}
|
100
110
|
)
|
101
111
|
end
|
@@ -130,7 +140,7 @@ module Mailgun
|
|
130
140
|
# @param [Hash] headers Additional headers to pass to the resource.
|
131
141
|
# @return [Mailgun::Response] A Mailgun::Response object.
|
132
142
|
def post(resource_path, data, headers = {})
|
133
|
-
response = @http_client
|
143
|
+
response = @http_client.post(resource_path, data, headers)
|
134
144
|
Response.new(response)
|
135
145
|
rescue => err
|
136
146
|
raise communication_error err
|
@@ -138,21 +148,19 @@ module Mailgun
|
|
138
148
|
|
139
149
|
# Generic Mailgun GET Handler
|
140
150
|
#
|
141
|
-
# @param [String] resource_path
|
142
|
-
#
|
143
|
-
#
|
144
|
-
#
|
145
|
-
# @
|
146
|
-
# @
|
147
|
-
def get(resource_path, params =
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
response = @http_client[resource_path].get(accept: accept)
|
152
|
-
end
|
151
|
+
# @param [String] resource_path The API resource path to request, including the domain if required.
|
152
|
+
# @param [Hash] params Optional request parameters, including query parameters and headers.
|
153
|
+
# - `:headers` [Hash] (optional) Custom headers for the request.
|
154
|
+
# @param [String] accept The expected Content-Type of the response. Defaults to '*/*'.
|
155
|
+
# @return [Mailgun::Response] A response object containing the API response data.
|
156
|
+
# @raise [CommunicationError] If the request fails, raises a communication error.
|
157
|
+
def get(resource_path, params = {}, accept = '*/*')
|
158
|
+
headers = (params[:headers] || {}).merge(accept: accept)
|
159
|
+
response = @http_client.get(resource_path, params, headers)
|
160
|
+
|
153
161
|
Response.new(response)
|
154
162
|
rescue => err
|
155
|
-
raise communication_error
|
163
|
+
raise communication_error(err)
|
156
164
|
end
|
157
165
|
|
158
166
|
# Generic Mailgun PUT Handler
|
@@ -163,7 +171,7 @@ module Mailgun
|
|
163
171
|
# containing required parameters for the requested resource.
|
164
172
|
# @return [Mailgun::Response] A Mailgun::Response object.
|
165
173
|
def put(resource_path, data)
|
166
|
-
response = @http_client
|
174
|
+
response = @http_client.put(resource_path, data)
|
167
175
|
Response.new(response)
|
168
176
|
rescue => err
|
169
177
|
raise communication_error err
|
@@ -176,9 +184,9 @@ module Mailgun
|
|
176
184
|
# @return [Mailgun::Response] A Mailgun::Response object.
|
177
185
|
def delete(resource_path, params = nil)
|
178
186
|
if params
|
179
|
-
response = @http_client
|
187
|
+
response = @http_client.delete(resource_path, params: params)
|
180
188
|
else
|
181
|
-
response = @http_client
|
189
|
+
response = @http_client.delete(resource_path)
|
182
190
|
end
|
183
191
|
Response.new(response)
|
184
192
|
rescue => err
|
@@ -227,7 +235,7 @@ module Mailgun
|
|
227
235
|
# @param [StandardException] e upstream exception object
|
228
236
|
def communication_error(e)
|
229
237
|
if e.respond_to?(:response) && e.response
|
230
|
-
return case e.
|
238
|
+
return case e.response_status
|
231
239
|
when Unauthorized::CODE
|
232
240
|
Unauthorized.new(e.message, e.response)
|
233
241
|
when BadRequest::CODE
|
@@ -29,7 +29,7 @@ module Mailgun
|
|
29
29
|
# params - a Hash of query options and/or filters.
|
30
30
|
#
|
31
31
|
# Returns a Mailgun::Response object.
|
32
|
-
def get(params =
|
32
|
+
def get(params = {})
|
33
33
|
self.next(params)
|
34
34
|
end
|
35
35
|
|
@@ -40,7 +40,7 @@ module Mailgun
|
|
40
40
|
# params - a Hash of query options and/or filters.
|
41
41
|
#
|
42
42
|
# Returns a Mailgun::Response object.
|
43
|
-
def next(params =
|
43
|
+
def next(params = {})
|
44
44
|
get_events(params, @paging_next)
|
45
45
|
end
|
46
46
|
|
@@ -51,7 +51,7 @@ module Mailgun
|
|
51
51
|
# params - a Hash of query options and/or filters.
|
52
52
|
#
|
53
53
|
# Returns Mailgun::Response object.
|
54
|
-
def previous(params =
|
54
|
+
def previous(params = {})
|
55
55
|
get_events(params, @paging_previous)
|
56
56
|
end
|
57
57
|
|
@@ -75,7 +75,7 @@ module Mailgun
|
|
75
75
|
# paging - the URL key used for previous/next requests
|
76
76
|
#
|
77
77
|
# Returns a Mailgun.Response object.
|
78
|
-
def get_events(params =
|
78
|
+
def get_events(params = {}, paging = nil)
|
79
79
|
response = @client.get(construct_url(paging), params)
|
80
80
|
extract_paging(response)
|
81
81
|
response
|
@@ -29,10 +29,10 @@ module Mailgun
|
|
29
29
|
# Public: Class for managing communications (eg http) response errors
|
30
30
|
# Inherits from Mailgun::Error
|
31
31
|
class CommunicationError < Error
|
32
|
-
# Public: gets HTTP status
|
33
|
-
attr_reader :
|
32
|
+
# Public: gets HTTP status status
|
33
|
+
attr_reader :status
|
34
34
|
|
35
|
-
# Public: fallback if there is no response
|
35
|
+
# Public: fallback if there is no response status on the object
|
36
36
|
NOCODE = 000
|
37
37
|
FORBIDDEN = 'Forbidden'
|
38
38
|
|
@@ -43,17 +43,17 @@ module Mailgun
|
|
43
43
|
#
|
44
44
|
def initialize(message = nil, response = nil)
|
45
45
|
@response = response
|
46
|
-
@
|
46
|
+
@status = if response.nil?
|
47
47
|
NOCODE
|
48
48
|
else
|
49
|
-
response.
|
49
|
+
response.status
|
50
50
|
end
|
51
51
|
|
52
52
|
begin
|
53
53
|
json = JSON.parse(response.body)
|
54
54
|
api_message = json['message'] || json['Error'] || json['error']
|
55
55
|
rescue JSON::ParserError
|
56
|
-
api_message = response.
|
56
|
+
api_message = response.response_body
|
57
57
|
rescue NoMethodError
|
58
58
|
api_message = "Unknown API error"
|
59
59
|
rescue
|
@@ -65,7 +65,7 @@ module Mailgun
|
|
65
65
|
|
66
66
|
super(message, response)
|
67
67
|
rescue NoMethodError, JSON::ParserError
|
68
|
-
@
|
68
|
+
@status = NOCODE
|
69
69
|
super(message, response)
|
70
70
|
end
|
71
71
|
end
|
data/lib/mailgun/response.rb
CHANGED
@@ -6,19 +6,20 @@ module Mailgun
|
|
6
6
|
#
|
7
7
|
# See the Github documentation for full examples.
|
8
8
|
class Response
|
9
|
-
# All responses have a payload and a
|
9
|
+
# All responses have a payload and a status corresponding to http, though
|
10
10
|
# slightly different
|
11
|
-
attr_accessor :body, :code
|
11
|
+
attr_accessor :body, :status, :code
|
12
12
|
|
13
|
-
ResponseHash = Struct.new(:body, :
|
13
|
+
ResponseHash = Struct.new(:body, :status)
|
14
14
|
def self.from_hash(h)
|
15
15
|
# Create a "fake" response object with the data passed from h
|
16
|
-
self.new ResponseHash.new(h[:body], h[:
|
16
|
+
self.new ResponseHash.new(h[:body], h[:status])
|
17
17
|
end
|
18
18
|
|
19
19
|
def initialize(response)
|
20
20
|
@body = response.body
|
21
|
-
@
|
21
|
+
@status = response.status
|
22
|
+
@code = response.status
|
22
23
|
end
|
23
24
|
|
24
25
|
# Return response as Ruby Hash
|
@@ -57,12 +58,12 @@ module Mailgun
|
|
57
58
|
rescue => err
|
58
59
|
raise ParseError.new(err), err
|
59
60
|
end
|
60
|
-
|
61
|
-
# Returns true if response
|
62
|
-
#
|
63
|
-
# @return [Boolean] A boolean that binarizes the response
|
61
|
+
|
62
|
+
# Returns true if response status is 2xx
|
63
|
+
#
|
64
|
+
# @return [Boolean] A boolean that binarizes the response status result.
|
64
65
|
def success?
|
65
|
-
(200..299).include?(
|
66
|
+
(200..299).include?(status)
|
66
67
|
end
|
67
68
|
end
|
68
69
|
end
|
data/lib/mailgun/version.rb
CHANGED
data/lib/mailgun.rb
CHANGED
data/mailgun.gemspec
CHANGED
@@ -35,6 +35,7 @@ Gem::Specification.new do |spec|
|
|
35
35
|
spec.add_development_dependency 'vcr', '~> 3.0.3'
|
36
36
|
spec.add_development_dependency 'simplecov', '~> 0.16.1'
|
37
37
|
spec.add_development_dependency 'rails'
|
38
|
-
spec.add_dependency '
|
38
|
+
spec.add_dependency 'mime-types'
|
39
|
+
spec.add_dependency 'faraday', "~> 2.1"
|
39
40
|
|
40
41
|
end
|
@@ -51,7 +51,7 @@ describe 'Client exceptions', vcr: vcr_opts do
|
|
51
51
|
:text => 'INTEGRATION TESTING'
|
52
52
|
})
|
53
53
|
rescue Mailgun::Unauthorized => err
|
54
|
-
expect(err.message).to eq('401
|
54
|
+
expect(err.message).to eq('the server responded with status 401 - Invalid Domain or API key')
|
55
55
|
else
|
56
56
|
fail
|
57
57
|
end
|
@@ -75,7 +75,7 @@ describe 'Client exceptions', vcr: vcr_opts do
|
|
75
75
|
:text => 'INTEGRATION TESTING'
|
76
76
|
})
|
77
77
|
rescue Mailgun::BadRequest => err
|
78
|
-
expect(err.message).to eq('
|
78
|
+
expect(err.message).to eq('the server responded with status 400')
|
79
79
|
else
|
80
80
|
fail
|
81
81
|
end
|
@@ -99,7 +99,7 @@ describe 'Client exceptions', vcr: vcr_opts do
|
|
99
99
|
:text => 'INTEGRATION TESTING'
|
100
100
|
})
|
101
101
|
rescue Mailgun::CommunicationError => err
|
102
|
-
expect(err.message).to include('403
|
102
|
+
expect(err.message).to include('403')
|
103
103
|
else
|
104
104
|
fail
|
105
105
|
end
|
@@ -192,7 +192,7 @@ Testing some Mailgun awesomness!'
|
|
192
192
|
expect(result.body).to include("message")
|
193
193
|
expect(result.body).to include("id")
|
194
194
|
end
|
195
|
-
|
195
|
+
|
196
196
|
it 'receives success response code' do
|
197
197
|
@mg_obj.enable_test_mode!
|
198
198
|
|
@@ -205,7 +205,7 @@ Testing some Mailgun awesomness!'
|
|
205
205
|
|
206
206
|
result = @mg_obj.send_message(@domain, data)
|
207
207
|
result.to_h!
|
208
|
-
|
208
|
+
|
209
209
|
expect(result.success?).to be(true)
|
210
210
|
end
|
211
211
|
end
|
@@ -99,7 +99,7 @@ module Mailgun
|
|
99
99
|
return Response.from_hash({ body: JSON.generate({"message" => "Queued. Thank you.", "id" => id}) })
|
100
100
|
end
|
101
101
|
if resource_endpoint == "bounces"
|
102
|
-
return Response.from_hash({ body: JSON.generate({"total_count" => 1, "items" => {"created_at" => "Fri, 21 Oct 2011 11:02:55 GMT", "
|
102
|
+
return Response.from_hash({ body: JSON.generate({"total_count" => 1, "items" => {"created_at" => "Fri, 21 Oct 2011 11:02:55 GMT", "status" => 550, "address" => "baz@example.com", "error" => "Message was not accepted -- invalid mailbox. Local mailbox baz@example.com is unavailable: user not found"}}) })
|
103
103
|
end
|
104
104
|
if resource_endpoint == "lists"
|
105
105
|
return Response.from_hash({ body: JSON.generate({"member" => {"vars" => {"age" => 26}, "name" => "Foo Bar", "subscribed" => false, "address" => "bar@example.com"}, "message" => "Mailing list member has been updated"}) })
|
@@ -5,13 +5,13 @@ RSpec.describe Mailgun::CommunicationError do
|
|
5
5
|
context "when the Response body doesn't have a `message` property" do
|
6
6
|
it "doesn't raise an error" do
|
7
7
|
expect do
|
8
|
-
described_class.new('Boom!', Mailgun::Response.from_hash({
|
8
|
+
described_class.new('Boom!', Mailgun::Response.from_hash({ status: 401, body: '{}' }))
|
9
9
|
end.not_to raise_error
|
10
10
|
end
|
11
11
|
|
12
12
|
context "when the Response body has an `Error` property" do
|
13
13
|
it "uses the `Error` property as the API message" do
|
14
|
-
subject = described_class.new('Boom!', Mailgun::Response.from_hash({
|
14
|
+
subject = described_class.new('Boom!', Mailgun::Response.from_hash({ status: 401, body: '{"Error":"unauthorized"}' }))
|
15
15
|
|
16
16
|
expect(subject.message).to eq("Boom!: unauthorized")
|
17
17
|
end
|
@@ -19,7 +19,7 @@ RSpec.describe Mailgun::CommunicationError do
|
|
19
19
|
|
20
20
|
context "when the Response body has an `error` property" do
|
21
21
|
it "uses the `Error` property as the API message" do
|
22
|
-
subject = described_class.new('Boom!', Mailgun::Response.from_hash({
|
22
|
+
subject = described_class.new('Boom!', Mailgun::Response.from_hash({ status: 401, body: '{"error":"not found"}' }))
|
23
23
|
|
24
24
|
expect(subject.message).to eq("Boom!: not found")
|
25
25
|
end
|
data/vcr_cassettes/bounces.yml
CHANGED
@@ -172,4 +172,213 @@ http_interactions:
|
|
172
172
|
address has been removed"}'
|
173
173
|
http_version:
|
174
174
|
recorded_at: Fri, 08 Jan 2016 20:33:30 GMT
|
175
|
-
|
175
|
+
- request:
|
176
|
+
method: post
|
177
|
+
uri: https://api.mailgun.net/v3/DOMAIN.TEST/bounces
|
178
|
+
body:
|
179
|
+
encoding: UTF-8
|
180
|
+
string: address=integration-test%2Bemail%40DOMAIN.TEST&code=550&error=Integration+Test
|
181
|
+
headers:
|
182
|
+
User-Agent:
|
183
|
+
- mailgun-sdk-ruby/1.3.0
|
184
|
+
Accept:
|
185
|
+
- "*/*"
|
186
|
+
Authorization:
|
187
|
+
- Basic xxx==
|
188
|
+
Content-Type:
|
189
|
+
- application/x-www-form-urlencoded
|
190
|
+
Accept-Encoding:
|
191
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
192
|
+
response:
|
193
|
+
status:
|
194
|
+
code: 200
|
195
|
+
message: OK
|
196
|
+
headers:
|
197
|
+
Access-Control-Allow-Credentials:
|
198
|
+
- 'true'
|
199
|
+
Access-Control-Allow-Origin:
|
200
|
+
- "*"
|
201
|
+
Cache-Control:
|
202
|
+
- no-store
|
203
|
+
Content-Length:
|
204
|
+
- '145'
|
205
|
+
Content-Type:
|
206
|
+
- application/json; charset=utf-8
|
207
|
+
Date:
|
208
|
+
- Sun, 26 Jan 2025 07:29:04 GMT
|
209
|
+
Strict-Transport-Security:
|
210
|
+
- max-age=63072000; includeSubDomains
|
211
|
+
X-Mailgun-Key-Id:
|
212
|
+
- 90b59dea-f2d12a53
|
213
|
+
X-Request-Limit:
|
214
|
+
- '2500'
|
215
|
+
X-Request-Remaining:
|
216
|
+
- '2499'
|
217
|
+
X-Request-Reset:
|
218
|
+
- '1737876559178'
|
219
|
+
X-Xss-Protection:
|
220
|
+
- 1; mode=block
|
221
|
+
body:
|
222
|
+
encoding: UTF-8
|
223
|
+
string: '{"message":"Address has been added to the bounces table","address":"integration-test+email@DOMAIN.TEST"}
|
224
|
+
|
225
|
+
'
|
226
|
+
http_version:
|
227
|
+
recorded_at: Sun, 26 Jan 2025 07:29:04 GMT
|
228
|
+
- request:
|
229
|
+
method: get
|
230
|
+
uri: https://api.mailgun.net/v3/DOMAIN.TEST/bounces/integration-test+email@DOMAIN.TEST
|
231
|
+
body:
|
232
|
+
encoding: US-ASCII
|
233
|
+
string: ''
|
234
|
+
headers:
|
235
|
+
User-Agent:
|
236
|
+
- mailgun-sdk-ruby/1.3.0
|
237
|
+
Accept:
|
238
|
+
- "*/*"
|
239
|
+
Authorization:
|
240
|
+
- Basic xxx==
|
241
|
+
Accept-Encoding:
|
242
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
243
|
+
response:
|
244
|
+
status:
|
245
|
+
code: 200
|
246
|
+
message: OK
|
247
|
+
headers:
|
248
|
+
Access-Control-Allow-Credentials:
|
249
|
+
- 'true'
|
250
|
+
Access-Control-Allow-Origin:
|
251
|
+
- "*"
|
252
|
+
Cache-Control:
|
253
|
+
- no-store
|
254
|
+
Content-Length:
|
255
|
+
- '174'
|
256
|
+
Content-Type:
|
257
|
+
- application/json; charset=utf-8
|
258
|
+
Date:
|
259
|
+
- Sun, 26 Jan 2025 07:29:04 GMT
|
260
|
+
Strict-Transport-Security:
|
261
|
+
- max-age=63072000; includeSubDomains
|
262
|
+
X-Mailgun-Key-Id:
|
263
|
+
- 90b59dea-f2d12a53
|
264
|
+
X-Request-Limit:
|
265
|
+
- '2500'
|
266
|
+
X-Request-Remaining:
|
267
|
+
- '2498'
|
268
|
+
X-Request-Reset:
|
269
|
+
- '1737876559178'
|
270
|
+
X-Xss-Protection:
|
271
|
+
- 1; mode=block
|
272
|
+
body:
|
273
|
+
encoding: UTF-8
|
274
|
+
string: '{"address":"integration-test+email@DOMAIN.TEST","code":"550","error":"Integration
|
275
|
+
Test","created_at":"Sun, 26 Jan 2025 07:29:04 UTC"}
|
276
|
+
|
277
|
+
'
|
278
|
+
http_version:
|
279
|
+
recorded_at: Sun, 26 Jan 2025 07:29:04 GMT
|
280
|
+
- request:
|
281
|
+
method: get
|
282
|
+
uri: https://api.mailgun.net/v3/DOMAIN.TEST/bounces
|
283
|
+
body:
|
284
|
+
encoding: US-ASCII
|
285
|
+
string: ''
|
286
|
+
headers:
|
287
|
+
User-Agent:
|
288
|
+
- mailgun-sdk-ruby/1.3.0
|
289
|
+
Accept:
|
290
|
+
- "*/*"
|
291
|
+
Authorization:
|
292
|
+
- Basic xxx==
|
293
|
+
Accept-Encoding:
|
294
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
295
|
+
response:
|
296
|
+
status:
|
297
|
+
code: 200
|
298
|
+
message: OK
|
299
|
+
headers:
|
300
|
+
Access-Control-Allow-Credentials:
|
301
|
+
- 'true'
|
302
|
+
Access-Control-Allow-Origin:
|
303
|
+
- "*"
|
304
|
+
Cache-Control:
|
305
|
+
- no-store
|
306
|
+
Content-Length:
|
307
|
+
- '858'
|
308
|
+
Content-Type:
|
309
|
+
- application/json; charset=utf-8
|
310
|
+
Date:
|
311
|
+
- Sun, 26 Jan 2025 07:29:05 GMT
|
312
|
+
Strict-Transport-Security:
|
313
|
+
- max-age=63072000; includeSubDomains
|
314
|
+
X-Mailgun-Key-Id:
|
315
|
+
- 90b59dea-f2d12a53
|
316
|
+
X-Request-Limit:
|
317
|
+
- '2500'
|
318
|
+
X-Request-Remaining:
|
319
|
+
- '2497'
|
320
|
+
X-Request-Reset:
|
321
|
+
- '1737876559178'
|
322
|
+
X-Xss-Protection:
|
323
|
+
- 1; mode=block
|
324
|
+
body:
|
325
|
+
encoding: UTF-8
|
326
|
+
string: '{"items":[{"address":"integration-test+email@DOMAIN.TEST","code":"550","error":"Integration
|
327
|
+
Test","created_at":"Sun, 26 Jan 2025 07:29:04 UTC"}],"paging":{"first":"https://api.mailgun.net/v3/DOMAIN.TEST/bounces?limit=100&term=","last":"https://api.mailgun.net/v3/DOMAIN.TEST/bounces?page=last&limit=100&term=","next":"https://api.mailgun.net/v3/DOMAIN.TEST/bounces?page=next&address=integration-test%2Bemail%40DOMAIN.TEST&limit=100&term=","previous":"https://api.mailgun.net/v3/DOMAIN.TEST/bounces?page=previous&address=integration-test%2Bemail%40DOMAIN.TEST&limit=100&term="}}
|
328
|
+
|
329
|
+
'
|
330
|
+
http_version:
|
331
|
+
recorded_at: Sun, 26 Jan 2025 07:29:05 GMT
|
332
|
+
- request:
|
333
|
+
method: delete
|
334
|
+
uri: https://api.mailgun.net/v3/DOMAIN.TEST/bounces/integration-test+email@DOMAIN.TEST
|
335
|
+
body:
|
336
|
+
encoding: US-ASCII
|
337
|
+
string: ''
|
338
|
+
headers:
|
339
|
+
User-Agent:
|
340
|
+
- mailgun-sdk-ruby/1.3.0
|
341
|
+
Accept:
|
342
|
+
- "*/*"
|
343
|
+
Authorization:
|
344
|
+
- Basic xxx==
|
345
|
+
Accept-Encoding:
|
346
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
347
|
+
response:
|
348
|
+
status:
|
349
|
+
code: 200
|
350
|
+
message: OK
|
351
|
+
headers:
|
352
|
+
Access-Control-Allow-Credentials:
|
353
|
+
- 'true'
|
354
|
+
Access-Control-Allow-Origin:
|
355
|
+
- "*"
|
356
|
+
Cache-Control:
|
357
|
+
- no-store
|
358
|
+
Content-Length:
|
359
|
+
- '134'
|
360
|
+
Content-Type:
|
361
|
+
- application/json; charset=utf-8
|
362
|
+
Date:
|
363
|
+
- Sun, 26 Jan 2025 07:29:06 GMT
|
364
|
+
Strict-Transport-Security:
|
365
|
+
- max-age=63072000; includeSubDomains
|
366
|
+
X-Mailgun-Key-Id:
|
367
|
+
- 90b59dea-f2d12a53
|
368
|
+
X-Request-Limit:
|
369
|
+
- '2500'
|
370
|
+
X-Request-Remaining:
|
371
|
+
- '2496'
|
372
|
+
X-Request-Reset:
|
373
|
+
- '1737876559178'
|
374
|
+
X-Xss-Protection:
|
375
|
+
- 1; mode=block
|
376
|
+
body:
|
377
|
+
encoding: UTF-8
|
378
|
+
string: '{"address":"integration-test+email@DOMAIN.TEST","message":"Bounced
|
379
|
+
address has been removed"}
|
380
|
+
|
381
|
+
'
|
382
|
+
http_version:
|
383
|
+
recorded_at: Sun, 26 Jan 2025 07:29:06 GMT
|
384
|
+
recorded_with: VCR 3.0.3
|