mailjet 1.0.3 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b6f0712c222da5b6148645338771953d6885fb65
4
- data.tar.gz: 238b87870601f1f7811d25fc8758a681d6f0e194
3
+ metadata.gz: bce510af0e64da9901c04173e262e897483fa7c8
4
+ data.tar.gz: e8824a8d720e46b0b37d5fdd654b2483a397eb43
5
5
  SHA512:
6
- metadata.gz: e8e4431ff38ec080662933322d3a4896dad4ccebb17fe0cfb7dd626c0dfcafef625c39710586f8e9bdf9c4bd6f9c021fc7b56de7f37c90a099bc6a1f653071d2
7
- data.tar.gz: 10ab0c2ab2f02c868d866a1496aaa856c77b60a373de65e43d260ea0c847e6cda08667d89e308fdd9c3a4c33917ef7d9367bd856c7bbcd9b2da2009d2979c7f9
6
+ metadata.gz: d34de055592b05c8b29a801972b6e9b157860650102e441ff13782cbc95ada82ea25b635773075453cd37cd268dd2f184773da37c87b7abdfb71a3661648b60b
7
+ data.tar.gz: 471a5630d3258ebc1c7a245dcc6c86cacc6ddacdd8413e44fe19a4742d01029471e2ff81a9aa486cc359dc55aae853cc6ed66aa06716e493f9c7726d2e9daad6
data/README.md CHANGED
@@ -92,7 +92,7 @@ end
92
92
  ```
93
93
 
94
94
 
95
- `default_from` is optional if you send emails with :mailjet's SMTP (below)
95
+ `default_from` is optional if you send emails with `:mailjet`'s SMTP (below)
96
96
 
97
97
  ### Send emails with ActionMailer
98
98
  A quick walkthrough to using Action Mailer from the documentation [HERE](http://guides.rubyonrails.org/action_mailer_basics.html)
@@ -152,12 +152,12 @@ class UserMailer < ApplicationMailer
152
152
  end
153
153
  end
154
154
  ```
155
- For sending email, you can call the method with a variety of MessageDelivery priorities:
155
+ For sending email, you can call the method with a variety of `MessageDelivery` priorities:
156
156
  ```ruby
157
157
  #In this example, we are sending immediately
158
158
  UserMailer.welcome_email.deliver_now!
159
159
  ```
