sendgrid-ruby 1.1.6 → 6.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +21 -0
  3. data/.env_sample +1 -3
  4. data/.gitignore +1 -0
  5. data/.travis.yml +28 -17
  6. data/CHANGELOG.md +231 -1
  7. data/CODE_OF_CONDUCT.md +73 -0
  8. data/CONTRIBUTING.md +214 -0
  9. data/Gemfile +5 -4
  10. data/ISSUE_TEMPLATE.md +26 -0
  11. data/LICENSE.md +21 -0
  12. data/Makefile +7 -0
  13. data/PULL_REQUEST_TEMPLATE.md +31 -0
  14. data/README.md +161 -225
  15. data/Rakefile +9 -2
  16. data/TROUBLESHOOTING.md +137 -0
  17. data/UPGRADE.md +5 -0
  18. data/USAGE.md +5037 -0
  19. data/USE_CASES.md +377 -0
  20. data/config.ru +4 -0
  21. data/docker/Dockerfile +12 -0
  22. data/docker/README.md +30 -0
  23. data/examples/accesssettings/accesssettings.rb +83 -0
  24. data/examples/alerts/alerts.rb +62 -0
  25. data/examples/apikeys/apikeys.rb +84 -0
  26. data/examples/asm/asm.rb +173 -0
  27. data/examples/browsers/browsers.rb +16 -0
  28. data/examples/campaigns/campaigns.rb +153 -0
  29. data/examples/categories/categories.rb +36 -0
  30. data/examples/clients/clients.rb +27 -0
  31. data/examples/contactdb/contactdb.rb +395 -0
  32. data/examples/devices/devices.rb +16 -0
  33. data/examples/geo/geo.rb +16 -0
  34. data/examples/helpers/mail/example.rb +147 -0
  35. data/examples/helpers/settings/example.rb +23 -0
  36. data/examples/helpers/stats/example.rb +42 -0
  37. data/examples/ips/ips.rb +167 -0
  38. data/examples/mail/mail.rb +173 -0
  39. data/examples/mailboxproviders/mailboxproviders.rb +16 -0
  40. data/examples/mailsettings/mailsettings.rb +219 -0
  41. data/examples/partnersettings/partnersettings.rb +39 -0
  42. data/examples/scopes/scopes.rb +61 -0
  43. data/examples/senderauthentication/senderauthentication.rb +310 -0
  44. data/examples/senders/senders.rb +98 -0
  45. data/examples/stats/stats.rb +16 -0
  46. data/examples/subusers/subusers.rb +169 -0
  47. data/examples/suppression/suppression.rb +201 -0
  48. data/examples/templates/templates.rb +129 -0
  49. data/examples/trackingsettings/trackingsettings.rb +110 -0
  50. data/examples/user/user.rb +293 -0
  51. data/gemfiles/Sinatra_1.gemfile +6 -0
  52. data/gemfiles/Sinatra_2.gemfile +6 -0
  53. data/lib/sendgrid/client.rb +33 -57
  54. data/lib/sendgrid/helpers/inbound/README.md +98 -0
  55. data/lib/sendgrid/helpers/inbound/app.rb +32 -0
  56. data/lib/sendgrid/helpers/inbound/config.yml +26 -0
  57. data/lib/sendgrid/helpers/inbound/public/index.html +10 -0
  58. data/lib/sendgrid/helpers/inbound/sample_data/default_data.txt +58 -0
  59. data/lib/sendgrid/helpers/inbound/sample_data/raw_data.txt +57 -0
  60. data/lib/sendgrid/helpers/inbound/sample_data/raw_data_with_attachments.txt +298 -0
  61. data/lib/sendgrid/helpers/inbound/send.rb +26 -0
  62. data/lib/sendgrid/helpers/ip_management/ip_management.rb +17 -0
  63. data/lib/sendgrid/helpers/mail/README.md +14 -0
  64. data/lib/sendgrid/helpers/mail/asm.rb +33 -0
  65. data/lib/sendgrid/helpers/mail/attachment.rb +86 -0
  66. data/lib/sendgrid/helpers/mail/bcc_settings.rb +33 -0
  67. data/lib/sendgrid/helpers/mail/bypass_list_management.rb +43 -0
  68. data/lib/sendgrid/helpers/mail/category.rb +20 -0
  69. data/lib/sendgrid/helpers/mail/click_tracking.rb +33 -0
  70. data/lib/sendgrid/helpers/mail/content.rb +20 -0
  71. data/lib/sendgrid/helpers/mail/custom_arg.rb +24 -0
  72. data/lib/sendgrid/helpers/mail/email.rb +29 -0
  73. data/lib/sendgrid/helpers/mail/footer.rb +43 -0
  74. data/lib/sendgrid/helpers/mail/ganalytics.rb +74 -0
  75. data/lib/sendgrid/helpers/mail/header.rb +24 -0
  76. data/lib/sendgrid/helpers/mail/mail.rb +140 -0
  77. data/lib/sendgrid/helpers/mail/mail_settings.rb +63 -0
  78. data/lib/sendgrid/helpers/mail/open_tracking.rb +33 -0
  79. data/lib/sendgrid/helpers/mail/personalization.rb +82 -0
  80. data/lib/sendgrid/helpers/mail/section.rb +24 -0
  81. data/lib/sendgrid/helpers/mail/spam_check.rb +43 -0
  82. data/lib/sendgrid/helpers/mail/subscription_tracking.rb +53 -0
  83. data/lib/sendgrid/helpers/mail/substitution.rb +24 -0
  84. data/lib/sendgrid/helpers/mail/tracking_settings.rb +53 -0
  85. data/lib/sendgrid/helpers/permissions/scope.rb +28 -0
  86. data/lib/sendgrid/helpers/permissions/scopes.yml +309 -0
  87. data/lib/sendgrid/helpers/settings/README.md +14 -0
  88. data/lib/sendgrid/helpers/settings/mail_settings_dto.rb +13 -0
  89. data/lib/sendgrid/helpers/settings/partner_settings_dto.rb +13 -0
  90. data/lib/sendgrid/helpers/settings/settings.rb +28 -0
  91. data/lib/sendgrid/helpers/settings/tracking_settings_dto.rb +24 -0
  92. data/lib/sendgrid/helpers/settings/user_settings_dto.rb +13 -0
  93. data/lib/sendgrid/helpers/stats/email_stats.rb +46 -0
  94. data/lib/sendgrid/helpers/stats/metrics.rb +35 -0
  95. data/lib/sendgrid/helpers/stats/stats_response.rb +31 -0
  96. data/lib/sendgrid/version.rb +1 -1
  97. data/lib/sendgrid-ruby.rb +27 -6
  98. data/mail_helper_v3.md +390 -0
  99. data/sendgrid-ruby.gemspec +13 -17
  100. data/spec/sendgrid/helpers/ip_management/ip_management_spec.rb +12 -0
  101. data/spec/sendgrid/helpers/settings/mail_settings_dto_spec.rb +32 -0
  102. data/spec/sendgrid/helpers/settings/partner_settings_dto_spec.rb +24 -0
  103. data/spec/sendgrid/helpers/settings/settings_spec.rb +25 -0
  104. data/spec/sendgrid/helpers/settings/tracking_settings_dto_spec.rb +27 -0
  105. data/spec/sendgrid/helpers/settings/user_settings_dto_spec.rb +24 -0
  106. data/spec/sendgrid/helpers/stats/email_stats_spec.rb +112 -0
  107. data/spec/sendgrid/helpers/stats/metrics_spec.rb +46 -0
  108. data/spec/sendgrid/helpers/stats/stats_response_spec.rb +76 -0
  109. data/spec/spec_helper.rb +10 -1
  110. data/test/prism.sh +42 -0
  111. data/test/sendgrid/helpers/mail/test_attachment.rb +35 -0
  112. data/test/sendgrid/helpers/mail/test_category.rb +27 -0
  113. data/test/sendgrid/helpers/mail/test_email.rb +34 -0
  114. data/test/sendgrid/helpers/mail/test_mail.rb +261 -0
  115. data/test/sendgrid/helpers/mail/test_personalizations.rb +161 -0
  116. data/test/sendgrid/permissions/test_scopes.rb +38 -0
  117. data/test/sendgrid/test_sendgrid-ruby.rb +2751 -0
  118. metadata +149 -115
  119. data/.rspec +0 -2
  120. data/.rubocop.yml +0 -30
  121. data/FETCH_HEAD +0 -0
  122. data/Guardfile +0 -10
  123. data/LICENSE.txt +0 -22
  124. data/example.rb +0 -41
  125. data/lib/sendgrid/exceptions.rb +0 -7
  126. data/lib/sendgrid/mail.rb +0 -182
  127. data/lib/sendgrid/recipient.rb +0 -29
  128. data/lib/sendgrid/response.rb +0 -14
  129. data/lib/sendgrid/template.rb +0 -26
  130. data/lib/sendgrid/template_mailer.rb +0 -59
  131. data/spec/lib/sendgrid/client_spec.rb +0 -87
  132. data/spec/lib/sendgrid/mail_spec.rb +0 -151
  133. data/spec/lib/sendgrid/recipient_spec.rb +0 -91
  134. data/spec/lib/sendgrid/template_mailer_spec.rb +0 -86
  135. data/spec/lib/sendgrid/template_spec.rb +0 -61
  136. data/spec/lib/sendgrid_spec.rb +0 -7
