sendgrid_ruby 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.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.travis.yml +10 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +347 -0
- data/Rakefile +11 -0
- data/lib/sendgrid_ruby/email.rb +319 -0
- data/lib/sendgrid_ruby/version.rb +3 -0
- data/lib/sendgrid_ruby.rb +31 -0
- data/sendgrid_ruby.gemspec +25 -0
- data/test/file1.txt +1 -0
- data/test/file2.txt +1 -0
- data/test/file3.txt +1 -0
- data/test/gif +0 -0
- data/test/gif.gif +0 -0
- data/test/sendgrid_ruby/email.rb +506 -0
- data/test/sendgrid_ruby.rb +130 -0
- metadata +124 -0
@@ -0,0 +1,319 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'smtpapi'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module SendgridRuby
|
6
|
+
|
7
|
+
class Email
|
8
|
+
|
9
|
+
def initialize()
|
10
|
+
@smtpapi = Smtpapi::Header.new
|
11
|
+
@cc_list = []
|
12
|
+
@bcc_list = []
|
13
|
+
@attachments = []
|
14
|
+
@headers = Hash.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def remove_from_list(list, item, key_field = nil)
|
18
|
+
list.each do |value|
|
19
|
+
if key_field == nil
|
20
|
+
list.delete(value) if (value == item)
|
21
|
+
else
|
22
|
+
list.delete(value) if (value[key_field] == item)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
list
|
26
|
+
end
|
27
|
+
|
28
|
+
def add_to(email, name=nil)
|
29
|
+
@smtpapi.add_to(email, name)
|
30
|
+
self
|
31
|
+
end
|
32
|
+
|
33
|
+
def set_tos(emails)
|
34
|
+
@smtpapi.set_tos(emails)
|
35
|
+
self
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_tos
|
39
|
+
@smtpapi.to
|
40
|
+
end
|
41
|
+
|
42
|
+
def remove_to(email)
|
43
|
+
remove_from_list(@smtpapi.to, email)
|
44
|
+
self
|
45
|
+
end
|
46
|
+
|
47
|
+
def set_from(email)
|
48
|
+
@from = email
|
49
|
+
self
|
50
|
+
end
|
51
|
+
|
52
|
+
def get_from(as_array = false)
|
53
|
+
if as_array && name = @from_name
|
54
|
+
{@from => name}
|
55
|
+
else
|
56
|
+
@from
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def set_reply_to(reply_to)
|
61
|
+
@reply_to = reply_to
|
62
|
+
self
|
63
|
+
end
|
64
|
+
|
65
|
+
def get_reply_to
|
66
|
+
@reply_to
|
67
|
+
end
|
68
|
+
|
69
|
+
def set_from_name(from_name)
|
70
|
+
@from_name = from_name
|
71
|
+
self
|
72
|
+
end
|
73
|
+
|
74
|
+
def get_from_name
|
75
|
+
@from_name
|
76
|
+
end
|
77
|
+
|
78
|
+
# def set_cc(email)
|
79
|
+
# @cc_list = [email]
|
80
|
+
# self
|
81
|
+
# end
|
82
|
+
|
83
|
+
# def set_ccs(email_list)
|
84
|
+
# @cc_list = email_list
|
85
|
+
# self
|
86
|
+
# end
|
87
|
+
|
88
|
+
# def add_cc(email)
|
89
|
+
# @cc_list.push(email)
|
90
|
+
# self
|
91
|
+
# end
|
92
|
+
|
93
|
+
# def remove_cc(email)
|
94
|
+
# @cc_list = remove_from_list(@cc_list, email)
|
95
|
+
# self
|
96
|
+
# end
|
97
|
+
|
98
|
+
# def get_ccs
|
99
|
+
# @cc_list
|
100
|
+
# end
|
101
|
+
|
102
|
+
# def set_bcc(email)
|
103
|
+
# @bcc_list = [email]
|
104
|
+
# self
|
105
|
+
# end
|
106
|
+
|
107
|
+
# def set_bccs(email_list)
|
108
|
+
# @bcc_list = email_list
|
109
|
+
# self
|
110
|
+
# end
|
111
|
+
|
112
|
+
# def add_bcc(email)
|
113
|
+
# @bcc_list.push(email)
|
114
|
+
# self
|
115
|
+
# end
|
116
|
+
|
117
|
+
# def remove_bcc(email)
|
118
|
+
# @bcc_list = remove_from_list(@bcc_list, email)
|
119
|
+
# self
|
120
|
+
# end
|
121
|
+
|
122
|
+
# def get_bccs
|
123
|
+
# @bcc_list
|
124
|
+
# end
|
125
|
+
|
126
|
+
def set_subject(subject)
|
127
|
+
@subject = subject
|
128
|
+
self
|
129
|
+
end
|
130
|
+
|
131
|
+
def get_subject
|
132
|
+
@subject
|
133
|
+
end
|
134
|
+
|
135
|
+
def set_text(text)
|
136
|
+
@text = text
|
137
|
+
self
|
138
|
+
end
|
139
|
+
|
140
|
+
def get_text
|
141
|
+
@text
|
142
|
+
end
|
143
|
+
|
144
|
+
|
145
|
+
def set_html(html)
|
146
|
+
@html = html
|
147
|
+
self
|
148
|
+
end
|
149
|
+
|
150
|
+
def get_html
|
151
|
+
@html
|
152
|
+
end
|
153
|
+
|
154
|
+
attr_accessor :smtpapi
|
155
|
+
|
156
|
+
def set_attachments(files)
|
157
|
+
files.each do |filename, file|
|
158
|
+
if file.is_a?(String)
|
159
|
+
add_attachment(file, filename)
|
160
|
+
else
|
161
|
+
add_attachment(filename)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
self
|
165
|
+
end
|
166
|
+
|
167
|
+
def set_attachment(file, custom_filename=nil)
|
168
|
+
@attachments = [get_attachment_info(file, custom_filename)]
|
169
|
+
self
|
170
|
+
end
|
171
|
+
|
172
|
+
def add_attachment(file, custom_filename=nil)
|
173
|
+
@attachments.push(get_attachment_info(file, custom_filename))
|
174
|
+
self
|
175
|
+
end
|
176
|
+
|
177
|
+
def get_attachments()
|
178
|
+
@attachments
|
179
|
+
end
|
180
|
+
|
181
|
+
def remove_attachment(file)
|
182
|
+
@attachments = remove_from_list(@attachments, file, "file")
|
183
|
+
self
|
184
|
+
end
|
185
|
+
|
186
|
+
def get_attachment_info(file, custom_filename=nil)
|
187
|
+
dir, basename = File::split(file)
|
188
|
+
extname = File::extname(file)
|
189
|
+
filename = File::basename(file, extname)
|
190
|
+
info = {
|
191
|
+
'dirname' => dir,
|
192
|
+
'basename' => basename,
|
193
|
+
'extension' => extname,
|
194
|
+
'filename' => filename
|
195
|
+
}
|
196
|
+
info['file'] = file
|
197
|
+
info['custom_filename'] = custom_filename if !custom_filename.nil?
|
198
|
+
info
|
199
|
+
end
|
200
|
+
|
201
|
+
def set_categories(categories)
|
202
|
+
@smtpapi.set_categories(categories)
|
203
|
+
self
|
204
|
+
end
|
205
|
+
|
206
|
+
def set_category(category)
|
207
|
+
@smtpapi.set_category(category)
|
208
|
+
self
|
209
|
+
end
|
210
|
+
|
211
|
+
def add_category(category)
|
212
|
+
@smtpapi.add_category(category)
|
213
|
+
self
|
214
|
+
end
|
215
|
+
|
216
|
+
def remove_category(category)
|
217
|
+
@smtpapi.remove_category(category)
|
218
|
+
self
|
219
|
+
end
|
220
|
+
|
221
|
+
def set_substitutions(key_value_pairs)
|
222
|
+
@smtpapi.set_substitutions(key_value_pairs)
|
223
|
+
self
|
224
|
+
end
|
225
|
+
|
226
|
+
def add_substitution(from_value, to_values)
|
227
|
+
@smtpapi.add_substitution(from_value, to_values)
|
228
|
+
self
|
229
|
+
end
|
230
|
+
|
231
|
+
def set_sections(key_value_pairs)
|
232
|
+
@smtpapi.set_sections(key_value_pairs)
|
233
|
+
self
|
234
|
+
end
|
235
|
+
|
236
|
+
def add_section(from_value, to_value)
|
237
|
+
@smtpapi.add_section(from_value, to_value)
|
238
|
+
self
|
239
|
+
end
|
240
|
+
|
241
|
+
def set_unique_args(key_value_pairs)
|
242
|
+
@smtpapi.set_unique_args(key_value_pairs)
|
243
|
+
self
|
244
|
+
end
|
245
|
+
|
246
|
+
def add_unique_arg(key, value)
|
247
|
+
@smtpapi.add_unique_arg(key, value)
|
248
|
+
self
|
249
|
+
end
|
250
|
+
|
251
|
+
def set_filters(filter_settings)
|
252
|
+
@smtpapi.set_filters(filter_settings)
|
253
|
+
self
|
254
|
+
end
|
255
|
+
|
256
|
+
def add_filter(filter_name, parameter_name, parameter_value)
|
257
|
+
@smtpapi.add_filter(filter_name, parameter_name, parameter_value)
|
258
|
+
end
|
259
|
+
|
260
|
+
def get_headers()
|
261
|
+
@headers
|
262
|
+
end
|
263
|
+
|
264
|
+
def get_headers_json()
|
265
|
+
JSON.generate(@headers)
|
266
|
+
end
|
267
|
+
|
268
|
+
def set_headers(key_value_pairs)
|
269
|
+
@headers = key_value_pairs
|
270
|
+
self
|
271
|
+
end
|
272
|
+
|
273
|
+
def add_header(key, value)
|
274
|
+
@headers[key] = value
|
275
|
+
self
|
276
|
+
end
|
277
|
+
|
278
|
+
def remove_header(key)
|
279
|
+
@headers = remove_from_list(@headers, key)
|
280
|
+
self
|
281
|
+
end
|
282
|
+
|
283
|
+
def to_web_format()
|
284
|
+
web = {
|
285
|
+
'to' => @to,
|
286
|
+
'from' => get_from,
|
287
|
+
'x-smtpapi' => @smtpapi.json_string,
|
288
|
+
'subject' => @subject,
|
289
|
+
'text' => @text,
|
290
|
+
'html' => @html,
|
291
|
+
'headers' => get_headers_json,
|
292
|
+
}
|
293
|
+
|
294
|
+
# web['cc'] = get_ccs if get_ccs
|
295
|
+
# web['bcc'] = get_bccs if get_bccs
|
296
|
+
web['fromname'] = @from_name if @from_name
|
297
|
+
web['replyto'] = @reply_to if @reply_to
|
298
|
+
web['to'] = @from if (@smtpapi.to && @smtpapi.to.length > 0)
|
299
|
+
|
300
|
+
if get_attachments
|
301
|
+
get_attachments.each do |f|
|
302
|
+
|
303
|
+
file = f['file']
|
304
|
+
extension = f['extension']
|
305
|
+
filename = f['filename']
|
306
|
+
full_filename = filename
|
307
|
+
full_filename = filename + extension if extension
|
308
|
+
full_filename = f['custom_filename'] if f['custom_filename']
|
309
|
+
|
310
|
+
contents = File.new(file, 'rb')
|
311
|
+
|
312
|
+
web["files[#{full_filename}]"] = contents
|
313
|
+
end
|
314
|
+
end
|
315
|
+
web
|
316
|
+
end
|
317
|
+
|
318
|
+
end
|
319
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.unshift File.dirname(__FILE__)
|
3
|
+
require "net/https"
|
4
|
+
require "rest-client"
|
5
|
+
|
6
|
+
module SendgridRuby
|
7
|
+
class Sendgrid
|
8
|
+
|
9
|
+
attr_accessor :debug_output
|
10
|
+
|
11
|
+
def initialize(username, password, options={"turn_off_ssl_verification" => false})
|
12
|
+
@username = username
|
13
|
+
@password = password
|
14
|
+
@options = options
|
15
|
+
@debug_output = false
|
16
|
+
end
|
17
|
+
|
18
|
+
def send(email)
|
19
|
+
form = email.to_web_format
|
20
|
+
form['api_user'] = @username
|
21
|
+
form['api_key'] = @password
|
22
|
+
|
23
|
+
RestClient.log = $stderr if @debug_output
|
24
|
+
|
25
|
+
response = RestClient.post 'https://api.sendgrid.com/api/mail.send.json', form, :content_type => :json
|
26
|
+
|
27
|
+
JSON.parse(response.body)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'sendgrid_ruby/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "sendgrid_ruby"
|
8
|
+
spec.version = SendgridRuby::VERSION
|
9
|
+
spec.authors = ["Wataru Sato"]
|
10
|
+
spec.email = ["awwa500@gmail.com"]
|
11
|
+
spec.summary = "Web API wrapper for SendGrid."
|
12
|
+
spec.description = "Web API wrapper for SendGrid."
|
13
|
+
spec.homepage = "https://github.com/sendgridjp/sendgrid-ruby"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "smtpapi"
|
22
|
+
spec.add_dependency "rest-client"
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
24
|
+
spec.add_development_dependency "rake"
|
25
|
+
end
|
data/test/file1.txt
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
こんにちは
|
data/test/file2.txt
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
こんにちは
|
data/test/file3.txt
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
こんにちは
|
data/test/gif
ADDED
Binary file
|
data/test/gif.gif
ADDED
Binary file
|