gmail-mailer 0.3.0 → 0.4.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.
- data/Changelog.md +15 -4
- data/Rakefile +32 -0
- data/TODO.md +9 -0
- data/VERSION +1 -1
- data/gmail-mailer.gemspec +14 -4
- data/lib/gmail-mailer.rb +33 -22
- data/test/files/email_conf +3 -0
- data/test/mail_test_send.rb +24 -0
- data/test/test_mailer.rb +88 -0
- data/test/test_message.rb +102 -0
- metadata +16 -9
- data/TODO.txt +0 -4
data/Changelog.md
CHANGED
@@ -1,10 +1,21 @@
|
|
1
|
-
|
1
|
+
# gmail-mailer Changelog
|
2
2
|
|
3
|
-
|
3
|
+
### 0.4.0
|
4
|
+
* Added further validation on the `to` field
|
5
|
+
* Added ability to pass an array into the `to` field which will convert the `to` to a semi-colon delimited string
|
6
|
+
* Added getther and setter to `to` field for validation purposes
|
7
|
+
* Added support for multiple attachments
|
8
|
+
* Added support for multiple receivers
|
9
|
+
* Added further validation for email credentials/reduced number of credentials needed by making some values default
|
10
|
+
* Added some primitive unit tests for sending email
|
11
|
+
|
12
|
+
### 0.3.0
|
4
13
|
* Removed the `from` field from `GmailMailer::Message`
|
5
14
|
* Added accessors for `to`, `subject`, `body` fields
|
6
15
|
* put validation on `to` field.
|
7
|
-
|
16
|
+
|
17
|
+
### 0.2.0
|
8
18
|
* Removed attachments from the constructor and added `add_attachment` method
|
9
|
-
|
19
|
+
|
20
|
+
### 0.1.0
|
10
21
|
* Initial version
|
data/Rakefile
CHANGED
@@ -19,8 +19,40 @@ Jeweler::Tasks.new do |gem|
|
|
19
19
|
gem.description = %Q{Programatically send emails using a given gmail account. No username/passwords needed, just use your OAUTH credentials}
|
20
20
|
gem.email = "djharperuk@gmail.com"
|
21
21
|
gem.authors = ["Daniel Harper"]
|
22
|
+
gem.required_ruby_version = ">= 1.9.2"
|
22
23
|
gem.add_dependency "mail","~> 2.2.14"
|
23
24
|
gem.add_dependency "gmail_xoauth", "~> 0.3.0"
|
24
25
|
end
|
25
26
|
Jeweler::RubygemsDotOrgTasks.new
|
26
27
|
|
28
|
+
require 'rake/testtask'
|
29
|
+
PRIVATE_CREDENTIALS = "files/private_key_conf_file"
|
30
|
+
Rake::TestTask.new(:test) do |test|
|
31
|
+
test.libs << 'lib' << 'test'
|
32
|
+
test.pattern = 'test/**/test_*.rb'
|
33
|
+
test.verbose = true
|
34
|
+
|
35
|
+
#tests sending a mail using user credentials (if provided)
|
36
|
+
root = File.expand_path(File.dirname(__FILE__))
|
37
|
+
root = File.expand_path("./test", root)
|
38
|
+
file = File.join(root, "/#{PRIVATE_CREDENTIALS}")
|
39
|
+
|
40
|
+
if File.exist?(file)
|
41
|
+
puts
|
42
|
+
puts "Will test sending a mail using your user credentials found in #{file}"
|
43
|
+
puts
|
44
|
+
test.test_files = ['test/mail_test_send.rb']
|
45
|
+
else
|
46
|
+
puts
|
47
|
+
puts "WILL NOT BE TESTING MAIL SEND FUNCTIONALITY. IF YOU WISH TO TEST THIS, CREATE A FILE WITH THE FOLLOWING: - "
|
48
|
+
puts
|
49
|
+
puts " smtp_oauth_token: <your outh token>"
|
50
|
+
puts " smtp_oauth_token_secret: <your oauth token secret>"
|
51
|
+
puts " email: <your email>"
|
52
|
+
puts
|
53
|
+
puts "place this information in test/files/private_key_conf_file"
|
54
|
+
puts
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
task :default => :test
|
data/TODO.md
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
#gmail-mailer TODO LIST
|
2
|
+
|
3
|
+
* Better validation for email configuration
|
4
|
+
* Add better handling for SMTP errors
|
5
|
+
* unit testing- STARTED
|
6
|
+
** Need some sort of mock testing framework for SMTP messages
|
7
|
+
* add support for adding directories
|
8
|
+
* add size limits/checking for attachments
|
9
|
+
* reconfigure the way mailer sends message, queue messages up THEN send
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/gmail-mailer.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{gmail-mailer}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Daniel Harper"]
|
12
|
-
s.date = %q{2011-01-
|
12
|
+
s.date = %q{2011-01-14}
|
13
13
|
s.description = %q{Programatically send emails using a given gmail account. No username/passwords needed, just use your OAUTH credentials}
|
14
14
|
s.email = %q{djharperuk@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -24,16 +24,26 @@ Gem::Specification.new do |s|
|
|
24
24
|
"LICENSE.txt",
|
25
25
|
"README.md",
|
26
26
|
"Rakefile",
|
27
|
-
"TODO.
|
27
|
+
"TODO.md",
|
28
28
|
"VERSION",
|
29
29
|
"gmail-mailer.gemspec",
|
30
|
-
"lib/gmail-mailer.rb"
|
30
|
+
"lib/gmail-mailer.rb",
|
31
|
+
"test/files/email_conf",
|
32
|
+
"test/mail_test_send.rb",
|
33
|
+
"test/test_mailer.rb",
|
34
|
+
"test/test_message.rb"
|
31
35
|
]
|
32
36
|
s.homepage = %q{http://github.com/djhworld/gmail-mailer}
|
33
37
|
s.licenses = ["MIT"]
|
34
38
|
s.require_paths = ["lib"]
|
39
|
+
s.required_ruby_version = Gem::Requirement.new(">= 1.9.2")
|
35
40
|
s.rubygems_version = %q{1.3.7}
|
36
41
|
s.summary = %q{Send emails using a your gmail account (via OAUTH)}
|
42
|
+
s.test_files = [
|
43
|
+
"test/mail_test_send.rb",
|
44
|
+
"test/test_mailer.rb",
|
45
|
+
"test/test_message.rb"
|
46
|
+
]
|
37
47
|
|
38
48
|
if s.respond_to? :specification_version then
|
39
49
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
data/lib/gmail-mailer.rb
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
require 'mail'
|
2
2
|
require 'gmail_xoauth'
|
3
3
|
module GmailMailer
|
4
|
+
SMTP_SERVER = "smtp.gmail.com"
|
5
|
+
SMTP_PORT = "587"
|
6
|
+
SMTP_HOST = "gmail.com"
|
7
|
+
SMTP_CONSUMER_KEY = "anonymous"
|
8
|
+
SMTP_CONSUMER_SECRET = "anonymous"
|
4
9
|
class Mailer
|
5
10
|
def initialize(credentials)
|
6
|
-
|
11
|
+
result = validate_credentials(credentials)
|
12
|
+
raise ArgumentError, result if result.nil? == false
|
7
13
|
@email_credentials = credentials
|
8
14
|
end
|
9
15
|
|
@@ -12,8 +18,10 @@ module GmailMailer
|
|
12
18
|
to message.to
|
13
19
|
subject message.subject
|
14
20
|
body message.body
|
15
|
-
|
16
|
-
|
21
|
+
end
|
22
|
+
if(!message.attachments.empty?)
|
23
|
+
message.attachments.each do |attachment|
|
24
|
+
mail.add_file(attachment)
|
17
25
|
end
|
18
26
|
end
|
19
27
|
sendSMTP(mail)
|
@@ -21,15 +29,15 @@ module GmailMailer
|
|
21
29
|
|
22
30
|
# Use gmail_xoauth to send email
|
23
31
|
def sendSMTP(mail)
|
24
|
-
smtp = Net::SMTP.new(
|
32
|
+
smtp = Net::SMTP.new(SMTP_SERVER, SMTP_PORT)
|
25
33
|
smtp.enable_starttls_auto
|
26
34
|
secret = {
|
27
|
-
:consumer_key =>
|
28
|
-
:consumer_secret =>
|
35
|
+
:consumer_key => SMTP_CONSUMER_KEY,
|
36
|
+
:consumer_secret => SMTP_CONSUMER_SECRET,
|
29
37
|
:token => @email_credentials[:smtp_oauth_token],
|
30
38
|
:token_secret => @email_credentials[:smtp_oauth_token_secret]
|
31
39
|
}
|
32
|
-
smtp.start(
|
40
|
+
smtp.start(SMTP_HOST, @email_credentials[:email], secret, :xoauth) do |session|
|
33
41
|
print "Sending message..."
|
34
42
|
session.send_message(mail.encoded, mail.from_addrs.first, mail.destinations)
|
35
43
|
puts ".sent!"
|
@@ -37,32 +45,35 @@ module GmailMailer
|
|
37
45
|
end
|
38
46
|
|
39
47
|
def validate_credentials(creds)
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
false if !creds.key?:smtp_oauth_token or creds[:smtp_oauth_token].nil?
|
46
|
-
false if !creds.key?:smtp_oauth_token_secret or creds[:smtp_oauth_token_secret].nil?
|
47
|
-
false if !creds.key?:host or creds[:host].nil?
|
48
|
-
false if !creds.key?:email or creds[:email].nil?
|
49
|
-
return true
|
48
|
+
return "The credentials you have posted are nil" if creds.nil?
|
49
|
+
return "You must provide a smtp_oauth_token value!" if !creds.key?:smtp_oauth_token or creds[:smtp_oauth_token].nil? or creds[:smtp_oauth_token].empty?
|
50
|
+
return "You must provide a smtp_oauth_token_secret value!" if !creds.key?:smtp_oauth_token_secret or creds[:smtp_oauth_token_secret].nil? or creds[:smtp_oauth_token_secret].empty?
|
51
|
+
return "You must provide an email value" if !creds.key?:email or creds[:email].nil? or creds[:email].empty?
|
52
|
+
return nil
|
50
53
|
end
|
51
54
|
end
|
52
55
|
|
53
56
|
class Message
|
54
|
-
attr_accessor :
|
55
|
-
attr_reader :attachments
|
57
|
+
attr_accessor :subject, :body
|
58
|
+
attr_reader :to, :attachments
|
56
59
|
def initialize(to, subject="", body="")
|
57
|
-
|
58
|
-
@to = to
|
60
|
+
self.to=(to)
|
59
61
|
@subject = subject
|
60
62
|
@body = body
|
61
63
|
@attachments = []
|
62
64
|
end
|
63
65
|
|
64
66
|
def add_attachment(filepath)
|
65
|
-
|
67
|
+
raise ArgumentError, "You must specify a file to send" if filepath.nil? or filepath.empty?
|
68
|
+
raise ArgumentError, "File #{filepath} does not exist" if !File.exist?(filepath)
|
69
|
+
raise ArgumentError, "#{filepath} file is a directory, this is not supported" if File.directory?(filepath)
|
70
|
+
@attachments << filepath
|
71
|
+
end
|
72
|
+
|
73
|
+
def to=(to)
|
74
|
+
raise ArgumentError, "You must specify an email address to send the message to!" if(to.nil? or to.empty?)
|
75
|
+
@to = to.join(";") if to.is_a?Array
|
76
|
+
@to = to if to.is_a?String
|
66
77
|
end
|
67
78
|
end
|
68
79
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'gmail-mailer.rb'
|
2
|
+
require 'yaml'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
class TestMailSender < Test::Unit::TestCase
|
6
|
+
PRIVATE_CREDENTIALS = "files/private_key_conf_file"
|
7
|
+
def setup
|
8
|
+
root = File.expand_path(File.dirname(__FILE__))
|
9
|
+
root = File.expand_path("../test", root)
|
10
|
+
file = File.join(root, "/#{PRIVATE_CREDENTIALS}")
|
11
|
+
raise Exception, "You have not setup a credentials file for your gmail account to test with" if !File.exists?(file)
|
12
|
+
@config = YAML.load_file(file).inject({}){|memo,(k,v)| memo[k.to_sym] = v.to_s; memo}
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_send_message
|
16
|
+
assert_nothing_raised {
|
17
|
+
mailer = GmailMailer::Mailer.new(@config)
|
18
|
+
message = GmailMailer::Message.new(@config[:email], "Hello Subject", "Hello Body")
|
19
|
+
mailer.send(message)
|
20
|
+
}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
|
data/test/test_mailer.rb
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
require "gmail-mailer.rb"
|
2
|
+
require 'yaml'
|
3
|
+
require 'test/unit'
|
4
|
+
class TestMailer < Test::Unit::TestCase
|
5
|
+
CREDS_FILE = "files/email_conf"
|
6
|
+
def setup
|
7
|
+
root = File.expand_path(File.dirname(__FILE__))
|
8
|
+
root = File.expand_path("../test", root)
|
9
|
+
file = File.join(root, "/#{CREDS_FILE}")
|
10
|
+
@credentials = YAML.load_file(file).inject({}){|memo,(k,v)| memo[k.to_sym] = v.to_s; memo}
|
11
|
+
@mailer = GmailMailer::Mailer.new(@credentials)
|
12
|
+
end
|
13
|
+
|
14
|
+
def teardown
|
15
|
+
@credentials = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_constructor
|
19
|
+
assert_nothing_raised { @mailer = GmailMailer::Mailer.new(@credentials) }
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_constructor_with_nil_credentials
|
23
|
+
assert_raise(ArgumentError) { @mailer = GmailMailer::Mailer.new(nil) }
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_constructor_with_no_smtp_oauth_token
|
27
|
+
assert_raise(ArgumentError) {
|
28
|
+
@credentials.delete(:smtp_oauth_token)
|
29
|
+
@mailer = GmailMailer::Mailer.new(@credentials)
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_constructor_with_nil_smtp_outh_token
|
34
|
+
assert_raise(ArgumentError) {
|
35
|
+
@credentials[:smtp_oauth_token] = nil
|
36
|
+
@mailer = GmailMailer::Mailer.new(@credentials)
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_constructor_with_empty_smtp_oauth_token
|
41
|
+
assert_raise(ArgumentError) {
|
42
|
+
@credentials[:smtp_oauth_token] = ""
|
43
|
+
@mailer = GmailMailer::Mailer.new(@credentials)
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_constructor_with_no_smtp_oauth_token_secret
|
48
|
+
assert_raise(ArgumentError) {
|
49
|
+
@credentials.delete(:smtp_oauth_token_secret)
|
50
|
+
@mailer = GmailMailer::Mailer.new(@credentials)
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_constructor_with_nil_smtp_outh_token_secret
|
55
|
+
assert_raise(ArgumentError) {
|
56
|
+
@credentials[:smtp_oauth_token_secret] = nil
|
57
|
+
@mailer = GmailMailer::Mailer.new(@credentials)
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_constructor_with_empty_smtp_oauth_token_secret
|
62
|
+
assert_raise(ArgumentError) {
|
63
|
+
@credentials[:smtp_oauth_token_secret] = ""
|
64
|
+
@mailer = GmailMailer::Mailer.new(@credentials)
|
65
|
+
}
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_constructor_with_no_email
|
69
|
+
assert_raise(ArgumentError) {
|
70
|
+
@credentials.delete(:email)
|
71
|
+
@mailer = GmailMailer::Mailer.new(@credentials)
|
72
|
+
}
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_constructor_with_nil_email
|
76
|
+
assert_raise(ArgumentError) {
|
77
|
+
@credentials[:email] = nil
|
78
|
+
@mailer = GmailMailer::Mailer.new(@credentials)
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_constructor_with_empty_email
|
83
|
+
assert_raise(ArgumentError) {
|
84
|
+
@credentials[:email] = ""
|
85
|
+
@mailer = GmailMailer::Mailer.new(@credentials)
|
86
|
+
}
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require "gmail-mailer.rb"
|
2
|
+
require 'fileutils'
|
3
|
+
require 'test/unit'
|
4
|
+
class TestMessage < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@files = ['file1','file2','file3']
|
7
|
+
@dir = File.expand_path("./tmpdir")
|
8
|
+
Dir.mkdir(@dir)
|
9
|
+
createTmpFiles
|
10
|
+
@msg = GmailMailer::Message.new("to","subject","body")
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
@files.each do |file|
|
15
|
+
FileUtils.rm(file)
|
16
|
+
end
|
17
|
+
Dir.rmdir(@dir)
|
18
|
+
@msg = nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def createTmpFiles
|
22
|
+
@files.each do |file|
|
23
|
+
FileUtils.touch(file)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
def test_constructor
|
29
|
+
@msg = GmailMailer::Message.new("djharperuk@gmail.com","Subject","Body")
|
30
|
+
assert_not_nil(@msg, "Item did not appear to construct correctly")
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_constructor_for_attributes
|
34
|
+
to, subject, body = "a@b.c", "subject", "body"
|
35
|
+
@msg = GmailMailer::Message.new(to, subject, body)
|
36
|
+
assert_equal(to, @msg.to)
|
37
|
+
assert_equal(subject, @msg.subject)
|
38
|
+
assert_equal(body, @msg.body)
|
39
|
+
assert_equal([], @msg.attachments)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_constructor_throws_exc_on_empty_to_field
|
43
|
+
to, subject, body = "", "subject", "body"
|
44
|
+
assert_raise(ArgumentError) { @msg = GmailMailer::Message.new(to, subject, body) }
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_constructor_multiple_receivers
|
48
|
+
first = "a@b.c"
|
49
|
+
second = "b@c.d"
|
50
|
+
to = [first,second]
|
51
|
+
@msg = GmailMailer::Message.new(to, "", "")
|
52
|
+
expected = to.join(";")
|
53
|
+
assert_equal(expected, @msg.to, "Multiple receivers not detected")
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_to_=
|
57
|
+
to = "a@b.c"
|
58
|
+
@msg.to= to
|
59
|
+
assert_equal(to, @msg.to)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_to_with_array
|
63
|
+
first = "a@b.c"
|
64
|
+
second = "b@c.d"
|
65
|
+
to = [first,second]
|
66
|
+
@msg.to= to
|
67
|
+
expected = to.join(";")
|
68
|
+
assert_equal(expected, @msg.to, "Multiple receivers not detected")
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
def test_add_attachment
|
73
|
+
@msg.add_attachment(@files.first)
|
74
|
+
assert_equal(1,@msg.attachments.count, "There should be 1 item in the list!")
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_add_attachments
|
78
|
+
@msg.add_attachment(@files.pop)
|
79
|
+
@msg.add_attachment(@files.pop)
|
80
|
+
assert_equal(2,@msg.attachments.count, "There should be 2 items in the list!")
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_add_attachment_with_empty_string
|
84
|
+
assert_raise(ArgumentError) { @msg.add_attachment("") }
|
85
|
+
assert_equal(0, @msg.attachments.count, "There should be no items in the list!")
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_add_attachment_with_nil_string
|
89
|
+
assert_raise(ArgumentError) { @msg.add_attachment("") }
|
90
|
+
assert_equal(0, @msg.attachments.count, "There should be no items in the list!")
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_add_file_that_doesnt_exist
|
94
|
+
assert_raise(ArgumentError) { @msg.add_attachment("asjdasjdhasdjhaksjdh") }
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_add_file_that_is_actually_a_dir
|
98
|
+
assert_raise(ArgumentError) { @msg.add_attachment(@dir) }
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 4
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.4.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Daniel Harper
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-14 00:00:00 +00:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -124,10 +124,14 @@ files:
|
|
124
124
|
- LICENSE.txt
|
125
125
|
- README.md
|
126
126
|
- Rakefile
|
127
|
-
- TODO.
|
127
|
+
- TODO.md
|
128
128
|
- VERSION
|
129
129
|
- gmail-mailer.gemspec
|
130
130
|
- lib/gmail-mailer.rb
|
131
|
+
- test/files/email_conf
|
132
|
+
- test/mail_test_send.rb
|
133
|
+
- test/test_mailer.rb
|
134
|
+
- test/test_message.rb
|
131
135
|
has_rdoc: true
|
132
136
|
homepage: http://github.com/djhworld/gmail-mailer
|
133
137
|
licenses:
|
@@ -142,10 +146,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
142
146
|
requirements:
|
143
147
|
- - ">="
|
144
148
|
- !ruby/object:Gem::Version
|
145
|
-
hash: -3791998660236781509
|
146
149
|
segments:
|
147
|
-
-
|
148
|
-
|
150
|
+
- 1
|
151
|
+
- 9
|
152
|
+
- 2
|
153
|
+
version: 1.9.2
|
149
154
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
155
|
none: false
|
151
156
|
requirements:
|
@@ -161,5 +166,7 @@ rubygems_version: 1.3.7
|
|
161
166
|
signing_key:
|
162
167
|
specification_version: 3
|
163
168
|
summary: Send emails using a your gmail account (via OAUTH)
|
164
|
-
test_files:
|
165
|
-
|
169
|
+
test_files:
|
170
|
+
- test/mail_test_send.rb
|
171
|
+
- test/test_mailer.rb
|
172
|
+
- test/test_message.rb
|
data/TODO.txt
DELETED