sendgrid_ruby 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,3 @@
1
+ module SendgridRuby
2
+ VERSION = "0.0.1"
3
+ 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