gmail-mailer 0.4.2 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
data/Changelog.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # gmail-mailer Changelog
2
2
 
3
+ ### 0.4.3
4
+ * Added attachment limits and recipient limits for messages
5
+ * Added retry functionality on sending mail
6
+ * Rejigged validation a little
7
+
3
8
  ### 0.4.2
4
9
  * Made error messages for credentials more detailed
5
10
 
data/Rakefile CHANGED
@@ -31,6 +31,12 @@ Rake::TestTask.new(:test) do |test|
31
31
  test.libs << 'lib' << 'test'
32
32
  test.pattern = 'test/**/test_*.rb'
33
33
  test.verbose = true
34
+ end
35
+
36
+ Rake::TestTask.new(:test_mail) do |test|
37
+ test.libs << 'lib' << 'test'
38
+ test.verbose = true
39
+ test.test_files = ['test/mail_test_send.rb']
34
40
 
35
41
  #tests sending a mail using user credentials (if provided)
36
42
  root = File.expand_path(File.dirname(__FILE__))
@@ -41,7 +47,6 @@ Rake::TestTask.new(:test) do |test|
41
47
  puts
42
48
  puts "Will test sending a mail using your user credentials found in #{file}"
43
49
  puts
44
- test.test_files = ['test/mail_test_send.rb']
45
50
  else
46
51
  puts
