wj-mailgun-ruby 1.1.7
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/.gitignore +23 -0
- data/.rubocop.yml +8 -0
- data/.rubocop_todo.yml +22 -0
- data/.ruby-env.yml.example +12 -0
- data/.ruby-version +1 -0
- data/.travis.yml +24 -0
- data/Gemfile +6 -0
- data/LICENSE +191 -0
- data/README.md +241 -0
- data/Rakefile +35 -0
- data/docs/Domains.md +54 -0
- data/docs/Events.md +46 -0
- data/docs/MessageBuilder.md +105 -0
- data/docs/Messages.md +107 -0
- data/docs/OptInHandler.md +103 -0
- data/docs/Snippets.md +526 -0
- data/docs/Suppressions.md +82 -0
- data/docs/Webhooks.md +40 -0
- data/lib/mailgun-ruby.rb +2 -0
- data/lib/mailgun.rb +39 -0
- data/lib/mailgun/address.rb +45 -0
- data/lib/mailgun/chains.rb +16 -0
- data/lib/mailgun/client.rb +199 -0
- data/lib/mailgun/domains/domains.rb +84 -0
- data/lib/mailgun/events/events.rb +120 -0
- data/lib/mailgun/exceptions/exceptions.rb +65 -0
- data/lib/mailgun/lists/opt_in_handler.rb +58 -0
- data/lib/mailgun/messages/batch_message.rb +125 -0
- data/lib/mailgun/messages/message_builder.rb +413 -0
- data/lib/mailgun/response.rb +62 -0
- data/lib/mailgun/suppressions.rb +270 -0
- data/lib/mailgun/version.rb +4 -0
- data/lib/mailgun/webhooks/webhooks.rb +101 -0
- data/lib/railgun.rb +8 -0
- data/lib/railgun/attachment.rb +56 -0
- data/lib/railgun/errors.rb +27 -0
- data/lib/railgun/mailer.rb +161 -0
- data/lib/railgun/message.rb +17 -0
- data/lib/railgun/railtie.rb +9 -0
- data/mailgun.gemspec +37 -0
- data/spec/integration/bounces_spec.rb +44 -0
- data/spec/integration/campaign_spec.rb +60 -0
- data/spec/integration/complaints_spec.rb +38 -0
- data/spec/integration/domains_spec.rb +39 -0
- data/spec/integration/email_validation_spec.rb +57 -0
- data/spec/integration/events_spec.rb +28 -0
- data/spec/integration/list_members_spec.rb +63 -0
- data/spec/integration/list_spec.rb +58 -0
- data/spec/integration/mailgun_spec.rb +121 -0
- data/spec/integration/messages/sample_data/mime.txt +38 -0
- data/spec/integration/routes_spec.rb +74 -0
- data/spec/integration/stats_spec.rb +15 -0
- data/spec/integration/suppressions_spec.rb +126 -0
- data/spec/integration/unsubscribes_spec.rb +42 -0
- data/spec/integration/webhook_spec.rb +54 -0
- data/spec/spec_helper.rb +45 -0
- data/spec/unit/connection/test_client.rb +99 -0
- data/spec/unit/events/events_spec.rb +50 -0
- data/spec/unit/lists/opt_in_handler_spec.rb +24 -0
- data/spec/unit/mailgun_spec.rb +127 -0
- data/spec/unit/messages/batch_message_spec.rb +131 -0
- data/spec/unit/messages/message_builder_spec.rb +584 -0
- data/spec/unit/messages/sample_data/mailgun_icon.png +0 -0
- data/spec/unit/messages/sample_data/mime.txt +38 -0
- data/spec/unit/messages/sample_data/rackspace_logo.jpg +0 -0
- data/vcr_cassettes/bounces.yml +175 -0
- data/vcr_cassettes/complaints.yml +175 -0
- data/vcr_cassettes/domains.todo.yml +42 -0
- data/vcr_cassettes/domains.yml +360 -0
- data/vcr_cassettes/email_validation.yml +167 -0
- data/vcr_cassettes/events.yml +108 -0
- data/vcr_cassettes/exceptions.yml +45 -0
- data/vcr_cassettes/list_members.yml +320 -0
- data/vcr_cassettes/mailing_list.todo.yml +43 -0
- data/vcr_cassettes/mailing_list.yml +390 -0
- data/vcr_cassettes/routes.yml +359 -0
- data/vcr_cassettes/send_message.yml +107 -0
- data/vcr_cassettes/stats.yml +44 -0
- data/vcr_cassettes/suppressions.yml +676 -0
- data/vcr_cassettes/unsubscribes.yml +191 -0
- data/vcr_cassettes/webhooks.yml +276 -0
- metadata +263 -0
@@ -0,0 +1,82 @@
|
|
1
|
+
Mailgun - Suppressions
|
2
|
+
====================
|
3
|
+
|
4
|
+
This is the Mailgun Ruby *Suppressions* utilities.
|
5
|
+
|
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. It currently supports
|
8
|
+
all calls except credentials.
|
9
|
+
|
10
|
+
----
|
11
|
+
|
12
|
+
The Suppressions client lets you manage bounces, unsubscribes, and complaints for a
|
13
|
+
single domain.
|
14
|
+
|
15
|
+
You can view additional samples in the [suppressions_spec.rb](/spec/integration/suppressions_spec.rb)
|
16
|
+
or the Suppressions client API in [suppressions.rb](/lib/mailgun/suppressions.rb).
|
17
|
+
|
18
|
+
|
19
|
+
Usage
|
20
|
+
-----
|
21
|
+
|
22
|
+
To get an instance of the Suppressions client:
|
23
|
+
|
24
|
+
```ruby
|
25
|
+
mg_client = Mailgun::Client.new('api_key')
|
26
|
+
supp_client = mg_client.suppressions('yourdomain.com')
|
27
|
+
```
|
28
|
+
|
29
|
+
----
|
30
|
+
|
31
|
+
To get a list of bounces, unsubscribes, and/or complaints:
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
supp_client.list_bounces
|
35
|
+
supp_client.list_unsubscribes
|
36
|
+
supp_client.list_complaints
|
37
|
+
```
|
38
|
+
|
39
|
+
----
|
40
|
+
|
41
|
+
To batch-add a set of bounces:
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
@addresses = <load or generate some addresses...>
|
45
|
+
|
46
|
+
bounces = []
|
47
|
+
@addresses.each do |addr|
|
48
|
+
bounces.push({
|
49
|
+
:address => addr,
|
50
|
+
:code => 500,
|
51
|
+
:error => 'some bounce because reasons',
|
52
|
+
})
|
53
|
+
end
|
54
|
+
|
55
|
+
response, addt_responses = @supp_client.create_bounces bounces
|
56
|
+
```
|
57
|
+
|
58
|
+
`create_bounces`, `create_unsubscribes`, and `create_complaints` will all
|
59
|
+
return two values - first, a simple `Mailgun::Response` object. Second,
|
60
|
+
a list containing any `Mailgun::Response` objects created recursively, if over 998
|
61
|
+
bounces were provided to `create_*`.
|
62
|
+
|
63
|
+
----
|
64
|
+
|
65
|
+
To delete bounces:
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
@addresses = <load addresses...>
|
69
|
+
|
70
|
+
@addresses.each do |addr|
|
71
|
+
@supp_client.delete_bounce addr
|
72
|
+
end
|
73
|
+
```
|
74
|
+
|
75
|
+
Or, alternatively, to remove *all* bounces:
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
@supp_client.delete_all_bounces
|
79
|
+
```
|
80
|
+
|
81
|
+
The `delete_*` methods are similar for `bounces`, `unsubscribe`, and `complaints` -
|
82
|
+
they all will return a `Mailgun::Response` object.
|
data/docs/Webhooks.md
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
Mailgun - Webhooks
|
2
|
+
====================
|
3
|
+
|
4
|
+
This is the Mailgun Ruby *Webhook* utilities.
|
5
|
+
|
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. It currently supports
|
8
|
+
all calls except updating webhooks.
|
9
|
+
|
10
|
+
Usage - Webhooks
|
11
|
+
-----------------------
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
# First, instantiate the Mailgun Client with your API key
|
15
|
+
mg_client = Mailgun::Client.new('your-api-key')
|
16
|
+
hook = Mailgun::Webhooks.new(mg_client)
|
17
|
+
|
18
|
+
# Get a list webhooks for a domain.
|
19
|
+
hook.list 'my.perfect.domain'
|
20
|
+
|
21
|
+
# View a single webhook detail
|
22
|
+
hook.info 'my.perfect.domain', 'deliver'
|
23
|
+
|
24
|
+
# Add a single url for all webhooks
|
25
|
+
hook.create_all 'my.perfect.domain', 'https://the.webhook.url/'
|
26
|
+
|
27
|
+
# Add a url for a specific webhook
|
28
|
+
hook.create 'my.perfect.domain', 'deliver', 'https://the.webhook.url/'
|
29
|
+
|
30
|
+
# Remove a url for a specific webhook
|
31
|
+
hook.remove 'my.perfect.domain', 'deliver'
|
32
|
+
|
33
|
+
# Remove all webhooks for a domain
|
34
|
+
hook.remove 'my.perfect.domain'
|
35
|
+
```
|
36
|
+
|
37
|
+
More Documentation
|
38
|
+
------------------
|
39
|
+
See the official [Mailgun Domain Docs](https://documentation.mailgun.com/api-webhooks.html)
|
40
|
+
for more information
|
data/lib/mailgun-ruby.rb
ADDED
data/lib/mailgun.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
require 'rest_client'
|
3
|
+
require 'yaml'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
require 'mailgun/version'
|
7
|
+
require 'mailgun/client'
|
8
|
+
require 'mailgun/response'
|
9
|
+
require 'mailgun/chains'
|
10
|
+
require 'mailgun/address'
|
11
|
+
require 'mailgun/lists/opt_in_handler'
|
12
|
+
require 'mailgun/messages/batch_message'
|
13
|
+
require 'mailgun/messages/message_builder'
|
14
|
+
require 'mailgun/events/events'
|
15
|
+
require 'mailgun/exceptions/exceptions'
|
16
|
+
require 'mailgun/domains/domains'
|
17
|
+
require 'mailgun/webhooks/webhooks'
|
18
|
+
|
19
|
+
# Module for interacting with the sweet Mailgun API.
|
20
|
+
#
|
21
|
+
# See the Github documentation for full examples.
|
22
|
+
module Mailgun
|
23
|
+
|
24
|
+
class << self
|
25
|
+
attr_accessor :api_key,
|
26
|
+
:api_version,
|
27
|
+
:protocol,
|
28
|
+
:mailgun_host,
|
29
|
+
:test_mode,
|
30
|
+
:domain
|
31
|
+
|
32
|
+
def configure
|
33
|
+
yield self
|
34
|
+
true
|
35
|
+
end
|
36
|
+
alias_method :config, :configure
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'mailgun/exceptions/exceptions'
|
2
|
+
|
3
|
+
module Mailgun
|
4
|
+
|
5
|
+
# Mailgun::Address is a simple interface to the Email Validation API.
|
6
|
+
class Address
|
7
|
+
|
8
|
+
# @param [String] api_key Mailgun API - public key
|
9
|
+
def initialize(api_key = "")
|
10
|
+
if api_key == "" then
|
11
|
+
fail ParameterError.new('Public API key is required for Mailgun::Address.initialize()', nil)
|
12
|
+
end
|
13
|
+
|
14
|
+
@api_key = api_key
|
15
|
+
@client = Mailgun::Client.new(api_key = api_key)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Given an arbitrary address, validates it based on defined checks.
|
19
|
+
#
|
20
|
+
# @param [String] address Email address to validate (max 512 chars.)
|
21
|
+
def validate(address)
|
22
|
+
res = @client.get "address/validate", {:address => address}
|
23
|
+
return res.to_h!
|
24
|
+
end
|
25
|
+
|
26
|
+
# Parses a delimiter separated list of email addresses into two lists:
|
27
|
+
# parsed addresses and unparsable portions. The parsed addresses are a
|
28
|
+
# list of addresses that are syntactically valid (and optionally have
|
29
|
+
# DNS and ESP specific grammar checks) the unparsable list is a list
|
30
|
+
# of characters sequences that the parser was not able to understand.
|
31
|
+
# These often align with invalid email addresses, but not always.
|
32
|
+
# Delimiter characters are comma (,) and semicolon (;).
|
33
|
+
#
|
34
|
+
# @param [Array] addresses Addresses to parse
|
35
|
+
# @param [TrueClass|FalseClass] syntax_only Perform only syntax checks
|
36
|
+
def parse(addresses, syntax_only = true)
|
37
|
+
validate_addrs = addresses.join(";")
|
38
|
+
|
39
|
+
res = @client.get "address/parse", {:addresses => validate_addrs,
|
40
|
+
:syntax_only => syntax_only.to_s}
|
41
|
+
return res.to_h!
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Mailgun
|
2
|
+
|
3
|
+
# Public constants used throughout
|
4
|
+
class Chains
|
5
|
+
|
6
|
+
# maximum campaign ids per message
|
7
|
+
MAX_CAMPAIGN_IDS = 3
|
8
|
+
|
9
|
+
# maximum tags per message
|
10
|
+
MAX_TAGS = 3
|
11
|
+
|
12
|
+
# maximum recipients per message or batch
|
13
|
+
MAX_RECIPIENTS = 1000
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,199 @@
|
|
1
|
+
require 'mailgun/chains'
|
2
|
+
require 'mailgun/suppressions'
|
3
|
+
require 'mailgun/exceptions/exceptions'
|
4
|
+
|
5
|
+
module Mailgun
|
6
|
+
# A Mailgun::Client object is used to communicate with the Mailgun API. It is a
|
7
|
+
# wrapper around RestClient so you don't have to worry about the HTTP aspect
|
8
|
+
# of communicating with our API.
|
9
|
+
#
|
10
|
+
# See the Github documentation for full examples.
|
11
|
+
class Client
|
12
|
+
|
13
|
+
def initialize(api_key = Mailgun.api_key,
|
14
|
+
api_host = 'api.mailgun.net',
|
15
|
+
api_version = 'v3',
|
16
|
+
ssl = true,
|
17
|
+
test_mode = false)
|
18
|
+
|
19
|
+
endpoint = endpoint_generator(api_host, api_version, ssl)
|
20
|
+
@http_client = RestClient::Resource.new(endpoint,
|
21
|
+
user: 'api',
|
22
|
+
password: api_key,
|
23
|
+
user_agent: "mailgun-sdk-ruby/#{Mailgun::VERSION}")
|
24
|
+
@test_mode = test_mode
|
25
|
+
end
|
26
|
+
|
27
|
+
# Enable test mode
|
28
|
+
#
|
29
|
+
# Prevents sending of any messages.
|
30
|
+
def enable_test_mode!
|
31
|
+
@test_mode = true
|
32
|
+
end
|
33
|
+
|
34
|
+
# Disable test mode
|
35
|
+
#
|
36
|
+
# Reverts the test_mode flag and allows the client to send messages.
|
37
|
+
def disable_test_mode!
|
38
|
+
@test_mode = false
|
39
|
+
end
|
40
|
+
|
41
|
+
# Client is in test mode?
|
42
|
+
#
|
43
|
+
# @return [Boolean] Is the client set in test mode?
|
44
|
+
def test_mode?
|
45
|
+
@test_mode
|
46
|
+
end
|
47
|
+
|
48
|
+
# Provides a store of all the emails sent in test mode so you can check them.
|
49
|
+
#
|
50
|
+
# @return [Hash]
|
51
|
+
def self.deliveries
|
52
|
+
@@deliveries ||= []
|
53
|
+
end
|
54
|
+
|
55
|
+
# Simple Message Sending
|
56
|
+
#
|
57
|
+
# @param [String] working_domain This is the domain you wish to send from.
|
58
|
+
# @param [Hash] data This should be a standard Hash
|
59
|
+
# containing required parameters for the requested resource.
|
60
|
+
# @return [Mailgun::Response] A Mailgun::Response object.
|
61
|
+
def send_message(working_domain, data)
|
62
|
+
if test_mode? then
|
63
|
+
Mailgun::Client.deliveries << data
|
64
|
+
return Response.from_hash(
|
65
|
+
{
|
66
|
+
:body => '{"id": "test-mode-mail@localhost", "message": "Queued. Thank you."}',
|
67
|
+
:code => 200,
|
68
|
+
}
|
69
|
+
)
|
70
|
+
end
|
71
|
+
|
72
|
+
case data
|
73
|
+
when Hash
|
74
|
+
# Remove nil values from the data hash
|
75
|
+
# Submitting nils to the API will likely cause an error.
|
76
|
+
# See also: https://github.com/mailgun/mailgun-ruby/issues/32
|
77
|
+
data = data.select { |k, v| v != nil }
|
78
|
+
|
79
|
+
if data.key?(:message)
|
80
|
+
if data[:message].is_a?(String)
|
81
|
+
data[:message] = convert_string_to_file(data[:message])
|
82
|
+
end
|
83
|
+
return post("#{working_domain}/messages.mime", data)
|
84
|
+
end
|
85
|
+
post("#{working_domain}/messages", data)
|
86
|
+
when MessageBuilder
|
87
|
+
post("#{working_domain}/messages", data.message)
|
88
|
+
else
|
89
|
+
fail ParameterError.new('Unknown data type for data parameter.', data)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Generic Mailgun POST Handler
|
94
|
+
#
|
95
|
+
# @param [String] resource_path This is the API resource you wish to interact
|
96
|
+
# with. Be sure to include your domain, where necessary.
|
97
|
+
# @param [Hash] data This should be a standard Hash
|
98
|
+
# containing required parameters for the requested resource.
|
99
|
+
# @param [Hash] headers Additional headers to pass to the resource.
|
100
|
+
# @return [Mailgun::Response] A Mailgun::Response object.
|
101
|
+
def post(resource_path, data, headers = {})
|
102
|
+
response = @http_client[resource_path].post(data, headers)
|
103
|
+
Response.new(response)
|
104
|
+
rescue => err
|
105
|
+
raise communication_error err
|
106
|
+
end
|
107
|
+
|
108
|
+
# Generic Mailgun GET Handler
|
109
|
+
#
|
110
|
+
# @param [String] resource_path This is the API resource you wish to interact
|
111
|
+
# with. Be sure to include your domain, where necessary.
|
112
|
+
# @param [Hash] params This should be a standard Hash
|
113
|
+
# containing required parameters for the requested resource.
|
114
|
+
# @param [String] accept Acceptable Content-Type of the response body.
|
115
|
+
# @return [Mailgun::Response] A Mailgun::Response object.
|
116
|
+
def get(resource_path, params = nil, accept = '*/*')
|
117
|
+
if params
|
118
|
+
response = @http_client[resource_path].get(params: params, accept: accept)
|
119
|
+
else
|
120
|
+
response = @http_client[resource_path].get(accept: accept)
|
121
|
+
end
|
122
|
+
Response.new(response)
|
123
|
+
rescue => err
|
124
|
+
raise communication_error err
|
125
|
+
end
|
126
|
+
|
127
|
+
# Generic Mailgun PUT Handler
|
128
|
+
#
|
129
|
+
# @param [String] resource_path This is the API resource you wish to interact
|
130
|
+
# with. Be sure to include your domain, where necessary.
|
131
|
+
# @param [Hash] data This should be a standard Hash
|
132
|
+
# containing required parameters for the requested resource.
|
133
|
+
# @return [Mailgun::Response] A Mailgun::Response object.
|
134
|
+
def put(resource_path, data)
|
135
|
+
response = @http_client[resource_path].put(data)
|
136
|
+
Response.new(response)
|
137
|
+
rescue => err
|
138
|
+
raise communication_error err
|
139
|
+
end
|
140
|
+
|
141
|
+
# Generic Mailgun DELETE Handler
|
142
|
+
#
|
143
|
+
# @param [String] resource_path This is the API resource you wish to interact
|
144
|
+
# with. Be sure to include your domain, where necessary.
|
145
|
+
# @return [Mailgun::Response] A Mailgun::Response object.
|
146
|
+
def delete(resource_path)
|
147
|
+
response = @http_client[resource_path].delete
|
148
|
+
Response.new(response)
|
149
|
+
rescue => err
|
150
|
+
raise communication_error err
|
151
|
+
end
|
152
|
+
|
153
|
+
# Constructs a Suppressions client for the given domain.
|
154
|
+
#
|
155
|
+
# @param [String] domain Domain which suppressions requests will be made for
|
156
|
+
# @return [Mailgun::Suppressions]
|
157
|
+
def suppressions(domain)
|
158
|
+
Suppressions.new(self, domain)
|
159
|
+
end
|
160
|
+
|
161
|
+
private
|
162
|
+
|
163
|
+
# Converts MIME string to file for easy uploading to API
|
164
|
+
#
|
165
|
+
# @param [String] string MIME string to post to API
|
166
|
+
# @return [File] File object
|
167
|
+
def convert_string_to_file(string)
|
168
|
+
file = Tempfile.new('MG_TMP_MIME')
|
169
|
+
file.write(string)
|
170
|
+
file.rewind
|
171
|
+
file
|
172
|
+
end
|
173
|
+
|
174
|
+
# Generates the endpoint URL to for the API. Allows overriding
|
175
|
+
# API endpoint, API versions, and toggling SSL.
|
176
|
+
#
|
177
|
+
# @param [String] api_host URL endpoint the library will hit
|
178
|
+
# @param [String] api_version The version of the API to hit
|
179
|
+
# @param [Boolean] ssl True, SSL. False, No SSL.
|
180
|
+
# @return [string] concatenated URL string
|
181
|
+
def endpoint_generator(api_host, api_version, ssl)
|
182
|
+
ssl ? scheme = 'https' : scheme = 'http'
|
183
|
+
if api_version
|
184
|
+
"#{scheme}://#{api_host}/#{api_version}"
|
185
|
+
else
|
186
|
+
"#{scheme}://#{api_host}"
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
# Raises CommunicationError and stores response in it if present
|
191
|
+
#
|
192
|
+
# @param [StandardException] e upstream exception object
|
193
|
+
def communication_error(e)
|
194
|
+
return CommunicationError.new(e.message, e.response) if e.respond_to? :response
|
195
|
+
CommunicationError.new(e.message)
|
196
|
+
end
|
197
|
+
|
198
|
+
end
|
199
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'mailgun/exceptions/exceptions'
|
2
|
+
|
3
|
+
module Mailgun
|
4
|
+
|
5
|
+
# A Mailgun::Domains object is a simple CRUD interface to Mailgun Domains.
|
6
|
+
# Uses Mailgun
|
7
|
+
class Domains
|
8
|
+
|
9
|
+
# Public: creates a new Mailgun::Domains instance.
|
10
|
+
# Defaults to Mailgun::Client
|
11
|
+
def initialize(client = Mailgun::Client.new)
|
12
|
+
@client = client
|
13
|
+
end
|
14
|
+
|
15
|
+
# Public: Get Domains
|
16
|
+
#
|
17
|
+
# limit - [Integer] Maximum number of records to return. (100 by default)
|
18
|
+
# skip - [Integer] Number of records to skip. (0 by default)
|
19
|
+
#
|
20
|
+
# Returns [Array] A list of domains (hash)
|
21
|
+
def list(options = {})
|
22
|
+
@client.get('domains', options).to_h['items']
|
23
|
+
end
|
24
|
+
alias_method :get_domains, :list
|
25
|
+
|
26
|
+
# Public: Get domain information
|
27
|
+
#
|
28
|
+
# domain - [String] Domain name to lookup
|
29
|
+
#
|
30
|
+
# Returns [Hash] Information on the requested domains.
|
31
|
+
def info(domain)
|
32
|
+
fail(ParameterError, 'No domain given to find on Mailgun', caller) unless domain
|
33
|
+
@client.get("domains/#{domain}").to_h!
|
34
|
+
end
|
35
|
+
alias_method :get, :info
|
36
|
+
alias_method :get_domain, :info
|
37
|
+
|
38
|
+
# Public: Verify domain, update domain records
|
39
|
+
# Unknown status - this is not in the current Mailgun API
|
40
|
+
# Do no rely on this being available in future releases.
|
41
|
+
#
|
42
|
+
# domain - [String] Domain name
|
43
|
+
#
|
44
|
+
# Returns [Hash] Information on the updated/verified domains
|
45
|
+
def verify(domain)
|
46
|
+
fail(ParameterError, 'No domain given to verify on Mailgun', caller) unless domain
|
47
|
+
@client.put("domains/#{domain}/verify", nil).to_h!
|
48
|
+
end
|
49
|
+
alias_method :verify_domain, :verify
|
50
|
+
|
51
|
+
# Public: Add domain
|
52
|
+
#
|
53
|
+
# domain - [String] Name of the domain (ex. domain.com)
|
54
|
+
# options - [Hash] of
|
55
|
+
# smtp_password - [String] Password for SMTP authentication
|
56
|
+
# spam_action - [String] disabled or tag
|
57
|
+
# Disable, no spam filtering will occur for inbound messages.
|
58
|
+
# Tag, messages will be tagged wtih a spam header. See Spam Filter.
|
59
|
+
# wildcard - [Boolean] true or false Determines whether the domain will accept email for sub-domains.
|
60
|
+
#
|
61
|
+
# Returns [Hash] of created domain
|
62
|
+
def create(domain, options = {})
|
63
|
+
fail(ParameterError, 'No domain given to add on Mailgun', caller) unless domain
|
64
|
+
options = { smtp_password: nil, spam_action: 'disabled', wildcard: false }.merge(options)
|
65
|
+
options[:name] = domain
|
66
|
+
@client.post('domains', options).to_h
|
67
|
+
end
|
68
|
+
alias_method :add, :create
|
69
|
+
alias_method :add_domain, :create
|
70
|
+
|
71
|
+
# Public: Delete Domain
|
72
|
+
#
|
73
|
+
# domain - [String] domain name to delete (ex. domain.com)
|
74
|
+
#
|
75
|
+
# Returns [Boolean] if successful or not
|
76
|
+
def remove(domain)
|
77
|
+
fail(ParameterError, 'No domain given to remove on Mailgun', caller) unless domain
|
78
|
+
@client.delete("domains/#{domain}").to_h['message'] == 'Domain has been deleted'
|
79
|
+
end
|
80
|
+
alias_method :delete, :remove
|
81
|
+
alias_method :delete_domain, :remove
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|