sendgrid-ruby 1.1.6 → 3.0.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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE +17 -0
  3. data/.travis.yml +1 -6
  4. data/CHANGELOG.md +6 -0
  5. data/CONTRIBUTING.md +202 -0
  6. data/Gemfile +3 -5
  7. data/LICENSE.txt +1 -1
  8. data/README.md +74 -248
  9. data/Rakefile +8 -6
  10. data/USAGE.md +4645 -0
  11. data/examples/accesssettings/accesssettings.rb +89 -0
  12. data/examples/apikeys/apikeys.rb +95 -0
  13. data/examples/asm/asm.rb +169 -0
  14. data/examples/browsers/browsers.rb +29 -0
  15. data/examples/campaigns/campaigns.rb +166 -0
  16. data/examples/categories/categories.rb +49 -0
  17. data/examples/clients/clients.rb +40 -0
  18. data/examples/contactdb/contactdb.rb +398 -0
  19. data/examples/devices/devices.rb +29 -0
  20. data/examples/geo/geo.rb +29 -0
  21. data/examples/helpers/mail/example.rb +130 -0
  22. data/examples/ips/ips.rb +167 -0
  23. data/examples/mail/mail.rb +191 -0
  24. data/examples/mailboxproviders/mailboxproviders.rb +29 -0
  25. data/examples/mailsettings/mailsettings.rb +232 -0
  26. data/examples/partnersettings/partnersettings.rb +52 -0
  27. data/examples/scopes/scopes.rb +28 -0
  28. data/examples/stats/stats.rb +29 -0
  29. data/examples/subusers/subusers.rb +182 -0
  30. data/examples/suppression/suppression.rb +186 -0
  31. data/examples/templates/templates.rb +142 -0
  32. data/examples/trackingsettings/trackingsettings.rb +123 -0
  33. data/examples/user/user.rb +256 -0
  34. data/examples/whitelabel/whitelabel.rb +323 -0
  35. data/lib/helpers/mail/README.md +14 -0
  36. data/lib/helpers/mail/mail.rb +999 -0
  37. data/lib/sendgrid-ruby.rb +33 -8
  38. data/sendgrid-ruby.gemspec +5 -17
  39. data/test/helpers/mail/test_mail.rb +122 -0
  40. data/test/test_sendgrid-ruby.rb +2016 -0
  41. metadata +42 -190
  42. data/.env_sample +0 -3
  43. data/.rspec +0 -2
  44. data/.rubocop.yml +0 -30
  45. data/FETCH_HEAD +0 -0
  46. data/Guardfile +0 -10
  47. data/example.rb +0 -41
  48. data/lib/sendgrid/client.rb +0 -62
  49. data/lib/sendgrid/exceptions.rb +0 -7
  50. data/lib/sendgrid/mail.rb +0 -182
  51. data/lib/sendgrid/recipient.rb +0 -29
  52. data/lib/sendgrid/response.rb +0 -14
  53. data/lib/sendgrid/template.rb +0 -26
  54. data/lib/sendgrid/template_mailer.rb +0 -59
  55. data/lib/sendgrid/version.rb +0 -3
  56. data/spec/lib/sendgrid/client_spec.rb +0 -87
  57. data/spec/lib/sendgrid/mail_spec.rb +0 -151
  58. data/spec/lib/sendgrid/recipient_spec.rb +0 -91
  59. data/spec/lib/sendgrid/template_mailer_spec.rb +0 -86
  60. data/spec/lib/sendgrid/template_spec.rb +0 -61
  61. data/spec/lib/sendgrid_spec.rb +0 -7
  62. data/spec/spec_helper.rb +0 -1
