mailjet 1.3.8 → 1.4.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 24a1d0ef70fc633c438a865bea86925045192b5e
4
- data.tar.gz: bf2f874c4ad803cf167cbbdfc38ad23c48d595e4
3
+ metadata.gz: 62dc8ec008afcbcb8dbc6fa2f114c9137b346770
4
+ data.tar.gz: 25ed9aef33563a4235e8e3e70136d2984c46e856
5
5
  SHA512:
6
- metadata.gz: 10f4dfa0922c73c3f39e867d9fcd84d6f7d55d15b1691acfbf5ee7a2d68939069d58a058108ae3e8fd8664a11317a35a6024766d54f18932171da3c4a2bf2afd
7
- data.tar.gz: 2271e8361d9fd718565ce78d350ee2fcf70a5687805894f7700056db6ac51ae26624ec8c1015a87a40a54f4362cf76ce8f904016184d9a4e907e819469188dbd
6
+ metadata.gz: 9d916e5f2c30e29b5e7a90dd9ecf24d7212a87543eee25dea1705f0c6332492e5de08e5a92edf2bf7a9418eaaaef6ceff995aa267b997f359717d0aa5bb7b9dc
7
+ data.tar.gz: 440fe3b06ec6792f7897d3d7949e0ef0a759e83de238db62a856a20e941a5cd539e3f4184056ad60b7639bbac1c38326f8278d7ce0575ef0551ce79ccede7689
data/README.md CHANGED
@@ -49,7 +49,7 @@ Rails ActionMailer integration designed for Rails 3.X and 4.X
49
49
 
50
50
  IMPORTANT: Mailjet gem switched to API v3, the new API provided by Mailjet. For the wrapper for API v1, check the [v1 branch][v1-branch].
51
51
 
52
- Every code examples can be find on the [Mailjet Documentation][mailjet_doc]
52
+ Every code example can be found in the [Mailjet Documentation][mailjet_doc]
53
53
 
54
54
  (Please refer to the [Mailjet Documentation Repository][api_doc] to contribute to the documentation examples)
55
55
 
@@ -124,24 +124,47 @@ p test.attributes['Sent']
124
124
  ```
125
125
 
126
126
  ### Send emails with ActionMailer
127
- A quick walkthrough to using Action Mailer from the documentation [HERE](http://guides.rubyonrails.org/action_mailer_basics.html)
128
-
129
- First set your delivery method:
127
+ A quick walkthrough to use Rails Action Mailer [here](http://guides.rubyonrails.org/action_mailer_basics.html)
130
128
 
129
+ First set your delivery method (here Mailjet SMTP relay servers):
131
130
  ```ruby
132
131
  # application.rb or config/environments specific settings, which take precedence
133
132
  config.action_mailer.delivery_method = :mailjet
134
133
 
135
134
  ```
136
135
 
137
- Or if you prefer sending messages through mailjet REST API:
138
-
136
+ Or if you prefer sending messages through [Mailjet Send API](http://dev.mailjet.com/guides/#send-transactional-email):
139
137
  ```ruby
140
138
  # application.rb
141
139
  config.action_mailer.delivery_method = :mailjet_api
142
140
  ```
143
141
 
144
- You can use mailjet specific options with `delivery_method_options` as detailed in the official [ActionMailer doc][actionmailerdoc]
142
+ You can use mailjet specific options with `delivery_method_options` as detailed in the official [ActionMailer doc][http://guides.rubyonrails.org/action_mailer_basics.html#sending-emails-with-dynamic-delivery-options].
143
+
144
+ Supported options are:
145
+ ```ruby
146
+ * :'mj-prio'
147
+ * :'mj-campaign'
148
+ * :'mj-deduplicatecampaign'
149
+ * :'mj-templatelanguage'
150
+ * :'mj-templateerrorreporting'
151
+ * :'mj-templateerrordeliver'
152
+ * :'mj-templateid'
153
+ * :'mj-trackopen'
154
+ * :'mj-trackclick'
155
+ * :'mj-customid'
156
+ * :'mj-eventpayload'
157
+ * :'vars'
158
+ * :'headers'
159
+ * :'recipients'
160
+ ```
161
+
162
+ Otherwise, you can pass the custom Mailjet SMTP headers directly:
163
+ ```ruby
164
+ headers['X-MJ-CustomID'] = 'rubyPR_Test_ID_1469790724'
165
+ headers['X-MJ-EventPayload'] = 'rubyPR_Test_Payload'
166
+ headers['X-MJ-TemplateLanguage'] = '1'
167
+ ```
145
168
 
146
169
  Creating a Mailer:
147
170
  ```ruby