47
52
  puts "WILL NOT BE TESTING MAIL SEND FUNCTIONALITY. IF YOU WISH TO TEST THIS, CREATE A FILE WITH THE FOLLOWING: - "
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.2
1
+ 0.4.4
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.4.2"
8
+ s.version = "0.4.4"
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-14}
12
+ s.date = %q{2011-01-16}
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 = [
data/lib/gmail-mailer.rb CHANGED
@@ -6,10 +6,16 @@ module GmailMailer
6
6
  SMTP_HOST = "gmail.com"
7
7
  SMTP_CONSUMER_KEY = "anonymous"
8
8
  SMTP_CONSUMER_SECRET = "anonymous"
9
+ ATTACHMENTS_SIZE_LIMIT = (1024*1024)*25 #25mb attachment limit
10
+ RECIPIENT_LIMIT = 500
11
+ MAX_RETRY = 2
9
12
  class Mailer
10
13
  def initialize(credentials)
11
- result = validate_credentials(credentials)
12
- raise ArgumentError, "ERROR: Email credentials are invalid: -\n\n - #{result}" if result.nil? == false
14
+ begin
15
+ validate_credentials(credentials)
16
+ rescue
17
+ raise
18
+ end
13
19
  @email_credentials = credentials
14
20
  end
15
21
 
@@ -24,11 +30,23 @@ module GmailMailer
24
30
  mail.add_file(attachment)
25
31
  end
26
32
  end
27
- sendSMTP(mail)
33
+
34
+ retry_attempts = 0
35
+
36
+ begin
37
+ send_smtp(mail)
38
+ rescue => message
39
+ puts "Error occured attempting to send mail => #{message}"
40
+
41
+ raise message if(retry_attempts > MAX_RETRY)
42
+ puts "Retry: #{retry_attempts+1}/#{MAX_RETRY+1}"
43
+ retry_attempts = retry_attempts.succ
44
+ retry
45
+ end
28
46
  end
29
47
 
30
48
  # Use gmail_xoauth to send email
31
- def sendSMTP(mail)
49
+ def send_smtp(mail)
32
50
  smtp = Net::SMTP.new(SMTP_SERVER, SMTP_PORT)
33
51
  smtp.enable_starttls_auto
34
52
  secret = {
@@ -45,10 +63,11 @@ module GmailMailer
45
63
  end
46
64
 
47
65
  def validate_credentials(creds)
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?
66
+ msg = "ERROR: Email credentials are invalid:"
67
+ raise ArgumentError, "#{msg} The credentials you have posted are nil" if creds.nil?
68
+ raise ArgumentError, "#{msg} 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?
69
+ raise ArgumentError, "#{msg} 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?
70
+ raise ArgumentError, "#{msg} You must provide an email value" if !creds.key?:email or creds[:email].nil? or creds[:email].empty?
52
71
  return nil
53
72
  end
54
73
  end
@@ -67,13 +86,28 @@ module GmailMailer
67
86
  raise ArgumentError, "You must specify a file to send" if filepath.nil? or filepath.empty?
68
87
  raise ArgumentError, "File #{filepath} does not exist" if !File.exist?(filepath)
69
88
  raise ArgumentError, "#{filepath} file is a directory, this is not supported" if File.directory?(filepath)
89
+
90
+ size = File.size(filepath)
91
+ print "Adding attachment: #{filepath} "
92
+ printf("(%5.4f kb)",size.to_f/1024.0)
93
+ puts
94
+ raise ArgumentError, "There is a #{ATTACHMENTS_SIZE_LIMIT/1024/1024}mb limit on attachments}" if (get_attachments_size + size) > ATTACHMENTS_SIZE_LIMIT
70
95
  @attachments << filepath
71
96
  end
72
97
 
73
98
  def to=(to)
74
99
  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
100
+ raise ArgumentError, "You cannot send a message to more than #{RECIPIENT_LIMIT} recipients" if to.is_a?Array and to.count > RECIPIENT_LIMIT
101
+ @to = to.join(";") if to.is_a?Array
76
102
  @to = to if to.is_a?String
77
103
  end
104
+
105
+ def get_attachments_size
106
+ attachments_size = 0
107
+ @attachments.each do |attachment|
108
+ attachments_size += File.size(attachment)
109
+ end
110
+ return attachments_size
111
+ end
78
112
  end
79
113
  end
@@ -13,11 +13,11 @@ class TestMailSender < Test::Unit::TestCase
13
13
  end
14
14
 
15
15
  def test_send_message
16
- assert_nothing_raised {
16
+ assert_nothing_raised {
17
17
  mailer = GmailMailer::Mailer.new(@config)
18
18
  message = GmailMailer::Message.new(@config[:email], "Hello Subject", "Hello Body")
19
19
  mailer.send(message)
20
- }
20
+ }
21
21
  end
22
22
  end
23
23
 
data/test/test_message.rb CHANGED
@@ -2,6 +2,12 @@ require "gmail-mailer.rb"
2
2
  require 'fileutils'
3
3
  require 'test/unit'
4
4
  class TestMessage < Test::Unit::TestCase
5
+ def create_file(filename, size)
6
+ File.open(filename,'w') do |f|
7
+ f.puts "-"*size
8
+ end
9
+ end
10
+
5
11
  def setup
6
12
  @files = ['file1','file2','file3']
7
13
  @dir = File.expand_path("./tmpdir")
@@ -20,11 +26,10 @@ class TestMessage < Test::Unit::TestCase
20
26
 
21
27
  def createTmpFiles
22
28
  @files.each do |file|
23
- FileUtils.touch(file)
29
+ create_file(file, rand(1024))
24
30
  end
25
31
  end
26
32
 
27
-
28
33
  def test_constructor
29
34
  @msg = GmailMailer::Message.new("djharperuk@gmail.com","Subject","Body")
30
35
  assert_not_nil(@msg, "Item did not appear to construct correctly")
@@ -67,6 +72,13 @@ class TestMessage < Test::Unit::TestCase
67
72
  expected = to.join(";")
68
73
  assert_equal(expected, @msg.to, "Multiple receivers not detected")
69
74
  end
75
+
76
+ def test_to_with_array_of_more_than_acceptable_recipients
77
+ to = ("a@b.c,"*501).split(',')
78
+ assert_raise(ArgumentError) {
79
+ @msg.to= to
80
+ }
81
+ end
70
82
 
71
83
 
72
84
  def test_add_attachment
@@ -98,5 +110,52 @@ class TestMessage < Test::Unit::TestCase
98
110
  assert_raise(ArgumentError) { @msg.add_attachment(@dir) }
99
111
  end
100
112
 
113
+ def test_get_attachment_size
114
+ begin
115
+ file = "file5"
116
+ create_file(file, 1024*1024)
117
+ size = File.size(file)
118
+ @msg.add_attachment(file)
119
+ assert_equal(size, @msg.get_attachments_size)
120
+ ensure
121
+ FileUtils.rm(file)
122
+ end
123
+ end
124
+
125
+ def test_get_attachment_size_with_multiple_attachments
126
+ begin
127
+ file = "file5"
128
+ file2 = "file6"
129
+ create_file(file, 1024*1024)
130
+ create_file(file2,(1024*1024)*5)
131
+ size = File.size(file)
132
+ size2 = File.size(file2)
133
+ @msg.add_attachment(file)
134
+ @msg.add_attachment(file2)
135
+ assert_equal(size+size2, @msg.get_attachments_size)
136
+ ensure
137
+ FileUtils.rm(file)
138
+ FileUtils.rm(file2)
139
+ end
140
+ end
141
+
142
+ def test_add_attachment_with_over_limit
143
+ begin
144
+
145
+ file = "file5"
146
+ file2 = "file6"
147
+ create_file(file, 1024*1024)
148
+ create_file(file2,(1024*1024)*25)
149
+ size = File.size(file)
150
+ size2 = File.size(file2)
151
+ assert_raise(ArgumentError) {
152
+ @msg.add_attachment(file)
153
+ @msg.add_attachment(file2)
154
+ }
155
+ ensure
156
+ FileUtils.rm(file)
157
+ FileUtils.rm(file2)
158
+ end
159
+ end
101
160
  end
102
161
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 4
8
- - 2
9
- version: 0.4.2
8
+ - 4
9
+ version: 0.4.4
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-14 00:00:00 +00:00
17
+ date: 2011-01-16 00:00:00 +00:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency