aws-ses 0.3.2 → 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 +7 -0
- data/README.erb +19 -2
- data/README.rdoc +65 -3
- data/TODO +2 -0
- data/VERSION +1 -1
- data/aws-ses.gemspec +7 -2
- data/lib/aws/actionmailer/ses_extension.rb +19 -0
- data/lib/aws/ses.rb +6 -1
- data/lib/aws/ses/addresses.rb +2 -1
- data/lib/aws/ses/base.rb +2 -2
- data/lib/aws/ses/info.rb +76 -2
- data/lib/aws/ses/response.rb +7 -4
- data/lib/aws/ses/send_email.rb +12 -2
- data/lib/aws/ses/version.rb +2 -2
- data/test/address_test.rb +72 -0
- data/test/info_test.rb +108 -0
- data/test/send_email_test.rb +26 -27
- metadata +10 -5
data/CHANGELOG
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
0.4.0:
|
2
|
+
* This version may have some small incompatibilities due to adding support for MessageId. Check that the result still matches what you previously expected.
|
3
|
+
* Added MessageId support in responses
|
4
|
+
* Improved resulting data from many responses
|
5
|
+
* Added tests and documentation for quota and statistics
|
6
|
+
* Added Rails 2.3.x support ( I HOPE!!! )
|
7
|
+
|
1
8
|
0.3.2:
|
2
9
|
* Removed unused extensions that were conflicting with S3
|
3
10
|
|
data/README.erb
CHANGED
@@ -16,11 +16,13 @@
|
|
16
16
|
|
17
17
|
== Rails
|
18
18
|
|
19
|
-
This gem is compatible with Rails >= 3.0.0
|
19
|
+
This gem is compatible with Rails >= 3.0.0 and Rails 2.3.x
|
20
20
|
|
21
21
|
To use, first add the gem to your Gemfile:
|
22
22
|
|
23
|
-
gem "aws-ses", "~> 0.
|
23
|
+
gem "aws-ses", "~> 0.4.0", :require => 'aws/ses'
|
24
|
+
|
25
|
+
== For Rails 3.x
|
24
26
|
|
25
27
|
Then, add your Amazon credentials and extend ActionMailer in `config/initializers/amazon_ses.rb`:
|
26
28
|
|
@@ -32,6 +34,15 @@ Then set the delivery method in `config/environments/*rb` as appropriate:
|
|
32
34
|
|
33
35
|
config.action_mailer.delivery_method = :ses
|
34
36
|
|
37
|
+
== For Rails 2.3.x
|
38
|
+
|
39
|
+
Then set the delivery method in `config/environments/*rb` as appropriate:
|
40
|
+
|
41
|
+
config.after_initialize do
|
42
|
+
ActionMailer::Base.delivery_method = :amazon_ses
|
43
|
+
ActionMailer::Base.custom_amazon_ses_mailer = AWS::SES::Base.new(:secret_access_key => 'abc', :access_key_id => '123')
|
44
|
+
end
|
45
|
+
|
35
46
|
== Source
|
36
47
|
|
37
48
|
Available at: https://github.com/drewblas/aws-ses
|
@@ -53,3 +64,9 @@ Copyright (c) 2011 Drew Blas. See LICENSE for further details.
|
|
53
64
|
== Thanks
|
54
65
|
|
55
66
|
Special thanks to Marcel Molina Jr. for his creation of AWS::S3 which I used portions of to get things working.
|
67
|
+
|
68
|
+
=== Other Contributors:
|
69
|
+
|
70
|
+
* croaky
|
71
|
+
* nathanbertram
|
72
|
+
* sshaw
|
data/README.rdoc
CHANGED
@@ -62,18 +62,65 @@ You can access these methods as follows:
|
|
62
62
|
|
63
63
|
== Info
|
64
64
|
|
65
|
-
Adds functionality for the statistics and info
|
65
|
+
Adds functionality for the statistics and info send quota data that Amazon SES makes available
|
66
66
|
|
67
|
-
You can
|
67
|
+
You can access these methods as follows:
|
68
|
+
|
69
|
+
ses = AWS::SES::Base.new( ... connection info ... )
|
70
|
+
|
71
|
+
== Get the quota information
|
72
|
+
response = ses.quota
|
73
|
+
# How many e-mails you've sent in the last 24 hours
|
74
|
+
response.send_last_24_hours
|
75
|
+
# How many e-mails you're allowed to send in 24 hours
|
76
|
+
response.max_24_hour_send
|
77
|
+
# How many e-mails you can send per second
|
78
|
+
response.max_send_rate
|
79
|
+
|
80
|
+
== Get detailed send statistics
|
81
|
+
The result is a list of data points, representing the last two weeks of sending activity.
|
82
|
+
Each data point in the list contains statistics for a 15-minute interval.
|
83
|
+
GetSendStatisticsResponse#data_points is an array where each element is a hash with give string keys:
|
84
|
+
|
85
|
+
* +Bounces+
|
86
|
+
* +DeliveryAttempts+
|
87
|
+
* +Rejects+
|
88
|
+
* +Complaints+
|
89
|
+
* +Timestamp+
|
90
|
+
|
91
|
+
response = ses.statistics
|
92
|
+
response.data_points # =>
|
93
|
+
[{"Bounces"=>"0",
|
94
|
+
"Timestamp"=>"2011-01-26T16:30:00Z",
|
95
|
+
"DeliveryAttempts"=>"1",
|
96
|
+
"Rejects"=>"0",
|
97
|
+
"Complaints"=>"0"},
|
98
|
+
{"Bounces"=>"0",
|
99
|
+
"Timestamp"=>"2011-02-09T14:45:00Z",
|
100
|
+
"DeliveryAttempts"=>"3",
|
101
|
+
"Rejects"=>"0",
|
102
|
+
"Complaints"=>"0"},
|
103
|
+
{"Bounces"=>"0",
|
104
|
+
"Timestamp"=>"2011-01-31T15:30:00Z",
|
105
|
+
"DeliveryAttempts"=>"3",
|
106
|
+
"Rejects"=>"0",
|
107
|
+
"Complaints"=>"0"},
|
108
|
+
{"Bounces"=>"0",
|
109
|
+
"Timestamp"=>"2011-01-31T16:00:00Z",
|
110
|
+
"DeliveryAttempts"=>"3",
|
111
|
+
"Rejects"=>"0",
|
112
|
+
"Complaints"=>"0"}]
|
68
113
|
|
69
114
|
|
70
115
|
== Rails
|
71
116
|
|
72
|
-
This gem is compatible with Rails >= 3.0.0
|
117
|
+
This gem is compatible with Rails >= 3.0.0 and Rails 2.3.x
|
73
118
|
|
74
119
|
To use, first add the gem to your Gemfile:
|
75
120
|
|
76
121
|
gem "aws-ses", "~> 0.3.1", :require => 'aws/ses'
|
122
|
+
|
123
|
+
== For Rails 3.x
|
77
124
|
|
78
125
|
Then, add your Amazon credentials and extend ActionMailer in `config/initializers/amazon_ses.rb`:
|
79
126
|
|
@@ -85,6 +132,15 @@ Then set the delivery method in `config/environments/*rb` as appropriate:
|
|
85
132
|
|
86
133
|
config.action_mailer.delivery_method = :ses
|
87
134
|
|
135
|
+
== For Rails 2.3.x
|
136
|
+
|
137
|
+
Then set the delivery method in `config/environments/*rb` as appropriate:
|
138
|
+
|
139
|
+
config.after_initialize do
|
140
|
+
ActionMailer::Base.delivery_method = :amazon_ses
|
141
|
+
ActionMailer::Base.custom_amazon_ses_mailer = AWS::SES::Base.new(:secret_access_key => 'abc', :access_key_id => '123')
|
142
|
+
end
|
143
|
+
|
88
144
|
== Source
|
89
145
|
|
90
146
|
Available at: https://github.com/drewblas/aws-ses
|
@@ -106,3 +162,9 @@ Copyright (c) 2011 Drew Blas. See LICENSE for further details.
|
|
106
162
|
== Thanks
|
107
163
|
|
108
164
|
Special thanks to Marcel Molina Jr. for his creation of AWS::S3 which I used portions of to get things working.
|
165
|
+
|
166
|
+
=== Other Contributors:
|
167
|
+
|
168
|
+
* croaky
|
169
|
+
* nathanbertram
|
170
|
+
* sshaw
|
data/TODO
CHANGED
@@ -1 +1,3 @@
|
|
1
1
|
* Use a better XML parser (and be consistent)
|
2
|
+
* Rename Base to something else (probably Mailer): Nothing else actually inherits from Base, so that is a very poor naming convention. I intend to change it in the future
|
3
|
+
* Integer responses should probably be cast to ints instead of left as strings
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/aws-ses.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{aws-ses}
|
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 = ["Drew Blas", "Marcel Molina Jr."]
|
12
|
-
s.date = %q{2011-02-
|
12
|
+
s.date = %q{2011-02-09}
|
13
13
|
s.description = %q{Client library for Amazon's Simple Email Service's REST API}
|
14
14
|
s.email = %q{drew.blas@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
|
|
30
30
|
"TODO",
|
31
31
|
"VERSION",
|
32
32
|
"aws-ses.gemspec",
|
33
|
+
"lib/aws/actionmailer/ses_extension.rb",
|
33
34
|
"lib/aws/ses.rb",
|
34
35
|
"lib/aws/ses/addresses.rb",
|
35
36
|
"lib/aws/ses/base.rb",
|
@@ -38,10 +39,12 @@ Gem::Specification.new do |s|
|
|
38
39
|
"lib/aws/ses/response.rb",
|
39
40
|
"lib/aws/ses/send_email.rb",
|
40
41
|
"lib/aws/ses/version.rb",
|
42
|
+
"test/address_test.rb",
|
41
43
|
"test/base_test.rb",
|
42
44
|
"test/extensions_test.rb",
|
43
45
|
"test/fixtures.rb",
|
44
46
|
"test/helper.rb",
|
47
|
+
"test/info_test.rb",
|
45
48
|
"test/mocks/fake_response.rb",
|
46
49
|
"test/response_test.rb",
|
47
50
|
"test/send_email_test.rb"
|
@@ -52,10 +55,12 @@ Gem::Specification.new do |s|
|
|
52
55
|
s.rubygems_version = %q{1.4.2}
|
53
56
|
s.summary = %q{Client library for Amazon's Simple Email Service's REST API}
|
54
57
|
s.test_files = [
|
58
|
+
"test/address_test.rb",
|
55
59
|
"test/base_test.rb",
|
56
60
|
"test/extensions_test.rb",
|
57
61
|
"test/fixtures.rb",
|
58
62
|
"test/helper.rb",
|
63
|
+
"test/info_test.rb",
|
59
64
|
"test/mocks/fake_response.rb",
|
60
65
|
"test/response_test.rb",
|
61
66
|
"test/send_email_test.rb"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# A quick little extension to use this lib with with rails 2.3.X
|
2
|
+
# To use it, in your environment.rb or some_environment.rb you simply set
|
3
|
+
#
|
4
|
+
# config.after_initialize do
|
5
|
+
# ActionMailer::Base.delivery_method = :amazon_ses
|
6
|
+
# ActionMailer::Base.custom_amazon_ses_mailer = AWS::SES::Base.new(:secret_access_key => S3_CONFIG[:secret_access_key], :access_key_id => S3_CONFIG[:access_key_id])
|
7
|
+
# end
|
8
|
+
|
9
|
+
module ActionMailer
|
10
|
+
class Base
|
11
|
+
cattr_accessor :custom_amazon_ses_mailer
|
12
|
+
|
13
|
+
def perform_delivery_amazon_ses(mail)
|
14
|
+
raise 'AWS::SES::Base has not been intitialized.' unless @@custom_amazon_ses_mailer
|
15
|
+
@@custom_amazon_ses_mailer.deliver!(mail)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
data/lib/aws/ses.rb
CHANGED
@@ -20,4 +20,9 @@ require 'ses/send_email'
|
|
20
20
|
require 'ses/info'
|
21
21
|
require 'ses/base'
|
22
22
|
require 'ses/version'
|
23
|
-
require 'ses/addresses'
|
23
|
+
require 'ses/addresses'
|
24
|
+
|
25
|
+
if defined?(Rails)
|
26
|
+
major, minor = Rails.version.split('.')
|
27
|
+
require 'actionmailer/ses_extension' if major == '2' && minor == '3'
|
28
|
+
end
|
data/lib/aws/ses/addresses.rb
CHANGED
@@ -47,12 +47,13 @@ module AWS
|
|
47
47
|
|
48
48
|
class ListVerifiedEmailAddressesResponse < AWS::SES::Response
|
49
49
|
def result
|
50
|
-
if members = parsed['VerifiedEmailAddresses']
|
50
|
+
if members = parsed['ListVerifiedEmailAddressesResult']['VerifiedEmailAddresses']
|
51
51
|
[members['member']].flatten
|
52
52
|
else
|
53
53
|
[]
|
54
54
|
end
|
55
55
|
end
|
56
|
+
memoized :result
|
56
57
|
end
|
57
58
|
|
58
59
|
class VerifyEmailAddressResponse < AWS::SES::Response
|
data/lib/aws/ses/base.rb
CHANGED
@@ -127,8 +127,8 @@ module AWS #:nodoc:
|
|
127
127
|
# allow us to have a one line call in each method which will do all of the work
|
128
128
|
# in making the actual request to AWS.
|
129
129
|
def request(action, params = {})
|
130
|
-
# remove any keys that have nil or empty values
|
131
|
-
params.reject
|
130
|
+
# Use a copy so that we don't modify the caller's Hash, remove any keys that have nil or empty values
|
131
|
+
params = params.reject { |key, value| value.nil? or value.empty?}
|
132
132
|
|
133
133
|
timestamp = Time.now.getutc
|
134
134
|
|
data/lib/aws/ses/info.rb
CHANGED
@@ -1,8 +1,54 @@
|
|
1
1
|
module AWS
|
2
2
|
module SES
|
3
|
-
# Adds functionality for the statistics and info
|
3
|
+
# Adds functionality for the statistics and info send quota data that Amazon SES makes available
|
4
4
|
#
|
5
|
-
# You can
|
5
|
+
# You can access these methods as follows:
|
6
|
+
#
|
7
|
+
# ses = AWS::SES::Base.new( ... connection info ... )
|
8
|
+
#
|
9
|
+
# == Get the quota information
|
10
|
+
# response = ses.quota
|
11
|
+
# # How many e-mails you've sent in the last 24 hours
|
12
|
+
# response.send_last_24_hours
|
13
|
+
# # How many e-mails you're allowed to send in 24 hours
|
14
|
+
# response.max_24_hour_send
|
15
|
+
# # How many e-mails you can send per second
|
16
|
+
# response.max_send_rate
|
17
|
+
#
|
18
|
+
# == Get detailed send statistics
|
19
|
+
# The result is a list of data points, representing the last two weeks of sending activity.
|
20
|
+
# Each data point in the list contains statistics for a 15-minute interval.
|
21
|
+
# GetSendStatisticsResponse#data_points is an array where each element is a hash with give string keys:
|
22
|
+
#
|
23
|
+
# * +Bounces+
|
24
|
+
# * +DeliveryAttempts+
|
25
|
+
# * +Rejects+
|
26
|
+
# * +Complaints+
|
27
|
+
# * +Timestamp+
|
28
|
+
#
|
29
|
+
# response = ses.statistics
|
30
|
+
# response.data_points # =>
|
31
|
+
# [{"Bounces"=>"0",
|
32
|
+
# "Timestamp"=>"2011-01-26T16:30:00Z",
|
33
|
+
# "DeliveryAttempts"=>"1",
|
34
|
+
# "Rejects"=>"0",
|
35
|
+
# "Complaints"=>"0"},
|
36
|
+
# {"Bounces"=>"0",
|
37
|
+
# "Timestamp"=>"2011-02-09T14:45:00Z",
|
38
|
+
# "DeliveryAttempts"=>"3",
|
39
|
+
# "Rejects"=>"0",
|
40
|
+
# "Complaints"=>"0"},
|
41
|
+
# {"Bounces"=>"0",
|
42
|
+
# "Timestamp"=>"2011-01-31T15:30:00Z",
|
43
|
+
# "DeliveryAttempts"=>"3",
|
44
|
+
# "Rejects"=>"0",
|
45
|
+
# "Complaints"=>"0"},
|
46
|
+
# {"Bounces"=>"0",
|
47
|
+
# "Timestamp"=>"2011-01-31T16:00:00Z",
|
48
|
+
# "DeliveryAttempts"=>"3",
|
49
|
+
# "Rejects"=>"0",
|
50
|
+
# "Complaints"=>"0"}]
|
51
|
+
|
6
52
|
module Info
|
7
53
|
# Returns quota information provided by SES
|
8
54
|
#
|
@@ -18,9 +64,37 @@ module AWS
|
|
18
64
|
end
|
19
65
|
|
20
66
|
class GetSendQuotaResponse < AWS::SES::Response
|
67
|
+
def result
|
68
|
+
parsed['GetSendQuotaResult']
|
69
|
+
end
|
70
|
+
|
71
|
+
def sent_last_24_hours
|
72
|
+
result['SentLast24Hours']
|
73
|
+
end
|
74
|
+
|
75
|
+
def max_24_hour_send
|
76
|
+
result['Max24HourSend']
|
77
|
+
end
|
78
|
+
|
79
|
+
def max_send_rate
|
80
|
+
result['MaxSendRate']
|
81
|
+
end
|
21
82
|
end
|
22
83
|
|
23
84
|
class GetSendStatisticsResponse < AWS::SES::Response
|
85
|
+
def result
|
86
|
+
if members = parsed['GetSendStatisticsResult']['SendDataPoints']
|
87
|
+
[members['member']].flatten
|
88
|
+
else
|
89
|
+
[]
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
memoized :result
|
94
|
+
|
95
|
+
def data_points
|
96
|
+
result
|
97
|
+
end
|
24
98
|
end
|
25
99
|
end
|
26
100
|
end
|
data/lib/aws/ses/response.rb
CHANGED
@@ -54,8 +54,7 @@ module AWS
|
|
54
54
|
parse_options = { 'forcearray' => ['item', 'member'], 'suppressempty' => nil, 'keeproot' => false }
|
55
55
|
# parse_options = { 'suppressempty' => nil, 'keeproot' => false }
|
56
56
|
|
57
|
-
|
58
|
-
xml["#{@action}Result"] || xml
|
57
|
+
XmlSimple.xml_in(body, parse_options)
|
59
58
|
end
|
60
59
|
memoized :parsed
|
61
60
|
|
@@ -63,9 +62,13 @@ module AWS
|
|
63
62
|
def result
|
64
63
|
parsed
|
65
64
|
end
|
65
|
+
|
66
|
+
def request_id
|
67
|
+
error? ? parsed['RequestId'] : parsed['ResponseMetadata']['RequestId']
|
68
|
+
end
|
66
69
|
|
67
70
|
def inspect
|
68
|
-
"#<%s:0x%s %s %s>" % [self.class, object_id, response.code, response.message]
|
71
|
+
"#<%s:0x%s %s %s %s>" % [self.class, object_id, request_id, response.code, response.message]
|
69
72
|
end
|
70
73
|
end # class Response
|
71
74
|
|
@@ -99,7 +102,7 @@ module AWS
|
|
99
102
|
end
|
100
103
|
|
101
104
|
def inspect
|
102
|
-
"#<%s:0x%s %s '%s'>" % [self.class.name, object_id, code, message]
|
105
|
+
"#<%s:0x%s %s %s '%s'>" % [self.class.name, object_id, @response.request_id, code, message]
|
103
106
|
end
|
104
107
|
end
|
105
108
|
end # module SES
|
data/lib/aws/ses/send_email.rb
CHANGED
@@ -103,11 +103,21 @@ module AWS
|
|
103
103
|
end
|
104
104
|
end
|
105
105
|
|
106
|
-
class
|
106
|
+
class EmailResponse < AWS::SES::Response
|
107
|
+
def result
|
108
|
+
super["#{action}Result"]
|
109
|
+
end
|
107
110
|
|
111
|
+
def message_id
|
112
|
+
result['MessageId']
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
class SendEmailResponse < EmailResponse
|
117
|
+
|
108
118
|
end
|
109
119
|
|
110
|
-
class SendRawEmailResponse <
|
120
|
+
class SendRawEmailResponse < EmailResponse
|
111
121
|
|
112
122
|
end
|
113
123
|
end
|
data/lib/aws/ses/version.rb
CHANGED
@@ -0,0 +1,72 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
class AddressTest < Test::Unit::TestCase
|
4
|
+
context 'verifying an address' do
|
5
|
+
setup do
|
6
|
+
@base = generate_base
|
7
|
+
end
|
8
|
+
|
9
|
+
should 'return the correct response on success' do
|
10
|
+
mock_connection(@base, :body => %{
|
11
|
+
<VerifyEmailAddressResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
|
12
|
+
<ResponseMetadata>
|
13
|
+
<RequestId>abc-123</RequestId>
|
14
|
+
</ResponseMetadata>
|
15
|
+
</VerifyEmailAddressResponse>
|
16
|
+
})
|
17
|
+
|
18
|
+
result = @base.addresses.verify('user1@example.com')
|
19
|
+
assert result.success?
|
20
|
+
assert_equal 'abc-123', result.request_id
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'listing verified addressess' do
|
25
|
+
setup do
|
26
|
+
@base = generate_base
|
27
|
+
end
|
28
|
+
|
29
|
+
should 'return the correct response on success' do
|
30
|
+
mock_connection(@base, :body => %{
|
31
|
+
<ListVerifiedEmailAddressesResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
|
32
|
+
<ListVerifiedEmailAddressesResult>
|
33
|
+
<VerifiedEmailAddresses>
|
34
|
+
<member>user1@example.com</member>
|
35
|
+
</VerifiedEmailAddresses>
|
36
|
+
</ListVerifiedEmailAddressesResult>
|
37
|
+
<ResponseMetadata>
|
38
|
+
<RequestId>abc-123</RequestId>
|
39
|
+
</ResponseMetadata>
|
40
|
+
</ListVerifiedEmailAddressesResponse>
|
41
|
+
})
|
42
|
+
|
43
|
+
result = @base.addresses.list
|
44
|
+
|
45
|
+
assert result.success?
|
46
|
+
assert_equal 'abc-123', result.request_id
|
47
|
+
assert_equal %w{user1@example.com}, result.result
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
context 'deleting a verified addressess' do
|
53
|
+
setup do
|
54
|
+
@base = generate_base
|
55
|
+
end
|
56
|
+
|
57
|
+
should 'return the correct response on success' do
|
58
|
+
mock_connection(@base, :body => %{
|
59
|
+
<DeleteVerifiedEmailAddressResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
|
60
|
+
<ResponseMetadata>
|
61
|
+
<RequestId>abc-123</RequestId>
|
62
|
+
</ResponseMetadata>
|
63
|
+
</DeleteVerifiedEmailAddressResponse>
|
64
|
+
})
|
65
|
+
|
66
|
+
result = @base.addresses.delete('user1@example.com')
|
67
|
+
|
68
|
+
assert result.success?
|
69
|
+
assert_equal 'abc-123', result.request_id
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/test/info_test.rb
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
class InfoTest < Test::Unit::TestCase
|
4
|
+
context 'getting send quota' do
|
5
|
+
setup do
|
6
|
+
@base = generate_base
|
7
|
+
end
|
8
|
+
|
9
|
+
should 'return the correct response on success' do
|
10
|
+
mock_connection(@base, :body => %{
|
11
|
+
<GetSendQuotaResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
|
12
|
+
<GetSendQuotaResult>
|
13
|
+
<SentLast24Hours>0.0</SentLast24Hours>
|
14
|
+
<Max24HourSend>1000.0</Max24HourSend>
|
15
|
+
<MaxSendRate>1.0</MaxSendRate>
|
16
|
+
</GetSendQuotaResult>
|
17
|
+
<ResponseMetadata>
|
18
|
+
<RequestId>abc-123</RequestId>
|
19
|
+
</ResponseMetadata>
|
20
|
+
</GetSendQuotaResponse>
|
21
|
+
})
|
22
|
+
|
23
|
+
result = @base.quota
|
24
|
+
assert result.success?
|
25
|
+
assert_equal 'abc-123', result.request_id
|
26
|
+
assert_equal '0.0', result.sent_last_24_hours
|
27
|
+
assert_equal '1000.0', result.max_24_hour_send
|
28
|
+
assert_equal '1.0', result.max_send_rate
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'getting send statistics' do
|
33
|
+
setup do
|
34
|
+
@base = generate_base
|
35
|
+
end
|
36
|
+
|
37
|
+
should 'return the correct response on success' do
|
38
|
+
mock_connection(@base, :body => %{
|
39
|
+
<GetSendStatisticsResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
|
40
|
+
<GetSendStatisticsResult>
|
41
|
+
<SendDataPoints>
|
42
|
+
<member>
|
43
|
+
<DeliveryAttempts>3</DeliveryAttempts>
|
44
|
+
<Timestamp>2011-01-31T15:31:00Z</Timestamp>
|
45
|
+
<Rejects>2</Rejects>
|
46
|
+
<Bounces>4</Bounces>
|
47
|
+
<Complaints>1</Complaints>
|
48
|
+
</member>
|
49
|
+
<member>
|
50
|
+
<DeliveryAttempts>3</DeliveryAttempts>
|
51
|
+
<Timestamp>2011-01-31T16:01:00Z</Timestamp>
|
52
|
+
<Rejects>0</Rejects>
|
53
|
+
<Bounces>0</Bounces>
|
54
|
+
<Complaints>0</Complaints>
|
55
|
+
</member>
|
56
|
+
<member>
|
57
|
+
<DeliveryAttempts>1</DeliveryAttempts>
|
58
|
+
<Timestamp>2011-01-26T16:31:00Z</Timestamp>
|
59
|
+
<Rejects>0</Rejects>
|
60
|
+
<Bounces>0</Bounces>
|
61
|
+
<Complaints>0</Complaints>
|
62
|
+
</member>
|
63
|
+
</SendDataPoints>
|
64
|
+
</GetSendStatisticsResult>
|
65
|
+
<ResponseMetadata>
|
66
|
+
<RequestId>abc-123</RequestId>
|
67
|
+
</ResponseMetadata>
|
68
|
+
</GetSendStatisticsResponse>
|
69
|
+
})
|
70
|
+
|
71
|
+
result = @base.statistics
|
72
|
+
|
73
|
+
assert result.success?
|
74
|
+
assert_equal 'abc-123', result.request_id
|
75
|
+
|
76
|
+
assert_equal 3, result.data_points.size
|
77
|
+
|
78
|
+
d = result.data_points.first
|
79
|
+
|
80
|
+
assert_equal '2', d['Rejects']
|
81
|
+
assert_equal '3', d['DeliveryAttempts']
|
82
|
+
assert_equal '4', d['Bounces']
|
83
|
+
assert_equal '1', d['Complaints']
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
context 'deleting a verified addressess' do
|
89
|
+
setup do
|
90
|
+
@base = generate_base
|
91
|
+
end
|
92
|
+
|
93
|
+
should 'return the correct response on success' do
|
94
|
+
mock_connection(@base, :body => %{
|
95
|
+
<DeleteVerifiedEmailAddressResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
|
96
|
+
<ResponseMetadata>
|
97
|
+
<RequestId>abc-123</RequestId>
|
98
|
+
</ResponseMetadata>
|
99
|
+
</DeleteVerifiedEmailAddressResponse>
|
100
|
+
})
|
101
|
+
|
102
|
+
result = @base.addresses.delete('user1@example.com')
|
103
|
+
|
104
|
+
assert result.success?
|
105
|
+
assert_equal 'abc-123', result.request_id
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
data/test/send_email_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/helper'
|
2
2
|
|
3
3
|
class SendEmailTest < Test::Unit::TestCase
|
4
|
-
context
|
4
|
+
context 'when sending email' do
|
5
5
|
setup do
|
6
6
|
@base = generate_base
|
7
7
|
@basic_email = { :from => 'jon@example.com',
|
@@ -10,7 +10,7 @@ class SendEmailTest < Test::Unit::TestCase
|
|
10
10
|
:text_body => 'Body1' }
|
11
11
|
end
|
12
12
|
|
13
|
-
context
|
13
|
+
context 'adding to a hash' do
|
14
14
|
should 'add array elements to the hash' do
|
15
15
|
hash = {}
|
16
16
|
ary = ['x', 'y']
|
@@ -28,41 +28,40 @@ class SendEmailTest < Test::Unit::TestCase
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
should
|
32
|
-
mock_connection(@base
|
33
|
-
|
34
|
-
|
35
|
-
assert result.success?
|
36
|
-
end
|
37
|
-
|
38
|
-
should 'send a raw e-mail with a mail object' do
|
39
|
-
mock_connection(@base, {:body => %{
|
40
|
-
<SendRawEmailRequest>
|
41
|
-
<SendRawEmailResponse>
|
31
|
+
should 'send an e-mail' do
|
32
|
+
mock_connection(@base, :body => %{
|
33
|
+
<SendEmailResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
|
34
|
+
<SendEmailResult>
|
42
35
|
<MessageId>abc-123</MessageId>
|
43
|
-
</
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
result = @base.send_raw_email(mail)
|
36
|
+
</SendEmailResult>
|
37
|
+
<ResponseMetadata>
|
38
|
+
<RequestId>xyz-123</RequestId>
|
39
|
+
</ResponseMetadata>
|
40
|
+
</SendEmailResponse>
|
41
|
+
})
|
50
42
|
|
43
|
+
result = @base.send_email @basic_email
|
51
44
|
assert result.success?
|
45
|
+
assert_equal 'abc-123', result.message_id
|
46
|
+
assert_equal 'xyz-123', result.request_id
|
52
47
|
end
|
53
48
|
|
54
49
|
should 'send a raw e-mail with a hash object' do
|
55
|
-
mock_connection(@base,
|
56
|
-
<
|
57
|
-
<
|
50
|
+
mock_connection(@base, :body => %{
|
51
|
+
<SendRawEmailResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
|
52
|
+
<SendRawEmailResult>
|
58
53
|
<MessageId>abc-123</MessageId>
|
59
|
-
</
|
60
|
-
|
61
|
-
|
54
|
+
</SendRawEmailResult>
|
55
|
+
<ResponseMetadata>
|
56
|
+
<RequestId>xyz-123</RequestId>
|
57
|
+
</ResponseMetadata>
|
58
|
+
</SendRawEmailResponse>
|
59
|
+
})
|
62
60
|
|
63
61
|
result = @base.send_raw_email(@basic_email)
|
64
|
-
|
65
62
|
assert result.success?
|
63
|
+
assert_equal 'abc-123', result.message_id
|
64
|
+
assert_equal 'xyz-123', result.request_id
|
66
65
|
end
|
67
66
|
end
|
68
67
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws-ses
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Drew Blas
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-02-
|
19
|
+
date: 2011-02-09 00:00:00 -06:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -218,6 +218,7 @@ files:
|
|
218
218
|
- TODO
|
219
219
|
- VERSION
|
220
220
|
- aws-ses.gemspec
|
221
|
+
- lib/aws/actionmailer/ses_extension.rb
|
221
222
|
- lib/aws/ses.rb
|
222
223
|
- lib/aws/ses/addresses.rb
|
223
224
|
- lib/aws/ses/base.rb
|
@@ -226,10 +227,12 @@ files:
|
|
226
227
|
- lib/aws/ses/response.rb
|
227
228
|
- lib/aws/ses/send_email.rb
|
228
229
|
- lib/aws/ses/version.rb
|
230
|
+
- test/address_test.rb
|
229
231
|
- test/base_test.rb
|
230
232
|
- test/extensions_test.rb
|
231
233
|
- test/fixtures.rb
|
232
234
|
- test/helper.rb
|
235
|
+
- test/info_test.rb
|
233
236
|
- test/mocks/fake_response.rb
|
234
237
|
- test/response_test.rb
|
235
238
|
- test/send_email_test.rb
|
@@ -268,10 +271,12 @@ signing_key:
|
|
268
271
|
specification_version: 3
|
269
272
|
summary: Client library for Amazon's Simple Email Service's REST API
|
270
273
|
test_files:
|
274
|
+
- test/address_test.rb
|
271
275
|
- test/base_test.rb
|
272
276
|
- test/extensions_test.rb
|
273
277
|
- test/fixtures.rb
|
274
278
|
- test/helper.rb
|
279
|
+
- test/info_test.rb
|
275
280
|
- test/mocks/fake_response.rb
|
276
281
|
- test/response_test.rb
|
277
282
|
- test/send_email_test.rb
|