@@ -167,28 +190,40 @@ class UserMailer < ApplicationMailer
167
190
  subject: "This is a nice welcome email")
168
191
  end
169
192
  end
193
+ ```
194
+
195
+ Next, create your templates in the views folder:
196
+ ```ruby
197
+ #app/views/user_mailer/welcome_email.html.erb
198
+ Hello world in HTML!
170
199
 
200
+ #app/views/user_mailer/welcome_email.text.erb
201
+ Hello world in plain text!
171
202
  ```
172
- There's also the ability to set [Mailjet custom headers](https://dev.mailjet.com/guides/send-api-guide/)
203
+
204
+ There's also the ability to set [Mailjet custom headers](http://dev.mailjet.com/guides/#send-api-json-properties)
173
205
  ```ruby
174
206
  #app/mailers/user_mailer.rb
175
207
  class UserMailer < ApplicationMailer
176
208
  def welcome_email()
177
- mail.header['X-MJ-CustomID'] = 'custom value'
178
- mail.header['X-MJ-EventPayload'] = 'custom payload'
179
- mail(from: "me@mailjet.com", to: "you@mailjet.com",
180
- subject: "This is a nice welcome email")
209
+ headers['X-MJ-CustomID'] = 'custom value'
210
+ headers['X-MJ-EventPayload'] = 'custom payload'
211
+
212
+ mail(
213
+ from: "me@mailjet.com",
214
+ to: "you@mailjet.com",
215
+ subject: "This is a nice welcome email"
216
+ )
181
217
  end
182
218
  end
183
219
  ```
184
220
  For sending email, you can call the method with a variety of `MessageDelivery` priorities:
185
221
  ```ruby
186
- #In this example, we are sending immediately
222
+ # In this example, we are sending the email immediately
187
223
  UserMailer.welcome_email.deliver_now!
