sendgrid-ruby 6.2.0 → 6.6.2
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 +4 -4
- data/.github/ISSUE_TEMPLATE/config.yml +10 -0
- data/.github/workflows/test-and-deploy.yml +120 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +8 -0
- data/.rubocop_todo.yml +127 -0
- data/CHANGELOG.md +147 -9
- data/CONTRIBUTING.md +11 -21
- data/Dockerfile +14 -0
- data/FIRST_TIMERS.md +79 -0
- data/Gemfile +0 -1
- data/ISSUE_TEMPLATE.md +5 -1
- data/{LICENSE.md → LICENSE} +1 -1
- data/Makefile +9 -2
- data/PULL_REQUEST_TEMPLATE.md +5 -5
- data/README.md +23 -31
- data/Rakefile +2 -3
- data/TROUBLESHOOTING.md +17 -5
- data/USAGE.md +146 -39
- data/examples/accesssettings/accesssettings.rb +9 -12
- data/examples/alerts/alerts.rb +8 -11
- data/examples/apikeys/apikeys.rb +12 -15
- data/examples/asm/asm.rb +27 -30
- data/examples/browsers/browsers.rb +0 -3
- data/examples/campaigns/campaigns.rb +29 -32
- data/examples/categories/categories.rb +0 -3
- data/examples/clients/clients.rb +1 -4
- data/examples/contactdb/contactdb.rb +63 -66
- data/examples/devices/devices.rb +0 -3
- data/examples/emailactivity/emailactivity.rb +52 -0
- data/examples/geo/geo.rb +0 -3
- data/examples/helpers/eventwebhook/example.rb +16 -0
- data/examples/helpers/mail/example.rb +24 -13
- data/examples/helpers/settings/example.rb +1 -1
- data/examples/helpers/stats/example.rb +4 -4
- data/examples/ips/ips.rb +19 -22
- data/examples/mail/mail.rb +72 -75
- data/examples/mailboxproviders/mailboxproviders.rb +0 -3
- data/examples/mailsettings/mailsettings.rb +21 -24
- data/examples/partnersettings/partnersettings.rb +3 -6
- data/examples/scopes/scopes.rb +8 -10
- data/examples/senderauthentication/senderauthentication.rb +41 -44
- data/examples/senders/senders.rb +28 -31
- data/examples/stats/stats.rb +0 -3
- data/examples/subusers/subusers.rb +17 -20
- data/examples/suppression/suppression.rb +15 -18
- data/examples/templates/templates.rb +29 -31
- data/examples/trackingsettings/trackingsettings.rb +14 -17
- data/examples/user/user.rb +41 -44
- data/lib/rack/sendgrid_webhook_verification.rb +55 -0
- data/lib/sendgrid/base_interface.rb +8 -4
- data/lib/sendgrid/helpers/eventwebhook/eventwebhook.rb +50 -0
- data/lib/sendgrid/helpers/inbound/README.md +5 -5
- data/lib/sendgrid/helpers/inbound/app.rb +2 -2
- data/lib/sendgrid/helpers/inbound/public/index.html +1 -1
- data/lib/sendgrid/helpers/inbound/send.rb +3 -3
- data/lib/sendgrid/helpers/ip_management/ip_management.rb +1 -1
- data/lib/sendgrid/helpers/mail/README.md +3 -3
- data/lib/sendgrid/helpers/mail/asm.rb +6 -18
- data/lib/sendgrid/helpers/mail/attachment.rb +12 -42
- data/lib/sendgrid/helpers/mail/bcc_settings.rb +6 -18
- data/lib/sendgrid/helpers/mail/bypass_list_management.rb +8 -18
- data/lib/sendgrid/helpers/mail/category.rb +2 -2
- data/lib/sendgrid/helpers/mail/click_tracking.rb +6 -18
- data/lib/sendgrid/helpers/mail/content.rb +4 -3
- data/lib/sendgrid/helpers/mail/custom_arg.rb +6 -10
- data/lib/sendgrid/helpers/mail/email.rb +10 -5
- data/lib/sendgrid/helpers/mail/footer.rb +7 -27
- data/lib/sendgrid/helpers/mail/ganalytics.rb +10 -54
- data/lib/sendgrid/helpers/mail/header.rb +6 -10
- data/lib/sendgrid/helpers/mail/mail.rb +32 -48
- data/lib/sendgrid/helpers/mail/mail_settings.rb +9 -25
- data/lib/sendgrid/helpers/mail/open_tracking.rb +6 -18
- data/lib/sendgrid/helpers/mail/personalization.rb +40 -27
- data/lib/sendgrid/helpers/mail/section.rb +6 -10
- data/lib/sendgrid/helpers/mail/spam_check.rb +7 -27
- data/lib/sendgrid/helpers/mail/subscription_tracking.rb +8 -36
- data/lib/sendgrid/helpers/mail/substitution.rb +6 -10
- data/lib/sendgrid/helpers/mail/tracking_settings.rb +8 -20
- data/lib/sendgrid/helpers/permissions/scope.rb +2 -2
- data/lib/sendgrid/helpers/settings/README.md +2 -2
- data/lib/sendgrid/helpers/settings/settings.rb +1 -1
- data/lib/sendgrid/helpers/settings/tracking_settings_dto.rb +3 -5
- data/lib/sendgrid/helpers/stats/metrics.rb +5 -5
- data/lib/sendgrid/sendgrid.rb +4 -3
- data/lib/sendgrid/twilio_email.rb +1 -1
- data/lib/sendgrid/version.rb +1 -1
- data/lib/sendgrid-ruby.rb +2 -0
- data/mail_helper_v3.md +12 -12
- data/sendgrid-ruby.gemspec +8 -8
- data/spec/fixtures/event_webhook.rb +22 -0
- data/spec/rack/sendgrid_webhook_verification_spec.rb +142 -0
- data/spec/sendgrid/helpers/eventwebhook/eventwebhook_spec.rb +105 -0
- data/spec/sendgrid/helpers/settings/mail_settings_dto_spec.rb +3 -3
- data/spec/sendgrid/helpers/settings/partner_settings_dto_spec.rb +3 -3
- data/spec/sendgrid/helpers/settings/settings_spec.rb +2 -2
- data/spec/sendgrid/helpers/settings/tracking_settings_dto_spec.rb +3 -3
- data/spec/sendgrid/helpers/settings/user_settings_dto_spec.rb +3 -3
- data/spec/sendgrid/helpers/stats/email_stats_spec.rb +22 -23
- data/spec/sendgrid/helpers/stats/metrics_spec.rb +19 -20
- data/spec/sendgrid/helpers/stats/stats_response_spec.rb +22 -23
- data/spec/spec_helper.rb +3 -1
- data/static/img/github-fork.png +0 -0
- data/static/img/github-sign-up.png +0 -0
- data/test/sendgrid/helpers/mail/test_attachment.rb +4 -6
- data/test/sendgrid/helpers/mail/test_category.rb +0 -2
- data/test/sendgrid/helpers/mail/test_email.rb +17 -10
- data/test/sendgrid/helpers/mail/test_mail.rb +101 -102
- data/test/sendgrid/helpers/mail/test_personalizations.rb +145 -92
- data/test/sendgrid/permissions/test_scopes.rb +1 -3
- data/test/sendgrid/test_sendgrid-ruby.rb +1964 -1986
- data/twilio_sendgrid_logo.png +0 -0
- data/use-cases/README.md +17 -0
- data/use-cases/domain-authentication.md +5 -0
- data/use-cases/email-statistics.md +52 -0
- data/use-cases/legacy-templates.md +98 -0
- data/use-cases/personalizations.md +34 -0
- data/use-cases/sms.md +39 -0
- data/use-cases/transactional-templates.md +111 -0
- data/use-cases/twilio-email.md +13 -0
- data/use-cases/twilio-setup.md +54 -0
- metadata +69 -34
- data/.codeclimate.yml +0 -21
- data/.travis.yml +0 -40
- data/USE_CASES.md +0 -405
- data/docker/Dockerfile +0 -12
- data/docker/README.md +0 -30
- data/test/prism.sh +0 -42
|
Binary file
|
data/use-cases/README.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
This directory provides examples for specific use cases.
|
|
2
|
+
|
|
3
|
+
Please [open an issue](https://github.com/sendgrid/sendgrid-ruby/issues) or [make a pull request](https://github.com/sendgrid/sendgrid-ruby/pulls) for any use cases you would like us to document here. Thank you!
|
|
4
|
+
|
|
5
|
+
# Email Use Cases
|
|
6
|
+
* [Transactional Templates](transactional-templates.md)
|
|
7
|
+
* [Legacy Templates](legacy-templates.md)
|
|
8
|
+
* [Personalizations](personalizations.md)
|
|
9
|
+
|
|
10
|
+
# Twilio Use Cases
|
|
11
|
+
* [Twilio Setup](twilio-setup.md)
|
|
12
|
+
* [Send an Email With Twilio Email (Pilot)](twilio-email.md)
|
|
13
|
+
* [Send an SMS Message](sms.md)
|
|
14
|
+
|
|
15
|
+
# Non-Email Use Cases
|
|
16
|
+
* [How to Set up a Domain Authentication](domain-authentication.md)
|
|
17
|
+
* [How to View Email Statistics](email-statistics.md)
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# How to Setup a Domain Authentication
|
|
2
|
+
|
|
3
|
+
You can find documentation for how to setup a domain authentication via the UI [here](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) and via API [here](../USAGE.md#sender-authentication).
|
|
4
|
+
|
|
5
|
+
Find more information about all of Twilio SendGrid's authentication related documentation [here](https://sendgrid.com/docs/ui/account-and-settings/).
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# How to View Email Statistics
|
|
2
|
+
|
|
3
|
+
You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](../USAGE.md#stats).
|
|
4
|
+
|
|
5
|
+
Alternatively, we can post events to a URL of your choice via our [Event Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/event.html) about events that occur as Twilio SendGrid processes your email.
|
|
6
|
+
|
|
7
|
+
You can also use the email statistics helper to make it easier to interact with the API.
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
require 'sendgrid-ruby'
|
|
11
|
+
require 'date'
|
|
12
|
+
|
|
13
|
+
include SendGrid
|
|
14
|
+
|
|
15
|
+
sg_client = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']).client
|
|
16
|
+
stats = SendGrid::EmailStats.new(sendgrid_client: sg_client)
|
|
17
|
+
|
|
18
|
+
# Fetch stats by day, between 2 dates
|
|
19
|
+
from = Date.new(2017, 10, 01)
|
|
20
|
+
to = Date.new(2017, 10, 12)
|
|
21
|
+
|
|
22
|
+
email_stats = stats.by_day(from, to)
|
|
23
|
+
|
|
24
|
+
email_stats.metrics
|
|
25
|
+
|
|
26
|
+
if !email_stats.error?
|
|
27
|
+
email_stats.metrics.each do |metric|
|
|
28
|
+
puts "Date - #{metric.date}"
|
|
29
|
+
puts "Number of Requests - #{metric.requests}"
|
|
30
|
+
puts "Bounces - #{metric.bounces}"
|
|
31
|
+
puts "Opens - #{metric.opens}"
|
|
32
|
+
puts "Clicks - #{metric.clicks}"
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Fetch stats by week, between 2 dates for a category
|
|
37
|
+
from = Date.new(2017, 10, 01)
|
|
38
|
+
to = Date.new(2017, 10, 12)
|
|
39
|
+
category = 'abcd'
|
|
40
|
+
|
|
41
|
+
email_stats = stats.by_week(from, to, category)
|
|
42
|
+
|
|
43
|
+
if !email_stats.error?
|
|
44
|
+
email_stats.metrics.each do |metric|
|
|
45
|
+
puts "Date - #{metric.date}"
|
|
46
|
+
puts "Number of Requests - #{metric.requests}"
|
|
47
|
+
puts "Bounces - #{metric.bounces}"
|
|
48
|
+
puts "Opens - #{metric.opens}"
|
|
49
|
+
puts "Clicks - #{metric.clicks}"
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
```
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Legacy Templates
|
|
2
|
+
|
|
3
|
+
For this example, we assume you have created a [legacy transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html) in the UI or via the API. Following is the template content we used for testing.
|
|
4
|
+
|
|
5
|
+
Template ID (replace with your own):
|
|
6
|
+
```text
|
|
7
|
+
13b8f94f-bcae-4ec6-b752-70d6cb59f932
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Email Subject:
|
|
11
|
+
```text
|
|
12
|
+
<%subject%>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Template Body:
|
|
16
|
+
```html
|
|
17
|
+
<html>
|
|
18
|
+
<head>
|
|
19
|
+
<title></title>
|
|
20
|
+
</head>
|
|
21
|
+
<body>
|
|
22
|
+
Hello -name-,
|
|
23
|
+
<br /><br/>
|
|
24
|
+
I'm glad you are trying out the template feature!
|
|
25
|
+
<br /><br/>
|
|
26
|
+
<%body%>
|
|
27
|
+
<br /><br/>
|
|
28
|
+
I hope you are having a great day in -city- :)
|
|
29
|
+
<br /><br/>
|
|
30
|
+
</body>
|
|
31
|
+
</html>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## With Mail Helper Class
|
|
35
|
+
|
|
36
|
+
```ruby
|
|
37
|
+
require 'sendgrid-ruby'
|
|
38
|
+
include SendGrid
|
|
39
|
+
|
|
40
|
+
mail = SendGrid::Mail.new
|
|
41
|
+
mail.from = Email.new(email: 'test@example.com')
|
|
42
|
+
mail.subject = 'I\'m replacing the subject tag'
|
|
43
|
+
personalization = Personalization.new
|
|
44
|
+
personalization.add_to(Email.new(email: 'test@example.com'))
|
|
45
|
+
personalization.add_substitution(Substitution.new(key: '-name-', value: 'Example User'))
|
|
46
|
+
personalization.add_substitution(Substitution.new(key: '-city-', value: 'Denver'))
|
|
47
|
+
mail.add_personalization(personalization)
|
|
48
|
+
mail.template_id = '13b8f94f-bcae-4ec6-b752-70d6cb59f932'
|
|
49
|
+
|
|
50
|
+
sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
|
|
51
|
+
begin
|
|
52
|
+
response = sg.client.mail._("send").post(request_body: mail.to_json)
|
|
53
|
+
rescue Exception => e
|
|
54
|
+
puts e.message
|
|
55
|
+
end
|
|
56
|
+
puts response.status_code
|
|
57
|
+
puts response.body
|
|
58
|
+
puts response.parsed_body
|
|
59
|
+
puts response.headers
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Without Mail Helper Class
|
|
63
|
+
|
|
64
|
+
```ruby
|
|
65
|
+
require 'sendgrid-ruby'
|
|
66
|
+
include SendGrid
|
|
67
|
+
|
|
68
|
+
data = JSON.parse('{
|
|
69
|
+
"personalizations": [
|
|
70
|
+
{
|
|
71
|
+
"to": [
|
|
72
|
+
{
|
|
73
|
+
"email": "test@example.com"
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
"substitutions": {
|
|
77
|
+
"-name-": "Example User",
|
|
78
|
+
"-city-": "Denver"
|
|
79
|
+
},
|
|
80
|
+
"subject": "I\'m replacing the subject tag"
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"from": {
|
|
84
|
+
"email": "test@example.com"
|
|
85
|
+
},
|
|
86
|
+
"template_id": "13b8f94f-bcae-4ec6-b752-70d6cb59f932"
|
|
87
|
+
}')
|
|
88
|
+
sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
|
|
89
|
+
begin
|
|
90
|
+
response = sg.client.mail._("send").post(request_body: data)
|
|
91
|
+
rescue Exception => e
|
|
92
|
+
puts e.message
|
|
93
|
+
end
|
|
94
|
+
puts response.status_code
|
|
95
|
+
puts response.body
|
|
96
|
+
puts response.parsed_body
|
|
97
|
+
puts response.headers
|
|
98
|
+
```
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Personalizations
|
|
2
|
+
|
|
3
|
+
This example demonstrates how to send multiple emails with personalizations. For further documentation, refer to [the SendGrid docs](https://docs.sendgrid.com/for-developers/sending-email/personalizations).
|
|
4
|
+
|
|
5
|
+
```ruby
|
|
6
|
+
require 'sendgrid-ruby'
|
|
7
|
+
include SendGrid
|
|
8
|
+
|
|
9
|
+
# Note that the domain for all From addresses must match
|
|
10
|
+
mail = Mail.new
|
|
11
|
+
mail.from = Email.new(email: 'test@example.com')
|
|
12
|
+
mail.add_content(Content.new(type: 'text/plain', value: 'Some test text'))
|
|
13
|
+
mail.subject = 'Personalized Test Email'
|
|
14
|
+
|
|
15
|
+
personalization = Personalization.new
|
|
16
|
+
personalization.add_to(Email.new(email: 'test1@example.com'))
|
|
17
|
+
mail.add_personalization(personalization)
|
|
18
|
+
|
|
19
|
+
personalization2 = Personalization.new
|
|
20
|
+
personalization2.add_to(Email.new(email: 'test2@example.com'))
|
|
21
|
+
personalization2.add_from(Email.new(email: 'test3@example.com'))
|
|
22
|
+
mail.add_personalization(personalization2)
|
|
23
|
+
|
|
24
|
+
sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
|
|
25
|
+
begin
|
|
26
|
+
response = sg.client.mail._("send").post(request_body: mail.to_json)
|
|
27
|
+
rescue Exception => e
|
|
28
|
+
puts e.message
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
puts response.status_code
|
|
32
|
+
puts response.body
|
|
33
|
+
puts response.headers
|
|
34
|
+
```
|
data/use-cases/sms.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
First, follow the [Twilio Setup](twilio-setup.md) guide for creating a Twilio account and setting up environment variables with the proper credentials.
|
|
2
|
+
|
|
3
|
+
Then, install the Twilio Helper Library. Add this line to your application's Gemfile:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
gem 'twilio-ruby'
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
And then execute:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
bundle
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Or install it yourself using:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
gem install twilio-ruby
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Finally, send a message.
|
|
22
|
+
|
|
23
|
+
```ruby
|
|
24
|
+
require 'twilio-ruby'
|
|
25
|
+
|
|
26
|
+
# put your own credentials here
|
|
27
|
+
account_sid = ENV['TWILIO_ACCOUNT_SID']
|
|
28
|
+
auth_token = ENV['TWILIO_AUTH_TOKEN']
|
|
29
|
+
|
|
30
|
+
# set up a client to talk to the Twilio REST API
|
|
31
|
+
@client = Twilio::REST::Client.new account_sid, auth_token
|
|
32
|
+
@client.api.account.messages.create(
|
|
33
|
+
from: '+14159341234',
|
|
34
|
+
to: '+16105557069',
|
|
35
|
+
body: 'Hey there!'
|
|
36
|
+
)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
For more information, please visit the [Twilio SMS Ruby documentation](https://www.twilio.com/docs/sms/quickstart/ruby).
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Transactional Templates
|
|
2
|
+
|
|
3
|
+
For this example, we assume you have created a [dynamic transactional template](https://sendgrid.com/docs/ui/sending-email/how-to-send-an-email-with-dynamic-transactional-templates/) in the UI or via the API. Following is the template content we used for testing.
|
|
4
|
+
|
|
5
|
+
Template ID (replace with your own):
|
|
6
|
+
```text
|
|
7
|
+
d-2c214ac919e84170b21855cc129b4a5f
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Email Subject:
|
|
11
|
+
```text
|
|
12
|
+
{{subject}}
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Template Body:
|
|
16
|
+
```html
|
|
17
|
+
<html>
|
|
18
|
+
<head>
|
|
19
|
+
<title></title>
|
|
20
|
+
</head>
|
|
21
|
+
<body>
|
|
22
|
+
Hello {{name}},
|
|
23
|
+
<br/><br/>
|
|
24
|
+
I'm glad you are trying out the template feature!
|
|
25
|
+
<br/><br/>
|
|
26
|
+
I hope you are having a great day in {{city}} :)
|
|
27
|
+
<br/><br/>
|
|
28
|
+
</body>
|
|
29
|
+
</html>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## With Mail Helper Class
|
|
33
|
+
```ruby
|
|
34
|
+
require 'sendgrid-ruby'
|
|
35
|
+
include SendGrid
|
|
36
|
+
|
|
37
|
+
mail = Mail.new
|
|
38
|
+
mail.from = Email.new(email: 'test@example.com')
|
|
39
|
+
personalization = Personalization.new
|
|
40
|
+
personalization.add_to(Email.new(email: 'test@example.com'))
|
|
41
|
+
personalization.add_dynamic_template_data({
|
|
42
|
+
"subject" => "Testing Templates",
|
|
43
|
+
"name" => "Example User",
|
|
44
|
+
"city" => "Denver"
|
|
45
|
+
})
|
|
46
|
+
mail.add_personalization(personalization)
|
|
47
|
+
mail.template_id = 'd-2c214ac919e84170b21855cc129b4a5f'
|
|
48
|
+
|
|
49
|
+
sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
|
|
50
|
+
begin
|
|
51
|
+
response = sg.client.mail._("send").post(request_body: mail.to_json)
|
|
52
|
+
rescue Exception => e
|
|
53
|
+
puts e.message
|
|
54
|
+
end
|
|
55
|
+
puts response.status_code
|
|
56
|
+
puts response.body
|
|
57
|
+
puts response.parsed_body
|
|
58
|
+
puts response.headers
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Without Mail Helper Class
|
|
62
|
+
|
|
63
|
+
```ruby
|
|
64
|
+
require 'sendgrid-ruby'
|
|
65
|
+
include SendGrid
|
|
66
|
+
|
|
67
|
+
data = JSON.parse('{
|
|
68
|
+
"personalizations": [
|
|
69
|
+
{
|
|
70
|
+
"to": [
|
|
71
|
+
{
|
|
72
|
+
"email": "test@example.com"
|
|
73
|
+
}
|
|
74
|
+
],
|
|
75
|
+
"dynamic_template_data": {
|
|
76
|
+
"subject": "Testing Templates",
|
|
77
|
+
"name": "Example User",
|
|
78
|
+
"city": "Denver"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
],
|
|
82
|
+
"from": {
|
|
83
|
+
"email": "test@example.com"
|
|
84
|
+
},
|
|
85
|
+
"template_id": "d-2c214ac919e84170b21855cc129b4a5f"
|
|
86
|
+
}')
|
|
87
|
+
sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
|
|
88
|
+
begin
|
|
89
|
+
response = sg.client.mail._("send").post(request_body: data)
|
|
90
|
+
rescue Exception => e
|
|
91
|
+
puts e.message
|
|
92
|
+
end
|
|
93
|
+
puts response.status_code
|
|
94
|
+
puts response.body
|
|
95
|
+
puts response.parsed_body
|
|
96
|
+
puts response.headers
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Adding Attachments
|
|
100
|
+
|
|
101
|
+
```ruby
|
|
102
|
+
attachment = Attachment.new
|
|
103
|
+
attachment.content = Base64.strict_encode64(File.open(fpath, 'rb').read)
|
|
104
|
+
attachment.type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
|
105
|
+
attachment.filename = fname
|
|
106
|
+
attachment.disposition = 'attachment'
|
|
107
|
+
attachment.content_id = 'Reports Sheet'
|
|
108
|
+
mail.add_attachment(attachment)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Attachments must be base64 encoded, using Base64's strict_encode64 where no line feeds are added.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
First, follow the [Twilio Setup](twilio-setup.md) guide for creating a Twilio account and setting up environment variables with the proper credentials.
|
|
2
|
+
|
|
3
|
+
Then, initialize the Twilio Email Client.
|
|
4
|
+
|
|
5
|
+
```ruby
|
|
6
|
+
mail_client = TwilioEmail::API(username: ENV['TWILIO_API_KEY'], password: ENV['TWILIO_API_SECRET'])
|
|
7
|
+
|
|
8
|
+
# or
|
|
9
|
+
|
|
10
|
+
mail_client = TwilioEmail::API(username: ENV['TWILIO_ACCOUNT_SID'], password: ENV['TWILIO_AUTH_TOKEN'])
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
This client has the same interface as the `SendGrid::API` client.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
## 1. Obtain a Free Twilio Account
|
|
2
|
+
|
|
3
|
+
Sign up for a free Twilio account [here](https://www.twilio.com/try-twilio?source=sendgrid-ruby).
|
|
4
|
+
|
|
5
|
+
## 2. Set Up Your Environment Variables
|
|
6
|
+
|
|
7
|
+
The Twilio API allows for authentication using with either an API key/secret or your Account SID/Auth Token. You can create an API key [here](https://twil.io/get-api-key) or obtain your Account SID and Auth Token [here](https://twil.io/console).
|
|
8
|
+
|
|
9
|
+
Once you have those, follow the steps below based on your operating system.
|
|
10
|
+
|
|
11
|
+
### Linux/Mac
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
echo "export TWILIO_API_KEY='YOUR_TWILIO_API_KEY'" > twilio.env
|
|
15
|
+
echo "export TWILIO_API_SECRET='YOUR_TWILIO_API_SECRET'" >> twilio.env
|
|
16
|
+
|
|
17
|
+
# or
|
|
18
|
+
|
|
19
|
+
echo "export TWILIO_ACCOUNT_SID='YOUR_TWILIO_ACCOUNT_SID'" > twilio.env
|
|
20
|
+
echo "export TWILIO_AUTH_TOKEN='YOUR_TWILIO_AUTH_TOKEN'" >> twilio.env
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Then:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
echo "twilio.env" >> .gitignore
|
|
27
|
+
source ./twilio.env
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Windows
|
|
31
|
+
|
|
32
|
+
Temporarily set the environment variable (accessible only during the current CLI session):
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
set TWILIO_API_KEY=YOUR_TWILIO_API_KEY
|
|
36
|
+
set TWILIO_API_SECRET=YOUR_TWILIO_API_SECRET
|
|
37
|
+
|
|
38
|
+
: or
|
|
39
|
+
|
|
40
|
+
set TWILIO_ACCOUNT_SID=YOUR_TWILIO_ACCOUNT_SID
|
|
41
|
+
set TWILIO_AUTH_TOKEN=YOUR_TWILIO_AUTH_TOKEN
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Or permanently set the environment variable (accessible in all subsequent CLI sessions):
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
setx TWILIO_API_KEY "YOUR_TWILIO_API_KEY"
|
|
48
|
+
setx TWILIO_API_SECRET "YOUR_TWILIO_API_SECRET"
|
|
49
|
+
|
|
50
|
+
: or
|
|
51
|
+
|
|
52
|
+
setx TWILIO_ACCOUNT_SID "YOUR_TWILIO_ACCOUNT_SID"
|
|
53
|
+
setx TWILIO_AUTH_TOKEN "YOUR_TWILIO_AUTH_TOKEN"
|
|
54
|
+
```
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sendgrid-ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 6.2
|
|
4
|
+
version: 6.6.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Elmer Thomas
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date:
|
|
13
|
+
date: 2022-03-09 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: ruby_http_client
|
|
@@ -27,41 +27,35 @@ dependencies:
|
|
|
27
27
|
- !ruby/object:Gem::Version
|
|
28
28
|
version: '3.4'
|
|
29
29
|
- !ruby/object:Gem::Dependency
|
|
30
|
-
name:
|
|
30
|
+
name: faker
|
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
|
32
32
|
requirements:
|
|
33
33
|
- - ">="
|
|
34
34
|
- !ruby/object:Gem::Version
|
|
35
|
-
version:
|
|
36
|
-
- - "<"
|
|
37
|
-
- !ruby/object:Gem::Version
|
|
38
|
-
version: '3'
|
|
35
|
+
version: '0'
|
|
39
36
|
type: :development
|
|
40
37
|
prerelease: false
|
|
41
38
|
version_requirements: !ruby/object:Gem::Requirement
|
|
42
39
|
requirements:
|
|
43
40
|
- - ">="
|
|
44
41
|
- !ruby/object:Gem::Version
|
|
45
|
-
version:
|
|
46
|
-
- - "<"
|
|
47
|
-
- !ruby/object:Gem::Version
|
|
48
|
-
version: '3'
|
|
42
|
+
version: '0'
|
|
49
43
|
- !ruby/object:Gem::Dependency
|
|
50
|
-
name:
|
|
44
|
+
name: minitest
|
|
51
45
|
requirement: !ruby/object:Gem::Requirement
|
|
52
46
|
requirements:
|
|
53
47
|
- - "~>"
|
|
54
48
|
- !ruby/object:Gem::Version
|
|
55
|
-
version: '
|
|
49
|
+
version: '5.9'
|
|
56
50
|
type: :development
|
|
57
51
|
prerelease: false
|
|
58
52
|
version_requirements: !ruby/object:Gem::Requirement
|
|
59
53
|
requirements:
|
|
60
54
|
- - "~>"
|
|
61
55
|
- !ruby/object:Gem::Version
|
|
62
|
-
version: '
|
|
56
|
+
version: '5.9'
|
|
63
57
|
- !ruby/object:Gem::Dependency
|
|
64
|
-
name:
|
|
58
|
+
name: pry
|
|
65
59
|
requirement: !ruby/object:Gem::Requirement
|
|
66
60
|
requirements:
|
|
67
61
|
- - ">="
|
|
@@ -75,7 +69,7 @@ dependencies:
|
|
|
75
69
|
- !ruby/object:Gem::Version
|
|
76
70
|
version: '0'
|
|
77
71
|
- !ruby/object:Gem::Dependency
|
|
78
|
-
name:
|
|
72
|
+
name: rack
|
|
79
73
|
requirement: !ruby/object:Gem::Requirement
|
|
80
74
|
requirements:
|
|
81
75
|
- - ">="
|
|
@@ -89,21 +83,21 @@ dependencies:
|
|
|
89
83
|
- !ruby/object:Gem::Version
|
|
90
84
|
version: '0'
|
|
91
85
|
- !ruby/object:Gem::Dependency
|
|
92
|
-
name:
|
|
86
|
+
name: rake
|
|
93
87
|
requirement: !ruby/object:Gem::Requirement
|
|
94
88
|
requirements:
|
|
95
|
-
- - "
|
|
89
|
+
- - "~>"
|
|
96
90
|
- !ruby/object:Gem::Version
|
|
97
|
-
version: '0'
|
|
91
|
+
version: '13.0'
|
|
98
92
|
type: :development
|
|
99
93
|
prerelease: false
|
|
100
94
|
version_requirements: !ruby/object:Gem::Requirement
|
|
101
95
|
requirements:
|
|
102
|
-
- - "
|
|
96
|
+
- - "~>"
|
|
103
97
|
- !ruby/object:Gem::Version
|
|
104
|
-
version: '0'
|
|
98
|
+
version: '13.0'
|
|
105
99
|
- !ruby/object:Gem::Dependency
|
|
106
|
-
name:
|
|
100
|
+
name: rspec
|
|
107
101
|
requirement: !ruby/object:Gem::Requirement
|
|
108
102
|
requirements:
|
|
109
103
|
- - ">="
|
|
@@ -117,19 +111,39 @@ dependencies:
|
|
|
117
111
|
- !ruby/object:Gem::Version
|
|
118
112
|
version: '0'
|
|
119
113
|
- !ruby/object:Gem::Dependency
|
|
120
|
-
name:
|
|
114
|
+
name: simplecov
|
|
121
115
|
requirement: !ruby/object:Gem::Requirement
|
|
122
116
|
requirements:
|
|
123
117
|
- - "~>"
|
|
124
118
|
- !ruby/object:Gem::Version
|
|
125
|
-
version:
|
|
119
|
+
version: 0.18.5
|
|
126
120
|
type: :development
|
|
127
121
|
prerelease: false
|
|
128
122
|
version_requirements: !ruby/object:Gem::Requirement
|
|
129
123
|
requirements:
|
|
130
124
|
- - "~>"
|
|
131
125
|
- !ruby/object:Gem::Version
|
|
132
|
-
version:
|
|
126
|
+
version: 0.18.5
|
|
127
|
+
- !ruby/object:Gem::Dependency
|
|
128
|
+
name: sinatra
|
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
|
130
|
+
requirements:
|
|
131
|
+
- - ">="
|
|
132
|
+
- !ruby/object:Gem::Version
|
|
133
|
+
version: 1.4.7
|
|
134
|
+
- - "<"
|
|
135
|
+
- !ruby/object:Gem::Version
|
|
136
|
+
version: '3'
|
|
137
|
+
type: :development
|
|
138
|
+
prerelease: false
|
|
139
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
140
|
+
requirements:
|
|
141
|
+
- - ">="
|
|
142
|
+
- !ruby/object:Gem::Version
|
|
143
|
+
version: 1.4.7
|
|
144
|
+
- - "<"
|
|
145
|
+
- !ruby/object:Gem::Version
|
|
146
|
+
version: '3'
|
|
133
147
|
description: Official Twilio SendGrid Gem to Interact with Twilio SendGrids API in
|
|
134
148
|
native Ruby
|
|
135
149
|
email: help@twilio.com
|
|
@@ -137,16 +151,20 @@ executables: []
|
|
|
137
151
|
extensions: []
|
|
138
152
|
extra_rdoc_files: []
|
|
139
153
|
files:
|
|
140
|
-
- ".codeclimate.yml"
|
|
141
154
|
- ".env_sample"
|
|
155
|
+
- ".github/ISSUE_TEMPLATE/config.yml"
|
|
156
|
+
- ".github/workflows/test-and-deploy.yml"
|
|
142
157
|
- ".gitignore"
|
|
143
|
-
- ".
|
|
158
|
+
- ".rubocop.yml"
|
|
159
|
+
- ".rubocop_todo.yml"
|
|
144
160
|
- CHANGELOG.md
|
|
145
161
|
- CODE_OF_CONDUCT.md
|
|
146
162
|
- CONTRIBUTING.md
|
|
163
|
+
- Dockerfile
|
|
164
|
+
- FIRST_TIMERS.md
|
|
147
165
|
- Gemfile
|
|
148
166
|
- ISSUE_TEMPLATE.md
|
|
149
|
-
- LICENSE
|
|
167
|
+
- LICENSE
|
|
150
168
|
- Makefile
|
|
151
169
|
- PULL_REQUEST_TEMPLATE.md
|
|
152
170
|
- README.md
|
|
@@ -154,10 +172,7 @@ files:
|
|
|
154
172
|
- TROUBLESHOOTING.md
|
|
155
173
|
- UPGRADE.md
|
|
156
174
|
- USAGE.md
|
|
157
|
-
- USE_CASES.md
|
|
158
175
|
- config.ru
|
|
159
|
-
- docker/Dockerfile
|
|
160
|
-
- docker/README.md
|
|
161
176
|
- examples/accesssettings/accesssettings.rb
|
|
162
177
|
- examples/alerts/alerts.rb
|
|
163
178
|
- examples/apikeys/apikeys.rb
|
|
@@ -168,7 +183,9 @@ files:
|
|
|
168
183
|
- examples/clients/clients.rb
|
|
169
184
|
- examples/contactdb/contactdb.rb
|
|
170
185
|
- examples/devices/devices.rb
|
|
186
|
+
- examples/emailactivity/emailactivity.rb
|
|
171
187
|
- examples/geo/geo.rb
|
|
188
|
+
- examples/helpers/eventwebhook/example.rb
|
|
172
189
|
- examples/helpers/mail/example.rb
|
|
173
190
|
- examples/helpers/settings/example.rb
|
|
174
191
|
- examples/helpers/stats/example.rb
|
|
@@ -188,8 +205,10 @@ files:
|
|
|
188
205
|
- examples/user/user.rb
|
|
189
206
|
- gemfiles/Sinatra_1.gemfile
|
|
190
207
|
- gemfiles/Sinatra_2.gemfile
|
|
208
|
+
- lib/rack/sendgrid_webhook_verification.rb
|
|
191
209
|
- lib/sendgrid-ruby.rb
|
|
192
210
|
- lib/sendgrid/base_interface.rb
|
|
211
|
+
- lib/sendgrid/helpers/eventwebhook/eventwebhook.rb
|
|
193
212
|
- lib/sendgrid/helpers/inbound/README.md
|
|
194
213
|
- lib/sendgrid/helpers/inbound/app.rb
|
|
195
214
|
- lib/sendgrid/helpers/inbound/config.yml
|
|
@@ -237,6 +256,9 @@ files:
|
|
|
237
256
|
- lib/sendgrid/version.rb
|
|
238
257
|
- mail_helper_v3.md
|
|
239
258
|
- sendgrid-ruby.gemspec
|
|
259
|
+
- spec/fixtures/event_webhook.rb
|
|
260
|
+
- spec/rack/sendgrid_webhook_verification_spec.rb
|
|
261
|
+
- spec/sendgrid/helpers/eventwebhook/eventwebhook_spec.rb
|
|
240
262
|
- spec/sendgrid/helpers/ip_management/ip_management_spec.rb
|
|
241
263
|
- spec/sendgrid/helpers/settings/mail_settings_dto_spec.rb
|
|
242
264
|
- spec/sendgrid/helpers/settings/partner_settings_dto_spec.rb
|
|
@@ -249,7 +271,8 @@ files:
|
|
|
249
271
|
- spec/sendgrid/sendgrid_spec.rb
|
|
250
272
|
- spec/sendgrid/twilio_email_spec.rb
|
|
251
273
|
- spec/spec_helper.rb
|
|
252
|
-
-
|
|
274
|
+
- static/img/github-fork.png
|
|
275
|
+
- static/img/github-sign-up.png
|
|
253
276
|
- test/sendgrid/helpers/mail/test_attachment.rb
|
|
254
277
|
- test/sendgrid/helpers/mail/test_category.rb
|
|
255
278
|
- test/sendgrid/helpers/mail/test_email.rb
|
|
@@ -257,6 +280,16 @@ files:
|
|
|
257
280
|
- test/sendgrid/helpers/mail/test_personalizations.rb
|
|
258
281
|
- test/sendgrid/permissions/test_scopes.rb
|
|
259
282
|
- test/sendgrid/test_sendgrid-ruby.rb
|
|
283
|
+
- twilio_sendgrid_logo.png
|
|
284
|
+
- use-cases/README.md
|
|
285
|
+
- use-cases/domain-authentication.md
|
|
286
|
+
- use-cases/email-statistics.md
|
|
287
|
+
- use-cases/legacy-templates.md
|
|
288
|
+
- use-cases/personalizations.md
|
|
289
|
+
- use-cases/sms.md
|
|
290
|
+
- use-cases/transactional-templates.md
|
|
291
|
+
- use-cases/twilio-email.md
|
|
292
|
+
- use-cases/twilio-setup.md
|
|
260
293
|
homepage: http://github.com/sendgrid/sendgrid-ruby
|
|
261
294
|
licenses:
|
|
262
295
|
- MIT
|
|
@@ -276,11 +309,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
276
309
|
- !ruby/object:Gem::Version
|
|
277
310
|
version: '0'
|
|
278
311
|
requirements: []
|
|
279
|
-
rubygems_version: 3.
|
|
312
|
+
rubygems_version: 3.3.7
|
|
280
313
|
signing_key:
|
|
281
314
|
specification_version: 4
|
|
282
315
|
summary: Official Twilio SendGrid Gem
|
|
283
316
|
test_files:
|
|
317
|
+
- spec/fixtures/event_webhook.rb
|
|
318
|
+
- spec/rack/sendgrid_webhook_verification_spec.rb
|
|
319
|
+
- spec/sendgrid/helpers/eventwebhook/eventwebhook_spec.rb
|
|
284
320
|
- spec/sendgrid/helpers/ip_management/ip_management_spec.rb
|
|
285
321
|
- spec/sendgrid/helpers/settings/mail_settings_dto_spec.rb
|
|
286
322
|
- spec/sendgrid/helpers/settings/partner_settings_dto_spec.rb
|
|
@@ -293,7 +329,6 @@ test_files:
|
|
|
293
329
|
- spec/sendgrid/sendgrid_spec.rb
|
|
294
330
|
- spec/sendgrid/twilio_email_spec.rb
|
|
295
331
|
- spec/spec_helper.rb
|
|
296
|
-
- test/prism.sh
|
|
297
332
|
- test/sendgrid/helpers/mail/test_attachment.rb
|
|
298
333
|
- test/sendgrid/helpers/mail/test_category.rb
|
|
299
334
|
- test/sendgrid/helpers/mail/test_email.rb
|