@@ -0,0 +1,395 @@
1
+ require 'sendgrid-ruby'
2
+
3
+
4
+ sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
5
+
6
+
7
+ ##################################################
8
+ # Create a Custom Field #
9
+ # POST /contactdb/custom_fields #
10
+
11
+ data = JSON.parse('{
12
+ "name": "pet",
13
+ "type": "text"
14
+ }')
15
+ response = sg.client.contactdb.custom_fields.post(request_body: data)
16
+ puts response.status_code
17
+ puts response.body
18
+ puts response.headers
19
+
20
+ ##################################################
21
+ # Retrieve all custom fields #
22
+ # GET /contactdb/custom_fields #
23
+
24
+ response = sg.client.contactdb.custom_fields.get()
25
+ puts response.status_code
26
+ puts response.body
27
+ puts response.headers
28
+
29
+ ##################################################
30
+ # Retrieve a Custom Field #
31
+ # GET /contactdb/custom_fields/{custom_field_id} #
32
+
33
+ custom_field_id = "test_url_param"
34
+ response = sg.client.contactdb.custom_fields._(custom_field_id).get()
35
+ puts response.status_code
36
+ puts response.body
37
+ puts response.headers
38
+
39
+ ##################################################
40
+ # Delete a Custom Field #
41
+ # DELETE /contactdb/custom_fields/{custom_field_id} #
42
+
43
+ custom_field_id = "test_url_param"
44
+ response = sg.client.contactdb.custom_fields._(custom_field_id).delete()
45
+ puts response.status_code
46
+ puts response.body
47
+ puts response.headers
48
+
49
+ ##################################################
50
+ # Create a List #
51
+ # POST /contactdb/lists #
52
+
53
+ data = JSON.parse('{
54
+ "name": "your list name"
55
+ }')
56
+ response = sg.client.contactdb.lists.post(request_body: data)
57
+ puts response.status_code
58
+ puts response.body
59
+ puts response.headers
60
+
61
+ ##################################################
62
+ # Retrieve all lists #
63
+ # GET /contactdb/lists #
64
+
65
+ response = sg.client.contactdb.lists.get()
66
+ puts response.status_code
67
+ puts response.body
68
+ puts response.headers
69
+
70
+ ##################################################
71
+ # Delete Multiple lists #
72
+ # DELETE /contactdb/lists #
73
+
74
+ data = JSON.parse('[
75
+ 1,
76
+ 2,
77
+ 3,
78
+ 4
79
+ ]')
80
+ response = sg.client.contactdb.lists.delete(request_body: data)
81
+ puts response.status_code
82
+ puts response.body
83
+ puts response.headers
84
+
85
+ ##################################################
86
+ # Update a List #
87
+ # PATCH /contactdb/lists/{list_id} #
88
+
89
+ data = JSON.parse('{
90
+ "name": "newlistname"
91
+ }')
92
+ params = JSON.parse('{"list_id": 1}')
93
+ list_id = "test_url_param"
94
+ response = sg.client.contactdb.lists._(list_id).patch(request_body: data, query_params: params)
95
+ puts response.status_code
96
+ puts response.body
97
+ puts response.headers
98
+
99
+ ##################################################
100
+ # Retrieve a single list #
101
+ # GET /contactdb/lists/{list_id} #
102
+
103
+ params = JSON.parse('{"list_id": 1}')
104
+ list_id = "test_url_param"
105
+ response = sg.client.contactdb.lists._(list_id).get(query_params: params)
106
+ puts response.status_code
107
+ puts response.body
108
+ puts response.headers
109
+
110
+ ##################################################
111
+ # Delete a List #
112
+ # DELETE /contactdb/lists/{list_id} #
113
+
114
+ params = JSON.parse('{"delete_contacts": "true"}')
115
+ list_id = "test_url_param"
116
+ response = sg.client.contactdb.lists._(list_id).delete(query_params: params)
117
+ puts response.status_code
118
+ puts response.body
119
+ puts response.headers
120
+
121
+ ##################################################
122
+ # Add Multiple Recipients to a List #
123
+ # POST /contactdb/lists/{list_id}/recipients #
124
+
125
+ data = JSON.parse('[
126
+ "recipient_id1",
127
+ "recipient_id2"
128
+ ]')
129
+ list_id = "test_url_param"
130
+ response = sg.client.contactdb.lists._(list_id).recipients.post(request_body: data)
131
+ puts response.status_code
132
+ puts response.body
133
+ puts response.headers
134
+
135
+ ##################################################
136
+ # Retrieve all recipients on a List #
137
+ # GET /contactdb/lists/{list_id}/recipients #
138
+
139
+ params = JSON.parse('{"page": 1, "page_size": 1, "list_id": 1}')
140
+ list_id = "test_url_param"
141
+ response = sg.client.contactdb.lists._(list_id).recipients.get(query_params: params)
142
+ puts response.status_code
143
+ puts response.body
144
+ puts response.headers
145
+
146
+ ##################################################
147
+ # Add a Single Recipient to a List #
148
+ # POST /contactdb/lists/{list_id}/recipients/{recipient_id} #
149
+
150
+ list_id = "test_url_param"
151
+ recipient_id = "test_url_param"
152
+ response = sg.client.contactdb.lists._(list_id).recipients._(recipient_id).post()
153
+ puts response.status_code
154
+ puts response.body
155
+ puts response.headers
156
+
157
+ ##################################################
158
+ # Delete a Single Recipient from a Single List #
159
+ # DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} #
160
+
161
+ params = JSON.parse('{"recipient_id": 1, "list_id": 1}')
162
+ list_id = "test_url_param"
163
+ recipient_id = "test_url_param"
164
+ response = sg.client.contactdb.lists._(list_id).recipients._(recipient_id).delete(query_params: params)
165
+ puts response.status_code
166
+ puts response.body
167
+ puts response.headers
168
+
169
+ ##################################################
170
+ # Update Recipient #
171
+ # PATCH /contactdb/recipients #
172
+
173
+ data = JSON.parse('[
174
+ {
175
+ "email": "jones@example.com",
176
+ "first_name": "Guy",
177
+ "last_name": "Jones"
178
+ }
179
+ ]')
180
+ response = sg.client.contactdb.recipients.patch(request_body: data)
181
+ puts response.status_code
182
+ puts response.body
183
+ puts response.headers
184
+
185
+ ##################################################
186
+ # Add recipients #
187
+ # POST /contactdb/recipients #
188
+
189
+ data = JSON.parse('[
190
+ {
191
+ "age": 25,
192
+ "email": "example@example.com",
193
+ "first_name": "",
194
+ "last_name": "User"
195
+ },
196
+ {
197
+ "age": 25,
198
+ "email": "example2@example.com",
199
+ "first_name": "Example",
200
+ "last_name": "User"
201
+ }
202
+ ]')
203
+ response = sg.client.contactdb.recipients.post(request_body: data)
204
+ puts response.status_code
205
+ puts response.body
206
+ puts response.headers
207
+
208
+ ##################################################
209
+ # Retrieve recipients #
210
+ # GET /contactdb/recipients #
211
+
212
+ params = JSON.parse('{"page": 1, "page_size": 1}')
213
+ response = sg.client.contactdb.recipients.get(query_params: params)
214
+ puts response.status_code
215
+ puts response.body
216
+ puts response.headers
217
+
218
+ ##################################################
219
+ # Delete Recipient #
220
+ # DELETE /contactdb/recipients #
221
+
222
+ data = JSON.parse('[
223
+ "recipient_id1",
224
+ "recipient_id2"
225
+ ]')
226
+ response = sg.client.contactdb.recipients.delete(request_body: data)
227
+ puts response.status_code
228
+ puts response.body
229
+ puts response.headers
230
+
231
+ ##################################################
232
+ # Retrieve the count of billable recipients #
233
+ # GET /contactdb/recipients/billable_count #
234
+
235
+ response = sg.client.contactdb.recipients.billable_count.get()
236
+ puts response.status_code
237
+ puts response.body
238
+ puts response.headers
239
+
240
+ ##################################################
241
+ # Retrieve a Count of Recipients #
242
+ # GET /contactdb/recipients/count #
243
+
244
+ response = sg.client.contactdb.recipients.count.get()
245
+ puts response.status_code
246
+ puts response.body
247
+ puts response.headers
248
+
249
+ ##################################################
250
+ # Retrieve recipients matching search criteria #
251
+ # GET /contactdb/recipients/search #
252
+
253
+ params = JSON.parse('{"{field_name}": "test_string"}')
254
+ response = sg.client.contactdb.recipients.search.get(query_params: params)
255
+ puts response.status_code
256
+ puts response.body
257
+ puts response.headers
258
+
259
+ ##################################################
260
+ # Retrieve a single recipient #
261
+ # GET /contactdb/recipients/{recipient_id} #
262
+
263
+ recipient_id = "test_url_param"
264
+ response = sg.client.contactdb.recipients._(recipient_id).get()
265
+ puts response.status_code
266
+ puts response.body
267
+ puts response.headers
268
+
269
+ ##################################################
270
+ # Delete a Recipient #
271
+ # DELETE /contactdb/recipients/{recipient_id} #
272
+
273
+ recipient_id = "test_url_param"
274
+ response = sg.client.contactdb.recipients._(recipient_id).delete()
275
+ puts response.status_code
276
+ puts response.body
277
+ puts response.headers
278
+
279
+ ##################################################
280
+ # Retrieve the lists that a recipient is on #
281
+ # GET /contactdb/recipients/{recipient_id}/lists #
282
+
283
+ recipient_id = "test_url_param"
284
+ response = sg.client.contactdb.recipients._(recipient_id).lists.get()
285
+ puts response.status_code
286
+ puts response.body
287
+ puts response.headers
288
+
289
+ ##################################################
290
+ # Retrieve reserved fields #
291
+ # GET /contactdb/reserved_fields #
292
+
293
+ response = sg.client.contactdb.reserved_fields.get()
294
+ puts response.status_code
295
+ puts response.body
296
+ puts response.headers
297
+
298
+ ##################################################
299
+ # Create a Segment #
300
+ # POST /contactdb/segments #
301
+
302
+ data = JSON.parse('{
303
+ "conditions": [
304
+ {
305
+ "and_or": "",
306
+ "field": "last_name",
307
+ "operator": "eq",
308
+ "value": "Miller"
309
+ },
310
+ {
311
+ "and_or": "and",
312
+ "field": "last_clicked",
313
+ "operator": "gt",
314
+ "value": "01/02/2015"
315
+ },
316
+ {
317
+ "and_or": "or",
318
+ "field": "clicks.campaign_identifier",
319
+ "operator": "eq",
320
+ "value": "513"
321
+ }
322
+ ],
323
+ "list_id": 4,
324
+ "name": "Last Name Miller"
325
+ }')
326
+ response = sg.client.contactdb.segments.post(request_body: data)
327
+ puts response.status_code
328
+ puts response.body
329
+ puts response.headers
330
+
331
+ ##################################################
332
+ # Retrieve all segments #
333
+ # GET /contactdb/segments #
334
+
335
+ response = sg.client.contactdb.segments.get()
336
+ puts response.status_code
337
+ puts response.body
338
+ puts response.headers
339
+
340
+ ##################################################
341
+ # Update a segment #
342
+ # PATCH /contactdb/segments/{segment_id} #
343
+
344
+ data = JSON.parse('{
345
+ "conditions": [
346
+ {
347
+ "and_or": "",
348
+ "field": "last_name",
349
+ "operator": "eq",
350
+ "value": "Miller"
351
+ }
352
+ ],
353
+ "list_id": 5,
354
+ "name": "The Millers"
355
+ }')
356
+ params = JSON.parse('{"segment_id": "test_string"}')
357
+ segment_id = "test_url_param"
358
+ response = sg.client.contactdb.segments._(segment_id).patch(request_body: data, query_params: params)
359
+ puts response.status_code
360
+ puts response.body
361
+ puts response.headers
362
+
363
+ ##################################################
364
+ # Retrieve a segment #
365
+ # GET /contactdb/segments/{segment_id} #
366
+
367
+ params = JSON.parse('{"segment_id": 1}')
368
+ segment_id = "test_url_param"
369
+ response = sg.client.contactdb.segments._(segment_id).get(query_params: params)
370
+ puts response.status_code
371
+ puts response.body
372
+ puts response.headers
373
+
374
+ ##################################################
375
+ # Delete a segment #
376
+ # DELETE /contactdb/segments/{segment_id} #
377
+
378
+ params = JSON.parse('{"delete_contacts": "true"}')
379
+ segment_id = "test_url_param"
380
+ response = sg.client.contactdb.segments._(segment_id).delete(query_params: params)
381
+ puts response.status_code
382
+ puts response.body
383
+ puts response.headers
384
+
385
+ ##################################################
386
+ # Retrieve recipients on a segment #
387
+ # GET /contactdb/segments/{segment_id}/recipients #
388
+
389
+ params = JSON.parse('{"page": 1, "page_size": 1}')
390
+ segment_id = "test_url_param"
391
+ response = sg.client.contactdb.segments._(segment_id).recipients.get(query_params: params)
392
+ puts response.status_code
393
+ puts response.body
394
+ puts response.headers
395
+
@@ -0,0 +1,16 @@
1
+ require 'sendgrid-ruby'
2
+
3
+
4
+ sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
5
+
6
+
7
+ ##################################################
8
+ # Retrieve email statistics by device type. #
9
+ # GET /devices/stats #
10
+
11
+ params = JSON.parse('{"aggregated_by": "day", "limit": 1, "start_date": "2016-01-01", "end_date": "2016-04-01", "offset": 1}')
12
+ response = sg.client.devices.stats.get(query_params: params)
13
+ puts response.status_code
14
+ puts response.body
15
+ puts response.headers
16
+
@@ -0,0 +1,16 @@
1
+ require 'sendgrid-ruby'
2
+
3
+
4
+ sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
5
+
6
+
7
+ ##################################################
8
+ # Retrieve email statistics by country and state/province. #
9
+ # GET /geo/stats #
10
+
11
+ params = JSON.parse('{"end_date": "2016-04-01", "country": "US", "aggregated_by": "day", "limit": 1, "offset": 1, "start_date": "2016-01-01"}')
12
+ response = sg.client.geo.stats.get(query_params: params)
13
+ puts response.status_code
14
+ puts response.body
15
+ puts response.headers
16
+
@@ -0,0 +1,147 @@
1
+ require 'sendgrid-ruby'
2
+ include SendGrid
3
+ require 'json'
4
+
5
+ def hello_world
6
+ from = Email.new(email: 'test@example.com')
7
+ subject = 'Hello World from the Twilio SendGrid Ruby Library'
8
+ to = Email.new(email: 'test@example.com')
9
+ content = Content.new(type: 'text/plain', value: 'some text here')
10
+ mail = SendGrid::Mail.new(from, subject, to, content)
11
+ # puts JSON.pretty_generate(mail.to_json)
12
+ puts mail.to_json
13
+
14
+ sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'], host: 'https://api.sendgrid.com')
15
+ response = sg.client.mail._('send').post(request_body: mail.to_json)
16
+ puts response.status_code
17
+ puts response.body
18
+ puts response.headers
19
+ end
20
+
21
+ def kitchen_sink
22
+ mail = SendGrid::Mail.new
23
+ mail.from = Email.new(email: 'test@example.com')
24
+ mail.subject = 'Hello World from the Twilio SendGrid Ruby Library'
25
+ personalization = Personalization.new
26
+ personalization.add_to(Email.new(email: 'test1@example.com', name: 'Example User'))
27
+ personalization.add_to(Email.new(email: 'test2@example.com', name: 'Example User'))
28
+ personalization.add_cc(Email.new(email: 'test3@example.com', name: 'Example User'))
29
+ personalization.add_cc(Email.new(email: 'test4@example.com', name: 'Example User'))
30
+ personalization.add_bcc(Email.new(email: 'test5@example.com', name: 'Example User'))
31
+ personalization.add_bcc(Email.new(email: 'test6@example.com', name: 'Example User'))
32
+ personalization.subject = 'Hello World from the Personalized Twilio SendGrid Ruby Library'
33
+ personalization.add_header(Header.new(key: 'X-Test', value: 'True'))
34
+ personalization.add_header(Header.new(key: 'X-Mock', value: 'False'))
35
+ personalization.add_substitution(Substitution.new(key: '%name%', value: 'Example User'))
36
+ personalization.add_substitution(Substitution.new(key: '%city%', value: 'Denver'))
37
+ personalization.add_custom_arg(CustomArg.new(key: 'user_id', value: '343'))
38
+ personalization.add_custom_arg(CustomArg.new(key: 'type', value: 'marketing'))
39
+ personalization.send_at = 1443636843
40
+ mail.add_personalization(personalization)
41
+
42
+ personalization2 = Personalization.new
43
+ personalization2.add_to(Email.new(email: 'test1@example.com', name: 'Example User'))
44
+ personalization2.add_to(Email.new(email: 'test2@example.com', name: 'Example User'))
45
+ personalization2.add_cc(Email.new(email: 'test3@example.com', name: 'Example User'))
46
+ personalization2.add_cc(Email.new(email: 'test4@example.com', name: 'Example User'))
47
+ personalization2.add_bcc(Email.new(email: 'test5@example.com', name: 'Example User'))
48
+ personalization2.add_bcc(Email.new(email: 'test6@example.com', name: 'Example User'))
49
+ personalization2.subject = 'Hello World from the Personalized Twilio SendGrid Ruby Library'
50
+ personalization2.add_header(Header.new(key: 'X-Test', value: 'True'))
51
+ personalization2.add_header(Header.new(key: 'X-Mock', value: 'False'))
52
+ personalization2.add_substitution(Substitution.new(key: '%name%', value: 'Example User'))
53
+ personalization2.add_substitution(Substitution.new(key: '%city%', value: 'Denver'))
54
+ personalization2.add_custom_arg(CustomArg.new(key: 'user_id', value: '343'))
55
+ personalization2.add_custom_arg(CustomArg.new(key: 'type', value: 'marketing'))
56
+ personalization2.send_at = 1443636843
57
+ mail.add_personalization(personalization2)
58
+
59
+ mail.add_content(Content.new(type: 'text/plain', value: 'some text here'))
60
+ mail.add_content(Content.new(type: 'text/html', value: '<html><body>some text here</body></html>'))
61
+
62
+ attachment = Attachment.new
63
+ attachment.content = 'TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12'
64
+ attachment.type = 'application/pdf'
65
+ attachment.filename = 'balance_001.pdf'
66
+ attachment.disposition = 'attachment'
67
+ attachment.content_id = 'Balance Sheet'
68
+ mail.add_attachment(attachment)
69
+
70
+ attachment2 = Attachment.new
71
+ attachment2.content = 'BwdW'
72
+ attachment2.type = 'image/png'
73
+ attachment2.filename = 'banner.png'
74
+ attachment2.disposition = 'inline'
75
+ attachment2.content_id = 'Banner'
76
+ mail.add_attachment(attachment2)
77
+
78
+ mail.template_id = '13b8f94f-bcae-4ec6-b752-70d6cb59f932'
79
+
80
+ mail.add_section(Section.new(key: '%section1%', value: 'Substitution Text for Section 1'))
81
+ mail.add_section(Section.new(key: '%section2%', value: 'Substitution Text for Section 2'))
82
+
83
+ mail.add_header(Header.new(key: 'X-Test3', value: 'test3'))
84
+ mail.add_header(Header.new(key: 'X-Test4', value: 'test4'))
85
+
86
+ mail.add_category(Category.new(name: 'May'))
87
+ mail.add_category(Category.new(name: '2016'))
88
+
89
+ mail.add_custom_arg(CustomArg.new(key: 'campaign', value: 'welcome'))
90
+ mail.add_custom_arg(CustomArg.new(key: 'weekday', value: 'morning'))
91
+
92
+ mail.send_at = 1443636842
93
+
94
+ # This must be a valid [batch ID](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html) to work
95
+ # mail.batch_id = 'sendgrid_batch_id'
96
+
97
+ mail.asm = ASM.new(group_id: 99, groups_to_display: [4,5,6,7,8])
98
+
99
+ mail.ip_pool_name = '23'
100
+
101
+ mail_settings = MailSettings.new
102
+ mail_settings.bcc = BccSettings.new(enable: true, email: 'test@example.com')
103
+ mail_settings.bypass_list_management = BypassListManagement.new(enable: true)
104
+ mail_settings.footer = Footer.new(enable: true, text: 'Footer Text', html: '<html><body>Footer Text</body></html>')
105
+ mail_settings.sandbox_mode = SandBoxMode.new(enable: true)
106
+ mail_settings.spam_check = SpamCheck.new(enable: true, threshold: 1, post_to_url: 'https://spamcatcher.sendgrid.com')
107
+ mail.mail_settings = mail_settings
108
+
109
+ tracking_settings = TrackingSettings.new
110
+ tracking_settings.click_tracking = ClickTracking.new(enable: false, enable_text: false)
111
+ tracking_settings.open_tracking = OpenTracking.new(enable: true, substitution_tag: 'Optional tag to replace with the open image in the body of the message')
112
+ tracking_settings.subscription_tracking = SubscriptionTracking.new(enable: true, text: 'text to insert into the text/plain portion of the message', html: 'html to insert into the text/html portion of the message', substitution_tag: 'Optional tag to replace with the open image in the body of the message')
113
+ tracking_settings.ganalytics = Ganalytics.new(enable: true, utm_source: 'some source', utm_medium: 'some medium', utm_term: 'some term', utm_content: 'some content', utm_campaign: 'some campaign')
114
+ mail.tracking_settings = tracking_settings
115
+
116
+ mail.reply_to = Email.new(email: 'test@example.com')
117
+
118
+ # puts JSON.pretty_generate(mail.to_json)
119
+ puts mail.to_json
120
+
121
+ sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'], host: 'https://api.sendgrid.com')
122
+ response = sg.client.mail._('send').post(request_body: mail.to_json)
123
+ puts response.status_code
124
+ puts response.body
125
+ puts response.headers
126
+ end
127
+
128
+ def dynamic_template_data_hello_world
129
+ mail = Mail.new
130
+ mail.template_id = '' # a non-legacy template id
131
+ mail.from = Email.new(email: 'test@example.com')
132
+ subject = 'Dynamic Template Data Hello World from the Twilio SendGrid Ruby Library'
133
+ mail.subject = subject
134
+ personalization = Personalization.new
135
+ personalization.add_to(Email.new(email: 'test1@example.com', name: 'Example User'))
136
+ personalization.add_dynamic_template_data({
137
+ "variable" => [
138
+ {"foo" => "bar"}, {"foo" => "baz"}
139
+ ]
140
+ })
141
+ mail.add_personalization(personalization)
142
+ end
143
+
144
+ hello_world
145
+ kitchen_sink
146
+ dynamic_template_data_hello_world
147
+
@@ -0,0 +1,23 @@
1
+ require 'sendgrid-ruby'
2
+ include SendGrid
3
+
4
+ sg_client = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']).client
5
+ settings = SendGrid::Settings.new(sendgrid_client: sg_client)
6
+
7
+ # Fetch settings
8
+ response = settings.bcc
9
+ puts response.status_code
10
+ puts response.body
11
+ puts response.headers
12
+
13
+ # Turn on bcc settings
14
+ response = settings.update_bcc(enabled: true, email: "email@example.com")
15
+ puts response.status_code
16
+ puts response.body
17
+ puts response.headers
18
+
19
+ # Turn off bcc settings
20
+ response = settings.update_bcc(enabled: false)
21
+ puts response.status_code
22
+ puts response.body
23
+ puts response.headers
@@ -0,0 +1,42 @@
1
+ require 'sendgrid-ruby'
2
+ require 'date'
3
+
4
+ include SendGrid
5
+
6
+ sg_client = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']).client
7
+ stats = SendGrid::EmailStats.new(sendgrid_client: sg_client)
8
+
9
+ # Fetch stats by day, between 2 dates
10
+ from = Date.new(2017, 10, 01)
11
+ to = Date.new(2017, 10, 12)
12
+
13
+ email_stats = stats.by_day(from, to)
14
+
15
+ email_stats.metrics
16
+
17
+ if !email_stats.error?
18
+ email_stats.metrics.each do |metric|
19
+ puts "Date - #{metric.date}"
20
+ puts "Number of Requests - #{metric.requests}"
21
+ puts "Bounces - #{metric.bounces}"
22
+ puts "Opens - #{metric.opens}"
23
+ puts "Clicks - #{metric.clicks}"
24
+ end
25
+ end
26
+
27
+ # Fetch stats by week, between 2 dates for a category
28
+ from = Date.new(2017, 10, 01)
29
+ to = Date.new(2017, 10, 12)
30
+ category = 'abcd'
31
+
32
+ email_stats = stats.by_week(from, to, category)
33
+
34
+ if !email_stats.error?
35
+ email_stats.metrics.each do |metric|
36
+ puts "Date - #{metric.date}"
37
+ puts "Number of Requests - #{metric.requests}"
38
+ puts "Bounces - #{metric.bounces}"
39
+ puts "Opens - #{metric.opens}"
40
+ puts "Clicks - #{metric.clicks}"
41
+ end
42
+ end