188
224
  ```
189
- For more information on `ActionMailer::MessageDeilvery`, see the documentation [HERE](http://edgeapi.rubyonrails.org/classes/ActionMailer/MessageDelivery.html)
190
-
191
225
 
226
+ For more information on `ActionMailer::MessageDeilvery`, see the documentation [HERE](http://edgeapi.rubyonrails.org/classes/ActionMailer/MessageDelivery.html)
192
227
 
193
228
  ## Manage your campaigns
194
229
 
@@ -21,17 +21,17 @@ module Mailjet
21
21
  end
22
22
 
23
23
  def initialize(end_point, api_key, secret_key, options = {})
24
- ##charles proxy
24
+ # #charles proxy
25
25
  # RestClient.proxy = "http://127.0.0.1:8888"
26
- ##
27
- ##Output for debugging
26
+ # #
27
+ # #Output for debugging
28
28
  # RestClient.log =
29
29
  # Object.new.tap do |proxy|
30
30
  # def proxy.<<(message)
31
31
  # Rails.logger.info message
32
32
  # end
33
33
  # end
34
- ##
34
+ # #
35
35
  adapter_class = options[:adapter_class] || RestClient::Resource
36
36
  self.public_operations = options[:public_operations] || []
37
37
  self.read_only = options[:read_only]
@@ -1,55 +1,110 @@
1
1
  require 'action_mailer'
2
2
  require 'mail'
3
+ require 'base64'
4
+ require 'json'
3
5
 
6
+ # Mailjet::Mailer enables to send a Mail::Message via Mailjet SMTP relay servers
7
+ # User is the API key, and password the API secret
4
8
  class Mailjet::Mailer < ::Mail::SMTP
5
9
  def initialize(options = {})
6
- ActionMailer::Base.default(:from => Mailjet.config.default_from) if Mailjet.config.default_from.present?
10
+ ActionMailer::Base.default(from: Mailjet.config.default_from) if Mailjet.config.default_from.present?
7
11
  super({
8
- :address => "in-v3.mailjet.com",
9
- :port => 587,
10
- :authentication => 'plain',
11
- :user_name => Mailjet.config.api_key,
12
- :password => Mailjet.config.secret_key,
13
- :enable_starttls_auto => true
12
+ address: 'in-v3.mailjet.com',
13
+ port: 587,
14
+ authentication: 'plain',
15
+ user_name: Mailjet.config.api_key,
16
+ password: Mailjet.config.secret_key,
17
+ enable_starttls_auto: true
14
18
  }.merge(options))
15
19
  end
16
20
  end
17
21
 
18
22
  ActionMailer::Base.add_delivery_method :mailjet, Mailjet::Mailer
19
23
 
20
-
21
-
24
+ # Mailjet::APIMailer maps a Mail::Message coming from ActionMailer
25
+ # To Mailjet Send API (see full documentation here dev.mailjet.com/guides/#send-transactional-email)
26
+ # Mailjet sends API expects a JSON payload as the input.
27
+ # The deliver methods maps the Mail::Message attributes to the MailjetSend API JSON expected structure
22
28
  class Mailjet::APIMailer
23
29
  def initialize(options = {})
24
- ActionMailer::Base.default(:from => Mailjet.config.default_from) if Mailjet.config.default_from.present?
25
- @delivery_method_options = options.slice(:'mj-prio', :'mj-campaign', :'mj-deduplicatecampaign', :'mj-trackopen', :'mj-trackclick', :'mj-customid', :'mj-eventpayload', :'header')
30
+ @delivery_method_options = options.slice(
31
+ :recipients, :'mj-prio', :'mj-campaign', :'mj-deduplicatecampaign',
32
+ :'mj-templatelanguage', :'mj-templateerrorreporting', :'mj-templateerrordeliver', :'mj-templateid',
33
+ :'mj-trackopen', :'mj-trackclick',
34
+ :'mj-customid', :'mj-eventpayload', :vars, :headers
35
+ )
26
36
  end
27
37
 
28
38
  def deliver!(mail)
29
- if mail.multipart?
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)
35
- }
36
- else
37
- content = (mail.mime_type == "text/html") ? {:html => mail.body.decoded} : {:text => mail.body.decoded}
39
+ content = {}
40
+
41
+ if mail.text_part
42
+ content[:text_part] = mail.text_part.try(:decoded)
43
+ content[:text] = mail.text_part.try(:decoded)
44
+ end
45
+
46
+ if mail.html_part
47
+ content[:html_part] = mail.html_part.try(:decoded)
48
+ content[:html] = mail.html_part.try(:decoded)
49
+ end
50
+
51
+ # Formatting attachments (inline + regular)
52
+ unless mail.attachments.empty?
53
+ content[:attachments] = []
54
+ content[:inline_attachments] = []
55
+
56
+ mail.attachments.each do |attachment|
57
+ mailjet_attachment = {
58
+ 'Content-Type' => attachment.content_type.split(';')[0],
59
+ 'Filename' => attachment.filename,
60
+ 'content' => Base64.encode64(attachment.body.decoded)
61
+ }
62
+
63
+ if attachment.inline?
64
+ content[:inline_attachments].push(mailjet_attachment)
65
+ else
66
+ content[:attachments].push(mailjet_attachment)
67
+ end
68
+ end
38
69
  end
39
70
 
71
+ if mail.header && !mail.header.fields.empty?
72
+ content[:headers] = {}
73
+ mail.header.fields.each do |header|
74
+ if header.name.start_with?('X-MJ') || header.name.start_with?('X-Mailjet')
75
+ content[:headers][header.name] = header.value
76
+ end
77
+ end
78
+ end
79
+
80
+ # Reply-To is not a property in Mailjet Send API
81
+ # Passing it as an header
82
+ content[:headers]['Reply-To'] = mail.reply_to.join(', ') if mail.reply_to
83
+
84
+ # Mailjet Send API does not support full from. Splitting the from field into two: name and email address
85
+ if Mailjet.config.default_from.present?
86
+ # from_address = Mail::AddressList.new(Mailjet.config.default_from).addresses[0]
87
+ mail[:from] = Mailjet.config.default_from
88
+ end
89
+
90
+ base_from = { from_name: mail[:from].display_names.first,
91
+ from_email: mail[:from].addresses.first }
92
+
40
93
  payload = {
41
- :from => mail.from || Mailjet.config.default_from,
42
- :sender => mail.sender,
43
- :to => mail.to,
44
- :reply_to => mail.reply_to,
45
- :cc => mail.cc,
46
- :bcc => mail.bcc,
47
- :subject => mail.subject,
48
- :'mj-customid' => mail['X-MJ-CustomID'] && mail['X-MJ-CustomID'].value,
49
- :'mj-eventpayload' => mail['X-MJ-EventPayload'] && mail['X-MJ-EventPayload'].value
50
- }.merge(content).merge(@delivery_method_options)
51
-
52
- Mailjet::MessageDelivery.create(payload)
94
+ to: mail[:to].formatted.join(', '),
95
+ sender: mail[:sender],
96
+ subject: mail.subject
97
+ }
98
+ .merge(content)
99
+ .merge(base_from)
100
+ .merge(@delivery_method_options)
101
+
102
+ payload[:cc] = mail[:cc].formatted.join(', ') if mail[:cc]
103
+ payload[:reply_to] = mail[:reply_to].formatted.join(', ') if mail[:reply_to]
104
+ payload[:bcc] = mail[:bcc].formatted.join(', ') if mail[:bcc]
105
+
106
+ # Send the final payload to Mailjet Send API
107
+ Mailjet::Send.create(payload)
53
108
  end
54
109
  end
55
110
 
@@ -5,6 +5,6 @@ module Mailjet
5
5
  include Mailjet::Resource
6
6
  self.resource_path = 'v3/send/message'
7
7
  self.public_operations = [:post]
8
- self.resourceprop = [:from, :sender, :to, :cc, :bcc, :subject, :text, :html, :attachment, :inlineattachment, :header, :'mj-customid', :'mj-eventpayload', :'mj-trackclick']
8
+ self.resourceprop = [:from, :sender, :to, :cc, :bcc, :subject, :text, :html, :attachment, :inline_attachments, :headers]
9
9
  end
10
10
  end
@@ -7,6 +7,7 @@ require 'active_support/core_ext/string'
7
7
  require 'active_support/core_ext/module/delegation'
8
8
  require 'active_support/concern'
9
9
  require 'active_support/json/decoding'
10
+ require 'mail'
10
11
  require 'json'
11
12
 
12
13
 
@@ -72,6 +73,7 @@ module Mailjet
72
73
  #
73
74
  attributes = parse_api_json(connection[id].get(default_headers)).first
74
75
  instanciate_from_api(attributes)
76
+
75
77
  rescue Mailjet::ApiError => e
76
78
  if e.code == 404
77
79
  nil
@@ -86,7 +88,8 @@ module Mailjet
86
88
  attributes.tap { |hs| hs.delete(:id) }
87
89
 
88
90
  if Mailjet.config.default_from and self.resource_path == 'v3/send/'
89
- default_attributes = { :from_email => Mailjet.config.default_from }
91
+ address = Mail::AddressList.new(Mailjet.config.default_from).addresses[0]
92
+ default_attributes = { :from_email => address.address, :from_name => address.display_name}
90
93
  else
91
94
  default_attributes = {}
92
95
  end
@@ -189,6 +192,8 @@ module Mailjet
189
192
  'Text-part'
190
193
  elsif key == "html_part"
191
194
  'Html-part'
195
+ elsif key == "inline_attachments"
196
+ 'Inline_attachments'
192
197
  else
193
198
  key.to_s.send(method)
194
199
  end
@@ -210,7 +215,7 @@ module Mailjet
210
215
 
211
216
  def save
212
217
  if persisted?
213
- response = connection[id].put(formatted_payload, default_headers)
218
+ response = connection[attributes[:id]].put(formatted_payload, default_headers)
214
219
  else
215
220
  response = connection.post(formatted_payload, default_headers)
216
221
  end
@@ -4,10 +4,10 @@ module Mailjet
4
4
  class Newsletter_detailcontent
5
5
  include Mailjet::Resource
6
6
  self.action = "detailcontent"
7
- self.resource_path = "v3/REST/newsletter/id/#{self.action}"
8
- self.public_operations = [:get, :put, :post, :delete]
7
+ self.resource_path = "v3/REST/template/id/#{self.action}"
8
+ self.public_operations = [:get, :post]
9
9
  self.filters = []
10
- self.resourceprop = [:text_part, :html_part]
10
+ self.resourceprop = [:text_part, :html_part, :headers, :mjml_content]
11
11
 
12
12
  end
13
13
  end
@@ -0,0 +1,12 @@
1
+ require 'mailjet/resource'
2
+
3
+ module Mailjet
4
+ class Template
5
+ include Mailjet::Resource
6
+ self.resource_path = 'v3/REST/template'
7
+ self.public_operations = [:get, :put, :post, :delete]
8
+ self.filters = [:api_key, :categories, :categories_selection_method, :edit_mode, :name, :owner_type, :purposes, :purposes_selection_method, :user]
9
+ self.resourceprop = [:author, :categories, :copyright, :description, :edit_mode, :is_starred, :name, :owner_type, :presets, :purposes]
10
+
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+
2
+ require 'mailjet/resource'
3
+
4
+ module Mailjet
5
+ class Template_detailcontent
6
+ include Mailjet::Resource
7
+ self.resource_path = 'v3/REST/template/id/${self.action}'
8
+ self.public_operations = [:get, :put, :post, :delete]
9
+ self.filters = [:api_key, :categories, :categories_selection_method, :edit_mode, :name, :owner_type, :purposes, :purposes_selection_method, :user]
10
+ self.resourceprop = [:author, :categories, :copyright, :description, :edit_mode, :is_starred, :name, :owner_type, :presets, :purposes]
11
+
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module Mailjet
2
- VERSION = "1.3.8"
2
+ VERSION = "1.4.8"
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.3.8
4
+ version: 1.4.8
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: 2016-03-22 00:00:00.000000000 Z
14
+ date: 2016-08-02 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport
@@ -356,6 +356,8 @@ files:
356
356
  - lib/mailjet/resources/sender.rb
357
357
  - lib/mailjet/resources/sender_validate.rb
358
358
  - lib/mailjet/resources/senderstatistics.rb
359
+ - lib/mailjet/resources/template.rb
360
+ - lib/mailjet/resources/template_detailcontent.rb
359
361
  - lib/mailjet/resources/toplinkclicked.rb
360
362
  - lib/mailjet/resources/trigger.rb
361
363
  - lib/mailjet/resources/user.rb
@@ -382,7 +384,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
382
384
  version: '0'
383
385
  requirements: []
384
386
  rubyforge_project:
385
- rubygems_version: 2.4.8
387
+ rubygems_version: 2.4.5.1
386
388
  signing_key:
387
389
  specification_version: 4
388
390
  summary: Mailjet a powerful all-in-one email service provider clients can use to get