mailjet 0.0.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.
- data/MIT-LICENSE +42 -0
- data/README.md +457 -0
- data/Rakefile +14 -0
- data/lib/mailjet.rb +33 -0
- data/lib/mailjet/api.rb +20 -0
- data/lib/mailjet/api_error.rb +19 -0
- data/lib/mailjet/api_request.rb +70 -0
- data/lib/mailjet/campaign.rb +62 -0
- data/lib/mailjet/click.rb +15 -0
- data/lib/mailjet/configuration.rb +16 -0
- data/lib/mailjet/contact.rb +18 -0
- data/lib/mailjet/core_extensions/ostruct.rb +9 -0
- data/lib/mailjet/email.rb +4 -0
- data/lib/mailjet/list.rb +52 -0
- data/lib/mailjet/mailer.rb +19 -0
- data/lib/mailjet/rack/endpoint.rb +24 -0
- data/lib/mailjet/reporting.rb +41 -0
- data/lib/mailjet/template_category.rb +13 -0
- data/lib/mailjet/template_model.rb +13 -0
- data/lib/mailjet/version.rb +3 -0
- data/test/mailjet/api_request_test.rb +72 -0
- data/test/mailjet/api_test.rb +13 -0
- data/test/mailjet/campaign_test.rb +62 -0
- data/test/mailjet/configuration_test.rb +16 -0
- data/test/mailjet/contact_test.rb +24 -0
- data/test/mailjet/list_test.rb +62 -0
- data/test/mailjet/rack/endpoint_test.rb +30 -0
- data/test/mailjet/reporting_test.rb +26 -0
- data/test/mailjet/template_category_test.rb +13 -0
- data/test/mailjet/template_model_test.rb +13 -0
- data/test/mailjet_test.rb +19 -0
- data/test/minitest_helper.rb +23 -0
- metadata +198 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
Copyright 2012 Benezech
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
|
23
|
+
Copyright (c) 2011 Holinnn
|
24
|
+
|
25
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
26
|
+
a copy of this software and associated documentation files (the
|
27
|
+
"Software"), to deal in the Software without restriction, including
|
28
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
29
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
30
|
+
permit persons to whom the Software is furnished to do so, subject to
|
31
|
+
the following conditions:
|
32
|
+
|
33
|
+
The above copyright notice and this permission notice shall be
|
34
|
+
included in all copies or substantial portions of the Software.
|
35
|
+
|
36
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
37
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
38
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
39
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
40
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
41
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
42
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,457 @@
|
|
1
|
+
# Mailjet
|
2
|
+
|
3
|
+
[Maijet][mailjet]'s official Ruby wrapper, bootstraped with [Mailjetter][mailjetter].
|
4
|
+
|
5
|
+
<!--
|
6
|
+
|
7
|
+
[][travis]
|
8
|
+
[][gemnasium]
|
9
|
+
[][stillmaintained]
|
10
|
+
|
11
|
+
-->
|
12
|
+
|
13
|
+
[travis]: http://travis-ci.org/jbescoyez/mailjet
|
14
|
+
[gemnasium]: https://gemnasium.com/jbescoyez/mailjet
|
15
|
+
[stillmaintained]: http://stillmaintained.com/jbescoyez/mailjet
|
16
|
+
[mailjet]: http://www.mailjet.com
|
17
|
+
[rubinius]: http://rubini.us/
|
18
|
+
[ree]: http://www.rubyenterpriseedition.com/
|
19
|
+
[jruby]:http://jruby.org/
|
20
|
+
[mailjetter]:https://github.com/holinnn/mailjetter/
|
21
|
+
|
22
|
+
<!-- You can read this readme file in other languages:
|
23
|
+
english | [french](./README.fr.md) -->
|
24
|
+
|
25
|
+
This gem helps you to:
|
26
|
+
|
27
|
+
* Send transactional emails through Mailjet API in Rails 3
|
28
|
+
* Manage your lists, contacts and campaigns
|
29
|
+
* Track email delivery through event API
|
30
|
+
|
31
|
+
Compatibility:
|
32
|
+
|
33
|
+
- Ruby 1.8.7
|
34
|
+
- Ruby 1.9.X
|
35
|
+
- [jRuby][jruby]
|
36
|
+
- [Rubinius][rubinius]
|
37
|
+
|
38
|
+
Rails ActionMailer integration designed for Rails 3.X
|
39
|
+
|
40
|
+
## Install
|
41
|
+
|
42
|
+
### Bundler
|
43
|
+
|
44
|
+
Add the following in your Gemfile:
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
# Gemfile
|
48
|
+
|
49
|
+
gem 'mailjet'
|
50
|
+
```
|
51
|
+
|
52
|
+
and let the bundler magic happen
|
53
|
+
|
54
|
+
```bash
|
55
|
+
$ bundle install
|
56
|
+
```
|
57
|
+
|
58
|
+
### Rubygems
|
59
|
+
|
60
|
+
```bash
|
61
|
+
$ gem install mailjet
|
62
|
+
```
|
63
|
+
|
64
|
+
## Setup
|
65
|
+
|
66
|
+
### Api key
|
67
|
+
|
68
|
+
You need a proper account with [Maijet][mailjet]. You can get the API key through the [Maijet][mailjet] interface in _Account/Master API key_
|
69
|
+
|
70
|
+
Add the keys to an initializer:
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
# initializers/mailjet.rb
|
74
|
+
Mailjet.configure do |config|
|
75
|
+
config.api_key = 'your-api-key'
|
76
|
+
config.secret_key = 'your-secret-key'
|
77
|
+
config.domain = 'my_domain.com'
|
78
|
+
config.default_from = 'my_regitered_mailjet_email@domain.com'
|
79
|
+
end
|
80
|
+
```
|
81
|
+
|
82
|
+
`domain` is needed if you send emails with :mailjet's SMTP (below)
|
83
|
+
|
84
|
+
`default_from` is optional if you send emails with :mailjet's SMTP (below)
|
85
|
+
|
86
|
+
### Send emails with ActionMailer
|
87
|
+
|
88
|
+
As easy as:
|
89
|
+
|
90
|
+
```ruby
|
91
|
+
# application.rb
|
92
|
+
config.action_mailer.delivery_method = :mailjet
|
93
|
+
|
94
|
+
```
|
95
|
+
|
96
|
+
## Manage your campaigns
|
97
|
+
|
98
|
+
### Contacts
|
99
|
+
|
100
|
+
#### Filter your contacts
|
101
|
+
|
102
|
+
```ruby
|
103
|
+
> contacts = Mailjet::Contact.all(status: 'active', start: 100, limit: 2)
|
104
|
+
=> [#<Mailjet::Contact>, #<Mailjet::Contact>]
|
105
|
+
> contacts = Mailjet::Contact.all(openers: true, start: 100, limit: 2)
|
106
|
+
=> [#<Mailjet::Contact>, #<Mailjet::Contact>]
|
107
|
+
```
|
108
|
+
|
109
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/contact/list*
|
110
|
+
*All parameters and attributes for the openers option at https://eu.mailjet.com/docs/api/contact/openers*
|
111
|
+
|
112
|
+
#### More info about your contacts
|
113
|
+
|
114
|
+
```ruby
|
115
|
+
> contacts[0].infos
|
116
|
+
=> {blocked: 12, click: 1, email: 'test@mailjet.com'}
|
117
|
+
```
|
118
|
+
|
119
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/contact/infos*
|
120
|
+
|
121
|
+
### Lists
|
122
|
+
|
123
|
+
#### Create a new list
|
124
|
+
|
125
|
+
```ruby
|
126
|
+
> list = Mailjet::List.create(label: 'My Mailjet list', name: "mymailjetlist")
|
127
|
+
```
|
128
|
+
|
129
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/lists/create*
|
130
|
+
|
131
|
+
#### List your lists
|
132
|
+
|
133
|
+
```ruby
|
134
|
+
> Mailjet::List.all(limit: 10, start: 0, orderby: 'id ASC')
|
135
|
+
```
|
136
|
+
|
137
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/lists/all*
|
138
|
+
|
139
|
+
#### Update a list
|
140
|
+
|
141
|
+
```ruby
|
142
|
+
> list = Mailjet::List.all.find{|l| l.name == 'mymailjetlist' }
|
143
|
+
> list = list.update(label: 'My updated Mailjet list', name: "myupdatedmailjetlist")
|
144
|
+
```
|
145
|
+
|
146
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/lists/update*
|
147
|
+
|
148
|
+
#### Show all contacts within a list
|
149
|
+
|
150
|
+
```ruby
|
151
|
+
> list.contacts
|
152
|
+
=> [#<Mailjet::Contact>, #<Mailjet::Contact>]
|
153
|
+
```
|
154
|
+
|
155
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/lists/contacts*
|
156
|
+
|
157
|
+
#### Add contacts to your list
|
158
|
+
|
159
|
+
```ruby
|
160
|
+
> list.add_contacts("test@mailjet.com", "test2@mailjet.com", force: true )
|
161
|
+
=> OK
|
162
|
+
```
|
163
|
+
|
164
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/lists/addmanycontacts*
|
165
|
+
|
166
|
+
#### Remove contacts from a list
|
167
|
+
|
168
|
+
```ruby
|
169
|
+
> list.remove_contacts("test@mailjet.com", "test2@mailjet.com")
|
170
|
+
=> OK
|
171
|
+
```
|
172
|
+
|
173
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/lists/removemanycontacts*
|
174
|
+
|
175
|
+
#### Direct list email
|
176
|
+
|
177
|
+
```ruby
|
178
|
+
> list.email
|
179
|
+
=> "jk324jlO3N32203@lists.mailjet.com"
|
180
|
+
```
|
181
|
+
|
182
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/lists/email*
|
183
|
+
|
184
|
+
|
185
|
+
#### Get statistics
|
186
|
+
|
187
|
+
```ruby
|
188
|
+
> list.statistics
|
189
|
+
=> {active: 20, bounce: 1, click: 14, created_at: "2012-02-02 21:59:59", ...}
|
190
|
+
```
|
191
|
+
|
192
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/lists/statistics*
|
193
|
+
|
194
|
+
#### Delete a list
|
195
|
+
|
196
|
+
```ruby
|
197
|
+
> list.delete
|
198
|
+
=> OK
|
199
|
+
```
|
200
|
+
|
201
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/lists/delete*
|
202
|
+
|
203
|
+
### Campaigns
|
204
|
+
|
205
|
+
#### Create a new campaign:
|
206
|
+
|
207
|
+
```ruby
|
208
|
+
> campaign = Mailjet::Campaign.create(title: "My Mailjet Campaign", list_id: Mailjet::List.all.first.id, from: "mailjet-registered-email@domain.com", from_name: "Sender Name", subject: "Our new product", lang: "en", footer: "default")
|
209
|
+
```
|
210
|
+
|
211
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/message/createcampaign*
|
212
|
+
|
213
|
+
#### List your campaigns:
|
214
|
+
|
215
|
+
```ruby
|
216
|
+
> campaigns = Mailjet::Campaign.all(start: 10, limit: 20)
|
217
|
+
=> [#<Mailjet::Campaign>, #<Mailjet::Campaign>, ...]
|
218
|
+
```
|
219
|
+
|
220
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/message/campaigns*
|
221
|
+
|
222
|
+
#### Find one campaign:
|
223
|
+
|
224
|
+
```ruby
|
225
|
+
> campaigns = Mailjet::Campaign.find(19)
|
226
|
+
=> #<Mailjet::Campaign>
|
227
|
+
```
|
228
|
+
|
229
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/message/campaigns*
|
230
|
+
|
231
|
+
#### Update your campaign:
|
232
|
+
|
233
|
+
```ruby
|
234
|
+
> campaign.update(title: "My *new* Mailjet Campaign")
|
235
|
+
```
|
236
|
+
|
237
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/message/updatecampaign*
|
238
|
+
|
239
|
+
#### Get all the subscribers to your campaign:
|
240
|
+
|
241
|
+
```ruby
|
242
|
+
> campaign.contacts(limit: 2, start: 0, status: 'queued')
|
243
|
+
=> [#<Mailjet::Contact id: 123, email: 'test@mailjet.com', sent_at: "2012-02-02 21:59:59", status: 'queued'>, #<Mailjet::Contact id: 456, email: 'test2@mailjet.com', sent_at: "2012-02-02 23:13:02", status: 'queued'>]
|
244
|
+
```
|
245
|
+
|
246
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/message/contacts*
|
247
|
+
|
248
|
+
#### Send the campaign the associated contacts:
|
249
|
+
|
250
|
+
```ruby
|
251
|
+
> campaign.send!
|
252
|
+
=> OK
|
253
|
+
```
|
254
|
+
|
255
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/message/sendcampaign*
|
256
|
+
|
257
|
+
#### Send a test email to specified email address:
|
258
|
+
|
259
|
+
```ruby
|
260
|
+
> campaign.test('test@mailjet.com')
|
261
|
+
=> OK # response status
|
262
|
+
```
|
263
|
+
|
264
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/message/testcampaign*
|
265
|
+
|
266
|
+
#### Get statistics:
|
267
|
+
|
268
|
+
```ruby
|
269
|
+
> campaign.statistics
|
270
|
+
=> { total: 200, bounce: 1, bounce_pct: 0.5, click: 10, click_pct: 5, open: 20, open_pct: 10, sent: 200, sent_pct: 100, spam: 1, spam_pct: 0.5, total: 200 }
|
271
|
+
```
|
272
|
+
|
273
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/message/statistics*
|
274
|
+
|
275
|
+
#### Template categories:
|
276
|
+
|
277
|
+
```ruby
|
278
|
+
> Mailjet::TemplateCategory.all
|
279
|
+
=> [#<Mailjet::TemplateCategory id: 2, label: "basic", value: "Basic">, #<Mailjet::TemplateCategory id: 6, label: "design", value: "Design">]
|
280
|
+
```
|
281
|
+
|
282
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/message/tplcategories*
|
283
|
+
|
284
|
+
#### Template models:
|
285
|
+
|
286
|
+
```ruby
|
287
|
+
> Mailjet::TemplateModel.all(category: 2, custom: true, locale: 'fr_FR')
|
288
|
+
=> [<#Mailjet::TemplateModel id: 4, name: "Text", header_link: "http:\/\/" ... ]
|
289
|
+
```
|
290
|
+
|
291
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/message/tplmodels*
|
292
|
+
|
293
|
+
#### Get the raw HTML form a campaign:
|
294
|
+
|
295
|
+
```ruby
|
296
|
+
> campaign.html
|
297
|
+
=> "<html><head></head><body>Test</body></html>"
|
298
|
+
```
|
299
|
+
|
300
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/message/htmlcampaign*
|
301
|
+
|
302
|
+
#### Duplicate a campaign:
|
303
|
+
|
304
|
+
```ruby
|
305
|
+
> new_campaign = campaign.duplicate(title: "Another Mailjet Campaign")
|
306
|
+
=> #<Mailjet::Campaign title: "Another Mailjet Campaign" ... >
|
307
|
+
```
|
308
|
+
|
309
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/message/duplicatecampaign*
|
310
|
+
|
311
|
+
### Reporting
|
312
|
+
|
313
|
+
#### Get the list of all your clicks
|
314
|
+
|
315
|
+
```ruby
|
316
|
+
> clicks = Mailjet::Reporting.clicks(from: "test@domain.com")
|
317
|
+
=> [<#Mailjet::Click id: 4, click_delay: 1234, date: "2012-02-08", link: "", user_agent: "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0"} ]
|
318
|
+
> clicks.first.contact
|
319
|
+
=> #<Mailjet::Contact id: 123, email: "test@mailjet.com">
|
320
|
+
```
|
321
|
+
|
322
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/report/click*
|
323
|
+
|
324
|
+
#### Info about domains your emails are sent to
|
325
|
+
|
326
|
+
```ruby
|
327
|
+
> Mailjet::Reporting.domains(start: 3, limit: 6)
|
328
|
+
=> [{bounce_rate: 0.1, clicked_rate: 0.2, ...}, {bounce_rate: 0.8, clicked_rate: 0.1, ...}]
|
329
|
+
```
|
330
|
+
|
331
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/report/domain*
|
332
|
+
|
333
|
+
#### Clients used to open emails
|
334
|
+
|
335
|
+
```ruby
|
336
|
+
> Mailjet::Reporting.clients(start: 3, limit: 6)
|
337
|
+
=> [{client: "Gmail", open_rate: 0.1, platform: "Windows", ...}, {client: "Outlook", open_rate: 0.3, platform: "Windows", ...}]
|
338
|
+
```
|
339
|
+
|
340
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/report/emailclients*
|
341
|
+
|
342
|
+
#### Info about email sent
|
343
|
+
|
344
|
+
```ruby
|
345
|
+
> Mailjet::Reporting.emails(from_domain: "domain.com", limit: 10)
|
346
|
+
=> [#<Mailjet::Email>, #<Mailjet::Email>, #<Mailjet::Email>, ...]
|
347
|
+
```
|
348
|
+
|
349
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/report/emailsent*
|
350
|
+
|
351
|
+
#### Global stats about a set of emails
|
352
|
+
|
353
|
+
```ruby
|
354
|
+
> Mailjet::Reporting.statistics(from_domain: "domain.com", limit: 10)
|
355
|
+
=> { avg_clicked_delay: 123, avg_opened_rate: 0.432, blocked: 13, ...}
|
356
|
+
```
|
357
|
+
|
358
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/report/emailstatistics*
|
359
|
+
|
360
|
+
|
361
|
+
#### Opened email Geolocation
|
362
|
+
|
363
|
+
```ruby
|
364
|
+
> Mailjet::Reporting.geolocation(from_domain: "domain.com", limit: 10)
|
365
|
+
=> [{click: 123, country: "France", open: 234}, {click: 9876, country: "US", open: 12345}]
|
366
|
+
```
|
367
|
+
|
368
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/report/geoip*
|
369
|
+
|
370
|
+
#### User-Agents used to open emails
|
371
|
+
|
372
|
+
```ruby
|
373
|
+
> Mailjet::Reporting.agents(start: 3, limit: 6)
|
374
|
+
=> [{cnt_clicked: 123, part: 30, platform: "Windows", user_agent: "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0"}, ...]
|
375
|
+
```
|
376
|
+
|
377
|
+
*All parameters and attributes at https://eu.mailjet.com/docs/api/report/useragents*
|
378
|
+
|
379
|
+
## Track email delivery
|
380
|
+
|
381
|
+
You can setup your Rack application in order to receive feedback on emails you sent (clicks, etc.)
|
382
|
+
|
383
|
+
First notify Mailjet of your desired endpoint (say: 'http://www.my_domain.com/mailjet/callback') at https://www.mailjet.com/account/triggers
|
384
|
+
|
385
|
+
Then configure Mailjet's Rack application to catch these callbacks.
|
386
|
+
|
387
|
+
A typical Rails/ActiveRecord installation would look like that:
|
388
|
+
|
389
|
+
```ruby
|
390
|
+
# application.rb
|
391
|
+
|
392
|
+
config.middleware.use Mailjet::Rack::Endpoint, '/mailjet/callback' do |params| # using the same URL you just set in Mailjet's administration
|
393
|
+
|
394
|
+
email = params['email'].presence || params['original_address'] # original_address is for typofix events
|
395
|
+
|
396
|
+
if user = User.find_by_email(email)
|
397
|
+
user.process_email_callback(params)
|
398
|
+
else
|
399
|
+
Rails.logger.fatal "[Mailjet] User not found: #{email} -- DUMP #{params.inspect}"
|
400
|
+
end
|
401
|
+
end
|
402
|
+
|
403
|
+
# user.rb
|
404
|
+
class User < ActiveRecord::Base
|
405
|
+
|
406
|
+
def process_email_callback(params)
|
407
|
+
|
408
|
+
# Returned events and options are described at https://eu.mailjet.com/docs/event_tracking
|
409
|
+
case params['event']
|
410
|
+
when 'open'
|
411
|
+
# Mailjet's invisible pixel was downloaded: user allowed for images to be seen
|
412
|
+
when 'click'
|
413
|
+
# a link (tracked by Mailjet) was clicked
|
414
|
+
when 'bounce'
|
415
|
+
# is user's email valid? Recipient not found
|
416
|
+
when 'spam'
|
417
|
+
# gateway or user flagged you
|
418
|
+
when 'blocked'
|
419
|
+
# gateway or user blocked you
|
420
|
+
when 'typofix'
|
421
|
+
# email routed from params['original_address'] to params['new_address']
|
422
|
+
else
|
423
|
+
Rails.logger.fatal "[Mailjet] Unknown event #{params['event']} for User #{self.inspect} -- DUMP #{params.inspect}"
|
424
|
+
end
|
425
|
+
end
|
426
|
+
```
|
427
|
+
|
428
|
+
Note that since it's a Rack application, any Ruby Rack framework (say: Sinatra, Padrino, etc.) is compatible.
|
429
|
+
|
430
|
+
## Testing
|
431
|
+
|
432
|
+
For maximum reliability, the gem is tested against Mailjet's server for some parts, which means that valid credentials are needed.
|
433
|
+
Do NOT use your production account (create a new one if needed), because some tests are destructive.
|
434
|
+
|
435
|
+
```yml
|
436
|
+
# GEM_ROOT/config.yml
|
437
|
+
mailjet:
|
438
|
+
api_key: YOUR_API_KEY
|
439
|
+
secret_key: YOUR_SECRET_KEY
|
440
|
+
default_from: YOUR_REGISTERED_SENDER_EMAIL # the email you used to create the account should do it
|
441
|
+
```
|
442
|
+
|
443
|
+
Then at the root of the gem, simply run:
|
444
|
+
|
445
|
+
```bash
|
446
|
+
bundle
|
447
|
+
rake
|
448
|
+
```
|
449
|
+
## Send a pull request
|
450
|
+
|
451
|
+
- Fork the project.
|
452
|
+
- Create a topic branch.
|
453
|
+
- Implement your feature or bug fix.
|
454
|
+
- Add documentation for your feature or bug fix.
|
455
|
+
- Add specs for your feature or bug fix.
|
456
|
+
- Commit and push your changes.
|
457
|
+
- Submit a pull request. Please do not include changes to the gemspec, or version file.
|