160
- For more information on ActionMailer::MessageDeilvery, see the documentation [HERE](http://edgeapi.rubyonrails.org/classes/ActionMailer/MessageDelivery.html)
160
+ For more information on `ActionMailer::MessageDeilvery`, see the documentation [HERE](http://edgeapi.rubyonrails.org/classes/ActionMailer/MessageDelivery.html)
161
161
 
162
162
 
163
163
 
@@ -239,16 +239,58 @@ You can refine queries using [API Filters][apidoc-recipient]`*` as well as the f
239
239
  => #<Mailjet::Listrecipient>
240
240
  ```
241
241
 
242
+ ### Action Endpoints
243
+
244
+ Some APIs allow the use of action endpoints:
245
+ * [/newsletter](http://dev.mailjet.com/email-api/v3/newsletter/)
246
+ * [/contact](http://dev.mailjet.com/email-api/v3/contact/)
247
+ * [/contactslist](http://dev.mailjet.com/email-api/v3/contactslist/)
248
+
249
+ To use them in this wrapper, the API endpoint is in the beginning, followed by an underscore, followed by the action you are performing.
250
+
251
+ For example, the following performs `managemanycontacts` on the `contactslist` endpoint:
252
+ where 4 is the `listid` and 3025 is the `jobid`
253
+ ``` ruby
254
+ Mailjet::Contactslist_managemanycontacts.find(4, 3025)
255
+ ```
256
+
257
+ Each action endpoint requires the ID of the object you are changing. To 'create' (POST), pass the ID as a variable like such:
258
+ ``` ruby
259
+ Mailjet::Contactslist_managecontact.create(id: 1, action: "unsub", email: "example@me.com", name: "tyler")
260
+ ```
261
+
262
+ To 'find' (GET), pass the ID as a variable like such:
263
+ ``` ruby
264
+ Mailjet::Contact_getcontactslists.find(1)
265
+ # will return all the lists containing the contact with id 1
266
+ ```
267
+
268
+ Managing large amount of contacts asyncronously, uploading many contacts and returns a `job_id`
269
+ ``` ruby
270
+ managecontactslists = Mailjet::Contact_managemanycontacts.create(contacts_lists: [{:ListID => 234, :action => "addnoforce"}])
271
+ ```
272
+
273
+ To 'find' (GET) with also a job ID, pass two parameters - first, the ID of the object; second, the job ID:
274
+ ``` ruby
275
+ Mailjet::Contactslist_managemanycontacts.find(1, 34062)
276
+ # where 1 is the contactlist id and 34062 is the job id
277
+ ```
278
+
279
+ Some actions are not attached to a specific resource, like /contact/managemanycontacts. In these cases when there is a job ID but no ID for the object when 'find'ing, pass `nil` as the first parameter:
280
+ ``` ruby
281
+ Mailjet::Contact_managemanycontacts.find(nil, 34062)
282
+ ```
283
+
242
284
  ## Send emails through API
243
285
 
244
286
  In order to send emails through the API, you just have to `create` a new `MessageDelivery` resource.
245
287
 
246
- ```
288
+ ``` ruby
247
289
  Mailjet::MessageDelivery.create(from: "me@example.com", to: "you@example.com", subject: "Mailjet is awesome", text: "Yes, it is!")
248
290
  ```
249
291
 
250
292
  If you want to send it to multiple recipients, just use an array:
251
- ```
293
+ ``` ruby
252
294
  Mailjet::MessageDelivery.create(from: "me@example.com", to: ["you@example.com", "someone-else@example.com"], subject: "Mailjet is awesome", text: "Yes, it is!")
253
295
  ```
254
296
 
@@ -262,6 +304,8 @@ In these modifiers, there is now the ability to add a Mailjet custom-id or Mailj
262
304
 
263
305
  For more information on custom properties and available params, see the [official doc][send-api-doc].
264
306
 
307
+ ##
308
+
265
309
  ## Track email delivery
266
310
 
267
311
  You can setup your Rack application in order to receive feedback on emails you sent (clicks, etc.)
@@ -7,6 +7,8 @@ module Mailjet
7
7
  mattr_accessor :end_point
8
8
  mattr_accessor :default_from
9
9
 
10
+ # @@end_point = 'https://api.preprod.mailjet.com'
10
11
  @@end_point = 'https://api.mailjet.com'
12
+
11
13
  end
12
14
  end
@@ -1,6 +1,7 @@
1
1
  require 'rest_client'
2
2
  require 'mailjet/gem_extensions/rest_client'
3
3
  require 'active_support/core_ext/module/delegation'
4
+ require 'json'
4
5
 
5
6
  module Mailjet
6
7
  class Connection
@@ -11,7 +12,12 @@ module Mailjet
11
12
  delegate :options, :concat_urls, :url, to: :adapter
12
13
 
13
14
  def [](suburl, &new_block)
14
- self.class.new(concat_urls(url, suburl), options[:user], options[:password], options)
15
+ broken_url = url.split("/")
16
+ if broken_url.include?("contactslist") && broken_url.include?("managemanycontacts") && broken_url.last.to_i > 0
17
+ self.class.new(url, options[:user], options[:password], options)
18
+ else
19
+ self.class.new(concat_urls(url, suburl), options[:user], options[:password], options)
20
+ end
15
21
  end
16
22
 
17
23
  def initialize(end_point, api_key, secret_key, options = {})
@@ -52,16 +58,16 @@ module Mailjet
52
58
  private
53
59
 
54
60
  def handle_api_call(method, additional_headers = {}, payload = {}, &block)
55
- format_payload = (additional_headers[:content_type] == :json) ? payload.to_json : payload
61
+ formatted_payload = (additional_headers[:content_type] == :json) ? payload.to_json : payload
56
62
  raise Mailjet::MethodNotAllowed unless method_allowed(method)
57
63
 
58
64
  if [:get, :delete].include?(method)
59
65
  @adapter.send(method, additional_headers, &block)
60
66
  else
61
- @adapter.send(method, format_payload, additional_headers, &block)
67
+ @adapter.send(method, formatted_payload, additional_headers, &block)
62
68
  end
63
69
  rescue RestClient::Exception => e
64
- handle_exeception(e, additional_headers, payload)
70
+ handle_exception(e, additional_headers, formatted_payload)
65
71
  end
66
72
 
67
73
  def method_allowed(method)
@@ -69,9 +75,10 @@ module Mailjet
69
75
  public_operations.include?(method) && (method == :get || !read_only?)
70
76
  end
71
77
 
72
- def handle_exeception(e, additional_headers, payload = {})
78
+ def handle_exception(e, additional_headers, payload = {})
73
79
  params = additional_headers[:params] || {}
74
- params = params.merge(payload)
80
+ formatted_payload = (additional_headers[:content_type] == :json) ? JSON.parse(payload) : payload
81
+ params = params.merge(formatted_payload)
75
82
 
76
83
  raise Mailjet::ApiError.new(e.http_code, e.http_body, @adapter, @adapter.url, params)
77
84
  end
@@ -28,24 +28,24 @@ class Mailjet::APIMailer
28
28
  def deliver!(mail)
29
29
  if mail.multipart?
30
30
  content = {
31
- text: mail.text_part.try(:decoded),
32
- html: mail.html_part.try(:decoded),
33
- attachment: mail.attachments.select{ |a| !a.inline? }.try(:decoded),
34
- inlineattachment: mail.attachments.select{ |a| !a.inline? }.try(:decoded)
31
+ :text => mail.text_part.try(:decoded),
32
+ :html => mail.html_part.try(:decoded),
33
+ :attachment => mail.attachments.select{ |a| !a.inline? }.try(:decoded),
34
+ :inlineattachment => mail.attachments.select{ |a| !a.inline? }.try(:decoded)
35
35
  }
36
36
  else
37
- content = (mail.mime_type == "text/html") ? {html: mail.body.decoded} : {text: mail.body.decoded}
37
+ content = (mail.mime_type == "text/html") ? {:html => mail.body.decoded} : {:text => mail.body.decoded}
38
38
  end
39
39
 
40
40
  payload = {
41
- from: mail.from || Mailjet.config.default_from,
42
- sender: mail.sender,
43
- to: mail.to,
44
- cc: mail.cc,
45
- bcc: mail.bcc,
46
- subject: mail.subject,
47
- 'mj-customid': mail['X-MJ-CustomID'] && mail['X-MJ-CustomID'].value,
48
- 'mj-eventpayload': mail['X-MJ-EventPayload'] && mail['X-MJ-EventPayload'].value
41
+ :from => mail.from || Mailjet.config.default_from,
42
+ :sender => mail.sender,
43
+ :to => mail.to,
44
+ :cc => mail.cc,
45
+ :bcc => mail.bcc,
46
+ :subject => mail.subject,
47
+ :'mj-customid' => mail['X-MJ-CustomID'] && mail['X-MJ-CustomID'].value,
48
+ :'mj-eventpayload' => mail['X-MJ-EventPayload'] && mail['X-MJ-EventPayload'].value
49
49
  }.merge(content).merge(@delivery_method_options)
50
50
 
51
51
  Mailjet::MessageDelivery.create(payload)
@@ -38,10 +38,11 @@ module Mailjet
38
38
 
39
39
  def self.default_headers
40
40
  if @non_json_urls.include?(self.resource_path)#don't use JSON if Send API
41
- { accept: :json, accept_encoding: :deflate }
41
+ default_headers = { accept: :json, accept_encoding: :deflate }
42
42
  else
43
- { accept: :json, accept_encoding: :deflate, content_type: :json } #use JSON if *not* Send API
43
+ default_headers = { accept: :json, accept_encoding: :deflate, content_type: :json } #use JSON if *not* Send API
44
44
  end
45
+ return default_headers.merge(user_agent: "mailjet-api-v3-ruby/#{Gem.loaded_specs["mailjet"].version}")
45
46
  end
46
47
  end
47
48
 
@@ -62,9 +63,9 @@ module Mailjet
62
63
  response_hash['Total']
63
64
  end
64
65
 
65
- def find(id)
66
+ def find(id, job_id = nil)
66
67
  # if action method, ammend url to appropriate id
67
- self.resource_path = create_action_resource_path(id) if self.action
68
+ self.resource_path = create_action_resource_path(id, job_id) if self.action
68
69
  #
69
70
  attributes = parse_api_json(connection[id].get(default_headers)).first
70
71
  instanciate_from_api(attributes)
@@ -108,10 +109,15 @@ module Mailjet
108
109
  response_data_array.map{ |response_data| underscore_keys(response_data) }
109
110
  end
110
111
 
111
- def create_action_resource_path(id)
112
+ def create_action_resource_path(id, job_id = nil)
112
113
  url_elements = self.resource_path.split("/")
113
- url_elements[3] = id.to_s
114
- return url_elements.join("/")
114
+ url_elements.delete_at(url_elements.length-1) if url_elements.last.to_i > 0 #if there is a trailing number for the job id from last call, delete it
115
+ if self.action != "managemanycontacts" || (self.action == "managemanycontacts" && url_elements[2] == "contactslist")
116
+ url_elements[3] = id.to_s
117
+ end
118
+ url_elements << job_id.to_s if job_id #if job_id exists, ammend it to end of the URI
119
+ url = url_elements.join("/")
120
+ return url
115
121
  end
116
122
 
117
123
 
@@ -0,0 +1,12 @@
1
+ require 'mailjet/resource'
2
+
3
+ module Mailjet
4
+ class Contact_getcontactslists
5
+ include Mailjet::Resource
6
+ self.action = "getcontactslists"
7
+ self.resource_path = "v3/REST/contact/id/#{self.action}"
8
+ self.public_operations = [:get]
9
+ self.filters = []
10
+ self.properties = []
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'mailjet/resource'
2
+
3
+ module Mailjet
4
+ class Contact_managecontactslists
5
+ include Mailjet::Resource
6
+ self.action = "managecontactslists"
7
+ self.resource_path = "v3/REST/contact/id/#{self.action}"
8
+ self.public_operations = [:post]
9
+ self.filters = []
10
+ self.properties = [:contacts_lists, 'ListID', :list_id, :action] #need 'ListID' and :action in a subpacket
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ require 'mailjet/resource'
2
+
3
+ module Mailjet
4
+ class Contact_managemanycontacts
5
+ include Mailjet::Resource
6
+ self.action = "managemanycontacts"
7
+ #might be different
8
+ self.resource_path = "v3/REST/contact/#{self.action}"
9
+ self.public_operations = [:post, :get] #GET is for job_id ammended at the end
10
+ self.filters = []
11
+ self.properties = [:contacts_lists, :contacts, :list_id, 'ListID', :action, :email, :name, :properties] #need 'ListID' and :action in a subpacket
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ require 'mailjet/resource'
2
+
3
+ module Mailjet
4
+ class Contactslist_managecontact
5
+ include Mailjet::Resource
6
+ self.action = "managecontact"
7
+ self.resource_path = "v3/REST/contactslist/id/#{self.action}"
8
+ self.public_operations = [:post]
9
+ self.filters = []
10
+ self.properties = [:email, :name, :action, :properties]
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'mailjet/resource'
2
+
3
+ module Mailjet
4
+ class Contactslist_managemanycontacts
5
+ include Mailjet::Resource
6
+ self.action = "managemanycontacts"
7
+ self.resource_path = "v3/REST/contactslist/id/#{self.action}"
8
+ self.public_operations = [:post, :get] #GET is for when job_id is there
9
+ self.filters = []
10
+ self.properties = [:action, :contacts, :email, :name, :properties]
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'mailjet/resource'
2
+
3
+ module Mailjet
4
+ class DNS
5
+ include Mailjet::Resource
6
+ self.resource_path = 'v3/REST/dns'
7
+ self.public_operations = [:get]
8
+ self.filters = []
9
+ self.properties = [:id, :isCheckInProgress, :DKIMStatus, :DKIMValue, :DKIMName, :format, :lastCheckedAt, :SPFStatus, :SPFValue, :ownershipToken]
10
+
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ require 'mailjet/resource'
2
+
3
+ module Mailjet
4
+ class DNS_check
5
+ include Mailjet::Resource
6
+ self.action = "check"
7
+ self.resource_path = "v3/REST/dns/id/#{self.action}"
8
+ self.public_operations = [:post]
9
+ self.filters = []
10
+ self.properties = []
11
+
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module Mailjet
2
- VERSION = "1.0.3"
2
+ VERSION = "1.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailjet
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Nappy
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-06-19 00:00:00.000000000 Z
14
+ date: 2015-08-20 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport
@@ -300,14 +300,21 @@ files:
300
300
  - lib/mailjet/resources/campaignstatistics.rb
301
301
  - lib/mailjet/resources/clickstatistics.rb
302
302
  - lib/mailjet/resources/contact.rb
303
+ - lib/mailjet/resources/contact_getcontactslists.rb
304
+ - lib/mailjet/resources/contact_managecontactslists.rb
305
+ - lib/mailjet/resources/contact_managemanycontacts.rb
303
306
  - lib/mailjet/resources/contactdata.rb
304
307
  - lib/mailjet/resources/contactfilter.rb
305
308
  - lib/mailjet/resources/contacthistorydata.rb
306
309
  - lib/mailjet/resources/contactmetadata.rb
307
310
  - lib/mailjet/resources/contactslist.rb
311
+ - lib/mailjet/resources/contactslist_managecontact.rb
312
+ - lib/mailjet/resources/contactslist_managemanycontacts.rb
308
313
  - lib/mailjet/resources/contactslistsignup.rb
309
314
  - lib/mailjet/resources/contactstatistics.rb
310
315
  - lib/mailjet/resources/csvimport.rb
316
+ - lib/mailjet/resources/dns.rb
317
+ - lib/mailjet/resources/dns_check.rb
311
318
  - lib/mailjet/resources/domainstatistics.rb
312
319
  - lib/mailjet/resources/eventcallbackurl.rb
313
320
  - lib/mailjet/resources/geostatistics.rb