@@ -0,0 +1,29 @@
1
+ require 'sendgrid-ruby'
2
+
3
+
4
+ sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
5
+
6
+
7
+ import com.fasterxml.jackson.databind.JsonNode;
8
+ import com.fasterxml.jackson.databind.ObjectMapper;
9
+
10
+ import com.sendgrid.Client;
11
+ import com.sendgrid.Method;
12
+ import com.sendgrid.Request;
13
+ import com.sendgrid.Response;
14
+ import com.sendgrid.SendGrid;
15
+
16
+ import java.io.IOException;
17
+ import java.util.HashMap;
18
+ import java.util.Map;
19
+
20
+ ##################################################
21
+ # Retrieve email statistics by device type. #
22
+ # GET /devices/stats #
23
+
24
+ params = JSON.parse('{"aggregated_by": "day", "limit": 1, "start_date": "2016-01-01", "end_date": "2016-04-01", "offset": 1}')
25
+ response = sg.client.devices.stats.get(query_params: params)
26
+ puts response.status_code
27
+ puts response.body
28
+ puts response.headers
29
+
@@ -0,0 +1,29 @@
1
+ require 'sendgrid-ruby'
2
+
3
+
4
+ sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
5
+
6
+
7
+ import com.fasterxml.jackson.databind.JsonNode;
8
+ import com.fasterxml.jackson.databind.ObjectMapper;
9
+
10
+ import com.sendgrid.Client;
11
+ import com.sendgrid.Method;
12
+ import com.sendgrid.Request;
13
+ import com.sendgrid.Response;
14
+ import com.sendgrid.SendGrid;
15
+
16
+ import java.io.IOException;
17
+ import java.util.HashMap;
18
+ import java.util.Map;
19
+
20
+ ##################################################
21
+ # Retrieve email statistics by country and state/province. #
22
+ # GET /geo/stats #
23
+
24
+ params = JSON.parse('{"end_date": "2016-04-01", "country": "US", "aggregated_by": "day", "limit": 1, "offset": 1, "start_date": "2016-01-01"}')
25
+ response = sg.client.geo.stats.get(query_params: params)
26
+ puts response.status_code
27
+ puts response.body
28
+ puts response.headers
29
+
@@ -0,0 +1,130 @@
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 SendGrid Ruby Library'
8
+ to = Email.new(email: 'test@example.com')
9
+ content = Content.new(type: 'text/plain', value: 'some text here')
10
+ mail = 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.response_body
18
+ puts response.response_headers
19
+ end
20
+
21
+ def kitchen_sink
22
+ mail = Mail.new
23
+ mail.from = Email.new(email: 'test@example.com')
24
+ mail.subject = 'Hello World from the SendGrid Ruby Library'
25
+ personalization = Personalization.new
26
+ personalization.to = Email.new(email: 'test1@example.com', name: 'Example User')
27
+ personalization.to = Email.new(email: 'test2@example.com', name: 'Example User')
28
+ personalization.cc = Email.new(email: 'test3@example.com', name: 'Example User')
29
+ personalization.cc = Email.new(email: 'test4@example.com', name: 'Example User')
30
+ personalization.bcc = Email.new(email: 'test5@example.com', name: 'Example User')
31
+ personalization.bcc = Email.new(email: 'test6@example.com', name: 'Example User')
32
+ personalization.subject = 'Hello World from the Personalized SendGrid Python Library'
33
+ personalization.headers = Header.new(key: 'X-Test', value: 'True')
34
+ personalization.headers = Header.new(key: 'X-Mock', value: 'False')
35
+ personalization.substitutions = Substitution.new(key: '%name%', value: 'Example User')
36
+ personalization.substitutions = Substitution.new(key: '%city%', value: 'Denver')
37
+ personalization.custom_args = CustomArg.new(key: 'user_id', value: '343')
38
+ personalization.custom_args = CustomArg.new(key: 'type', value: 'marketing')
39
+ personalization.send_at = 1443636843
40
+ mail.personalizations = personalization
41
+
42
+ personalization2 = Personalization.new
43
+ personalization2.to = Email.new(email: 'test1@example.com', name: 'Example User')
44
+ personalization2.to = Email.new(email: 'test2@example.com', name: 'Example User')
45
+ personalization2.cc = Email.new(email: 'test3@example.com', name: 'Example User')
46
+ personalization2.cc = Email.new(email: 'test4@example.com', name: 'Example User')
47
+ personalization2.bcc = Email.new(email: 'test5@example.com', name: 'Example User')
48
+ personalization2.bcc = Email.new(email: 'test6@example.com', name: 'Example User')
49
+ personalization2.subject = 'Hello World from the Personalized SendGrid Python Library'
50
+ personalization2.headers = Header.new(key: 'X-Test', value: 'True')
51
+ personalization2.headers = Header.new(key: 'X-Mock', value: 'False')
52
+ personalization2.substitutions = Substitution.new(key: '%name%', value: 'Example User')
53
+ personalization2.substitutions = Substitution.new(key: '%city%', value: 'Denver')
54
+ personalization2.custom_args = CustomArg.new(key: 'user_id', value: '343')
55
+ personalization2.custom_args = CustomArg.new(key: 'type', value: 'marketing')
56
+ personalization2.send_at = 1443636843
57
+ mail.personalizations = personalization2
58
+
59
+ mail.contents = Content.new(type: 'text/plain', value: 'some text here')
60
+ mail.contents = 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
+
69
+ mail.attachments = attachment
70
+
71
+ attachment2 = Attachment.new
72
+ attachment2.content = 'BwdW'
73
+ attachment2.type = 'image/png'
74
+ attachment2.filename = 'banner.png'
75
+ attachment2.disposition = 'inline'
76
+ attachment2.content_id = 'Banner'
77
+ mail.attachments = attachment2
78
+
79
+ mail.template_id = '13b8f94f-bcae-4ec6-b752-70d6cb59f932'
80
+
81
+ mail.sections = Section.new(key: '%section1%', value: 'Substitution Text for Section 1')
82
+ mail.sections = Section.new(key: '%section2%', value: 'Substitution Text for Section 2')
83
+
84
+ mail.headers = Header.new(key: 'X-Test3', value: 'test3')
85
+ mail.headers = Header.new(key: 'X-Test4', value: 'test4')
86
+
87
+ mail.categories = Category.new(name: 'May')
88
+ mail.categories = Category.new(name: '2016')
89
+
90
+ mail.custom_args = CustomArg.new(key: 'campaign', value: 'welcome')
91
+ mail.custom_args = CustomArg.new(key: 'weekday', value: 'morning')
92
+
93
+ mail.send_at = 1443636842
94
+
95
+ # This must be a valid [batch ID](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html) to work
96
+ # mail.batch_id = 'sendgrid_batch_id'
97
+
98
+ mail.asm = ASM.new(group_id: 99, groups_to_display: [4,5,6,7,8])
99
+
100
+ mail.ip_pool_name = '23'
101
+
102
+ mail_settings = MailSettings.new
103
+ mail_settings.bcc = BccSettings.new(enable: true, email: 'test@example.com')
104
+ mail_settings.bypass_list_management = BypassListManagement.new(enable: true)
105
+ mail_settings.footer = Footer.new(enable: true, text: 'Footer Text', html: '<html><body>Footer Text</body></html>')
106
+ mail_settings.sandbox_mode = SandBoxMode.new(enable: true)
107
+ mail_settings.spam_check = SpamCheck.new(enable: true, threshold: 1, post_to_url: 'https://spamcatcher.sendgrid.com')
108
+ mail.mail_settings = mail_settings
109
+
110
+ tracking_settings = TrackingSettings.new
111
+ tracking_settings.click_tracking = ClickTracking.new(enable: false, enable_text: false)
112
+ tracking_settings.open_tracking = OpenTracking.new(enable: true, substitution_tag: 'Optional tag to replace with the open image in the body of the message')
113
+ 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')
114
+ 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')
115
+ mail.tracking_settings = tracking_settings
116
+
117
+ mail.reply_to = Email.new(email: 'test@example.com')
118
+
119
+ # puts JSON.pretty_generate(mail.to_json)
120
+ puts mail.to_json
121
+
122
+ sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'], host: 'https://api.sendgrid.com')
123
+ response = sg.client.mail._('send').post(request_body: mail.to_json)
124
+ puts response.status_code
125
+ puts response.response_body
126
+ puts response.response_headers
127
+ end
128
+
129
+ hello_world
130
+ kitchen_sink
@@ -0,0 +1,167 @@
1
+ require 'sendgrid-ruby'
2
+
3
+
4
+ sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
5
+
6
+
7
+ import com.fasterxml.jackson.databind.JsonNode;
8
+ import com.fasterxml.jackson.databind.ObjectMapper;
9
+
10
+ import com.sendgrid.Client;
11
+ import com.sendgrid.Method;
12
+ import com.sendgrid.Request;
13
+ import com.sendgrid.Response;
14
+ import com.sendgrid.SendGrid;
15
+
16
+ import java.io.IOException;
17
+ import java.util.HashMap;
18
+ import java.util.Map;
19
+
20
+ ##################################################
21
+ # Retrieve all IP addresses #
22
+ # GET /ips #
23
+
24
+ params = JSON.parse('{"subuser": "test_string", "ip": "test_string", "limit": 1, "exclude_whitelabels": "true", "offset": 1}')
25
+ response = sg.client.ips.get(query_params: params)
26
+ puts response.status_code
27
+ puts response.body
28
+ puts response.headers
29
+
30
+ ##################################################
31
+ # Retrieve all assigned IPs #
32
+ # GET /ips/assigned #
33
+
34
+ response = sg.client.ips.assigned.get()
35
+ puts response.status_code
36
+ puts response.body
37
+ puts response.headers
38
+
39
+ ##################################################
40
+ # Create an IP pool. #
41
+ # POST /ips/pools #
42
+
43
+ data = JSON.parse('{
44
+ "name": "marketing"
45
+ }')
46
+ response = sg.client.ips.pools.post(request_body: data)
47
+ puts response.status_code
48
+ puts response.body
49
+ puts response.headers
50
+
51
+ ##################################################
52
+ # Retrieve all IP pools. #
53
+ # GET /ips/pools #
54
+
55
+ response = sg.client.ips.pools.get()
56
+ puts response.status_code
57
+ puts response.body
58
+ puts response.headers
59
+
60
+ ##################################################
61
+ # Update an IP pools name. #
62
+ # PUT /ips/pools/{pool_name} #
63
+
64
+ data = JSON.parse('{
65
+ "name": "new_pool_name"
66
+ }')
67
+ pool_name = "test_url_param"
68
+ response = sg.client.ips.pools._(pool_name).put(request_body: data)
69
+ puts response.status_code
70
+ puts response.body
71
+ puts response.headers
72
+
73
+ ##################################################
74
+ # Retrieve all IPs in a specified pool. #
75
+ # GET /ips/pools/{pool_name} #
76
+
77
+ pool_name = "test_url_param"
78
+ response = sg.client.ips.pools._(pool_name).get()
79
+ puts response.status_code
80
+ puts response.body
81
+ puts response.headers
82
+
83
+ ##################################################
84
+ # Delete an IP pool. #
85
+ # DELETE /ips/pools/{pool_name} #
86
+
87
+ pool_name = "test_url_param"
88
+ response = sg.client.ips.pools._(pool_name).delete()
89
+ puts response.status_code
90
+ puts response.body
91
+ puts response.headers
92
+
93
+ ##################################################
94
+ # Add an IP address to a pool #
95
+ # POST /ips/pools/{pool_name}/ips #
96
+
97
+ data = JSON.parse('{
98
+ "ip": "0.0.0.0"
99
+ }')
100
+ pool_name = "test_url_param"
101
+ response = sg.client.ips.pools._(pool_name).ips.post(request_body: data)
102
+ puts response.status_code
103
+ puts response.body
104
+ puts response.headers
105
+
106
+ ##################################################
107
+ # Remove an IP address from a pool. #
108
+ # DELETE /ips/pools/{pool_name}/ips/{ip} #
109
+
110
+ pool_name = "test_url_param"
111
+ ip = "test_url_param"
112
+ response = sg.client.ips.pools._(pool_name).ips._(ip).delete()
113
+ puts response.status_code
114
+ puts response.body
115
+ puts response.headers
116
+
117
+ ##################################################
118
+ # Add an IP to warmup #
119
+ # POST /ips/warmup #
120
+
121
+ data = JSON.parse('{
122
+ "ip": "0.0.0.0"
123
+ }')
124
+ response = sg.client.ips.warmup.post(request_body: data)
125
+ puts response.status_code
126
+ puts response.body
127
+ puts response.headers
128
+
129
+ ##################################################
130
+ # Retrieve all IPs currently in warmup #
131
+ # GET /ips/warmup #
132
+
133
+ response = sg.client.ips.warmup.get()
134
+ puts response.status_code
135
+ puts response.body
136
+ puts response.headers
137
+
138
+ ##################################################
139
+ # Retrieve warmup status for a specific IP address #
140
+ # GET /ips/warmup/{ip_address} #
141
+
142
+ ip_address = "test_url_param"
143
+ response = sg.client.ips.warmup._(ip_address).get()
144
+ puts response.status_code
145
+ puts response.body
146
+ puts response.headers
147
+
148
+ ##################################################
149
+ # Remove an IP from warmup #
150
+ # DELETE /ips/warmup/{ip_address} #
151
+
152
+ ip_address = "test_url_param"
153
+ response = sg.client.ips.warmup._(ip_address).delete()
154
+ puts response.status_code
155
+ puts response.body
156
+ puts response.headers
157
+
158
+ ##################################################
159
+ # Retrieve all IP pools an IP address belongs to #
160
+ # GET /ips/{ip_address} #
161
+
162
+ ip_address = "test_url_param"
163
+ response = sg.client.ips._(ip_address).get()
164
+ puts response.status_code
165
+ puts response.body
166
+ puts response.headers
167
+
@@ -0,0 +1,191 @@
1
+ require 'sendgrid-ruby'
2
+
3
+
4
+ sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
5
+
6
+
7
+ import com.fasterxml.jackson.databind.JsonNode;
8
+ import com.fasterxml.jackson.databind.ObjectMapper;
9
+
10
+ import com.sendgrid.Client;
11
+ import com.sendgrid.Method;
12
+ import com.sendgrid.Request;
13
+ import com.sendgrid.Response;
14
+ import com.sendgrid.SendGrid;
15
+
16
+ import java.io.IOException;
17
+ import java.util.HashMap;
18
+ import java.util.Map;
19
+
20
+ ##################################################
21
+ # Create a batch ID #
22
+ # POST /mail/batch #
23
+
24
+ response = sg.client.mail.batch.post()
25
+ puts response.status_code
26
+ puts response.body
27
+ puts response.headers
28
+
29
+ ##################################################
30
+ # Validate batch ID #
31
+ # GET /mail/batch/{batch_id} #
32
+
33
+ batch_id = "test_url_param"
34
+ response = sg.client.mail.batch._(batch_id).get()
35
+ puts response.status_code
36
+ puts response.body
37
+ puts response.headers
38
+
39
+ ##################################################
40
+ # v3 Mail Send #
41
+ # POST /mail/send #
42
+ # This endpoint has a helper, check it out [here](https://github.com/sendgrid/sendgrid-ruby/blob/master/lib/helpers/mail/README.md).
43
+
44
+ data = JSON.parse('{
45
+ "asm": {
46
+ "group_id": 1,
47
+ "groups_to_display": [
48
+ 1,
49
+ 2,
50
+ 3
51
+ ]
52
+ },
53
+ "attachments": [
54
+ {
55
+ "content": "[BASE64 encoded content block here]",
56
+ "content_id": "ii_139db99fdb5c3704",
57
+ "disposition": "inline",
58
+ "filename": "file1.jpg",
59
+ "name": "file1",
60
+ "type": "jpg"
61
+ }
62
+ ],
63
+ "batch_id": "[YOUR BATCH ID GOES HERE]",
64
+ "categories": [
65
+ "category1",
66
+ "category2"
67
+ ],
68
+ "content": [
69
+ {
70
+ "type": "text/html",
71
+ "value": "<html><p>Hello, world!</p><img src=[CID GOES HERE]></img></html>"
72
+ }
73
+ ],
74
+ "custom_args": {
75
+ "New Argument 1": "New Value 1",
76
+ "activationAttempt": "1",
77
+ "customerAccountNumber": "[CUSTOMER ACCOUNT NUMBER GOES HERE]"
78
+ },
79
+ "from": {
80
+ "email": "sam.smith@example.com",
81
+ "name": "Sam Smith"
82
+ },
83
+ "headers": {},
84
+ "ip_pool_name": "[YOUR POOL NAME GOES HERE]",
85
+ "mail_settings": {
86
+ "bcc": {
87
+ "email": "ben.doe@example.com",
88
+ "enable": true
89
+ },
90
+ "bypass_list_management": {
91
+ "enable": true
92
+ },
93
+ "footer": {
94
+ "enable": true,
95
+ "html": "<p>Thanks</br>The SendGrid Team</p>",
96
+ "text": "Thanks,/n The SendGrid Team"
97
+ },
98
+ "sandbox_mode": {
99
+ "enable": false
100
+ },
101
+ "spam_check": {
102
+ "enable": true,
103
+ "post_to_url": "http://example.com/compliance",
104
+ "threshold": 3
105
+ }
106
+ },
107
+ "personalizations": [
108
+ {
109
+ "bcc": [
110
+ {
111
+ "email": "sam.doe@example.com",
112
+ "name": "Sam Doe"
113
+ }
114
+ ],
115
+ "cc": [
116
+ {
117
+ "email": "jane.doe@example.com",
118
+ "name": "Jane Doe"
119
+ }
120
+ ],
121
+ "custom_args": {
122
+ "New Argument 1": "New Value 1",
123
+ "activationAttempt": "1",
124
+ "customerAccountNumber": "[CUSTOMER ACCOUNT NUMBER GOES HERE]"
125
+ },
126
+ "headers": {
127
+ "X-Accept-Language": "en",
128
+ "X-Mailer": "MyApp"
129
+ },
130
+ "send_at": 1409348513,
131
+ "subject": "Hello, World!",
132
+ "substitutions": {
133
+ "sub": {
134
+ "%name%": [
135
+ "John",
136
+ "Jane",
137
+ "Sam"
138
+ ]
139
+ }
140
+ },
141
+ "to": [
142
+ {
143
+ "email": "john.doe@example.com",
144
+ "name": "John Doe"
145
+ }
146
+ ]
147
+ }
148
+ ],
149
+ "reply_to": {
150
+ "email": "sam.smith@example.com",
151
+ "name": "Sam Smith"
152
+ },
153
+ "sections": {
154
+ "section": {
155
+ ":sectionName1": "section 1 text",
156
+ ":sectionName2": "section 2 text"
157
+ }
158
+ },
159
+ "send_at": 1409348513,
160
+ "subject": "Hello, World!",
161
+ "template_id": "[YOUR TEMPLATE ID GOES HERE]",
162
+ "tracking_settings": {
163
+ "click_tracking": {
164
+ "enable": true,
165
+ "enable_text": true
166
+ },
167
+ "ganalytics": {
168
+ "enable": true,
169
+ "utm_campaign": "[NAME OF YOUR REFERRER SOURCE]",
170
+ "utm_content": "[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]",
171
+ "utm_medium": "[NAME OF YOUR MARKETING MEDIUM e.g. email]",
172
+ "utm_name": "[NAME OF YOUR CAMPAIGN]",
173
+ "utm_term": "[IDENTIFY PAID KEYWORDS HERE]"
174
+ },
175
+ "open_tracking": {
176
+ "enable": true,
177
+ "substitution_tag": "%opentrack"
178
+ },
179
+ "subscription_tracking": {
180
+ "enable": true,
181
+ "html": "If you would like to unsubscribe and stop receiving these emails <% clickhere %>.",
182
+ "substitution_tag": "<%click here%>",
183
+ "text": "If you would like to unsubscribe and stop receiveing these emails <% click here %>."
184
+ }
185
+ }
186
+ }')
187
+ response = sg.client.mail._("send").post(request_body: data)
188
+ puts response.status_code
189
+ puts response.body
190
+ puts response.headers
191
+