Class: AWS::SimpleEmailService
- Inherits:
-
Object
- Object
- AWS::SimpleEmailService
- Includes:
- Core::ServiceInterface
- Defined in:
- lib/aws/simple_email_service.rb,
lib/aws/simple_email_service/client.rb,
lib/aws/simple_email_service/errors.rb,
lib/aws/simple_email_service/quotas.rb,
lib/aws/simple_email_service/request.rb,
lib/aws/simple_email_service/identity.rb,
lib/aws/simple_email_service/identity_collection.rb,
lib/aws/simple_email_service/email_address_collection.rb
Overview
This class is the starting point for working with Amazon SimpleEmailService (SES).
To use Amazon SimpleEmailService you must first sign up here
For more information about Amazon SimpleEmailService:
Credentials
You can setup default credentials for all AWS services via AWS.config:
AWS.config(
:access_key_id => 'YOUR_ACCESS_KEY_ID',
:secret_access_key => 'YOUR_SECRET_ACCESS_KEY')
Or you can set them directly on the SimpleEmailService interface:
ses = AWS::SimpleEmailService.new(
:access_key_id => 'YOUR_ACCESS_KEY_ID',
:secret_access_key => 'YOUR_SECRET_ACCESS_KEY')
Rails
If you want to use Amazon SimpleEmailService to send email from your Rails application you just need to do 2 things:
-
Configure your AWS credentials with config
-
Set SES as the delivery method:
config.action_mailer.delivery_method = :amazon_ses
This has only been tested with Rails 2.3 and Rails 3.0.
Identities
Before you can send emails, you need to verify one or more identities. Identities are email addresses or domain names that you have control over. Until you have requested production access you will only be able to send emails to and from verified email addresses and domains.
Verifying Email Addresses
You can verify an email address for sending/receiving emails using the identities collection.
identity = ses.identities.verify('[email protected]')
identity.verified? #=> false
You will be sent an email address with a link. Follow the link to verify the email address.
Verifying Domains
You can also verify an entire domain for sending and receiving emails.
identity = ses.identities.verify('yourdomain.com')
identity.verification_token
#=> "216D+lZbhUL0zOoAkC83/0TAl5lJSzLmzsOjtXM7AeM="
You will be expected to update the DNS records for your domain with the given verification token. See the service documentation for more details.
Listing Identities
You can enumerate all identities:
ses.identities.map(&:identity)
#=> ['[email protected]', 'somedomain.com']
You can filter the types of identities enumerated:
domains = ses.identities.domains.map(&:identity)
email_addresses = ses.identities.email_addresses.map(&:identity)
You can get the verification status and token from identities as well.
# for an email address
identity = ses.identities['[email protected]']
identity.verified? #=> true/false
# for a domain
identity = ses.identities['yourdomain.com']
identity.verified? #=> true/false
identity.verification_token #=> '...'
Sending Email
To send a basic email you can use #send_email.
ses.send_email(
:subject => 'A Sample Email',
:from => '[email protected]',
:to => '[email protected]',
:body_text => 'Sample email text.',
:body_html => '<h1>Sample Email</h1>')
If you need to send email with attachments or have other special needs that send_email does not support you can use #send_raw_email.
ses.send_raw_email(<<EMAIL)
Subject: A Sample Email
From: [email protected]
To: [email protected]
Sample email text.
EMAIL
If you prefer, you can also set the sender and recipient in ruby when sending raw emails:
ses.send_raw_email(<<EMAIL, :to => '[email protected]', :from => '[email protected]')
Subject: A Sample Email
Sample email text.
EMAIL
Quotas
Based on several factors, Amazon SES determines how much email you can send and how quickly you can send it. These sending limits are defined as follows:
-
:max_send_rate
- Maximum number of emails you can send per second. -
:max_24_hour_send
- Maximum number of emails you can send in a 24-hour period.
To get your current quotas (and how many emails you have sent in the last 24 hours):
ses.quotas
# => {:max_24_hour_send=>200, :max_send_rate=>1.0, :sent_last_24_hours=>22}
Statistics
You can get statistics about individual emails:
ses.statistics.each do |stats|
puts "Sent: #{stats[:sent]}"
puts "Delivery Attempts: #{stats[:delivery_attempts]}"
puts "Rejects: #{stats[:rejects]}"
puts "Bounces: #{stats[:bounces]}"
puts "Complaints: #{stats[:complaints]}"
end
Defined Under Namespace
Modules: Errors Classes: Client, EmailAddressCollection, Identity, IdentityCollection, Quotas
Instance Method Summary collapse
-
#email_addresses ⇒ EmailAddressCollection
Returns a collection that represents all of the verified email addresses for your account.
- #identities ⇒ IdentityCollection
-
#quotas ⇒ Hash
Returns a hash of SES quotas and limits.
-
#send_email(options = {}) ⇒ nil
Sends an email.
-
#send_raw_email(raw_message, options = {}) ⇒ nil
(also: #deliver, #deliver!)
Sends a raw email (email message, with header and content specified).
-
#statistics ⇒ Array of Hashes
Returns an array of email statistics.
Methods included from Core::ServiceInterface
Instance Method Details
#email_addresses ⇒ EmailAddressCollection
This method is deprecated. Use #identities instead.
Returns a collection that represents all of the verified email addresses for your account.
188 189 190 |
# File 'lib/aws/simple_email_service.rb', line 188 def email_addresses EmailAddressCollection.new(:config => config) end |
#identities ⇒ IdentityCollection
193 194 195 |
# File 'lib/aws/simple_email_service.rb', line 193 def identities IdentityCollection.new(:config => config) end |
#quotas ⇒ Hash
Returns a hash of SES quotas and limits.
358 359 360 |
# File 'lib/aws/simple_email_service.rb', line 358 def quotas Quotas.new(:config => config).to_h end |
#send_email(options = {}) ⇒ nil
Sends an email.
ses.send_email(
:subject => 'A Sample Email',
:to => '[email protected]',
:from => '[email protected]',
:body_text => 'sample text ...',
:body_html => '<p>sample text ...</p>')
You can also pass multiple email addresses for the :to
, :cc
, :bcc
and :reply_to
options. Email addresses can also be formatted with names.
ses.send_email(
:subject => 'A Sample Email',
:to => ['"John Doe" <[email protected]>', '"Jane Doe" <[email protected]>'],
:from => '[email protected]',
:body_text => 'sample text ...')
252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 |
# File 'lib/aws/simple_email_service.rb', line 252 def send_email = {} require_each(, :subject, :from) require_one_of(, :to, :cc, :bcc) require_one_of(, :body_text, :body_html) # these three options can be passed strings or arrays of strings, # but the service requires them in a list (array) [:to, :cc, :bcc, :reply_to].each do |key| if [key] [key] = [[key]].flatten end end = { :subject => %w(message subject data), :subject_charset => %w(message subject charset), :to => %w(destination to_addresses), :cc => %w(destination cc_addresses), :bcc => %w(destination bcc_addresses), :from => %w(source), :reply_to => %w(reply_to_addresses), :return_path => %w(return_path), :body_text => %w(message body text data), :body_text_charset => %w(message body text charset), :body_html => %w(message body html data), :body_html_charset => %w(message body html charset), } client.send_email((, )) nil end |
#send_raw_email(raw_message, options = {}) ⇒ nil Also known as: deliver, deliver!
Sends a raw email (email message, with header and content specified). Useful for sending multipart MIME emails. The raw text of the message must comply with Internet email standards; otherwise, the message cannot be sent.
raw = <<-EMAIL
Date: Wed, 1 Jun 2011 09:13:07 -0700
Subject: A Sample Email
From: "John Doe" <[email protected]>
To: "Jane Doe" <[email protected]>
Accept-Language: en-US
Content-Language: en-US
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
c2FtcGxlIHRleHQNCg==
EMAIL
ses.send_raw_email(raw)
Amazon SES has a limit on the total number of recipients per message: The combined number of To:, CC: and BCC: email addresses cannot exceed 50. If you need to send an email message to a larger audience, you can divide your recipient list into groups of 50 or fewer, and then call Amazon SES repeatedly to send the message to each group.
331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 |
# File 'lib/aws/simple_email_service.rb', line 331 def send_raw_email , = {} send_opts = {} send_opts[:raw_message] = {} send_opts[:raw_message][:data] = .to_s send_opts[:source] = [:from] if [:from] if .respond_to?(:destinations) send_opts[:destinations] = .destinations end send_opts[:destinations] = [[:to]].flatten if [:to] client.send_raw_email(send_opts) nil end |
#statistics ⇒ Array of Hashes
Returns an array of email statistics. Each object in this array is a hash with the following keys:
-
:delivery_attempts
-
:rejects
-
:bounces
-
:complaints
-
:timestamp
372 373 374 375 376 377 378 379 380 381 382 383 |
# File 'lib/aws/simple_email_service.rb', line 372 def statistics response = client.get_send_statistics response.data[:send_data_points].collect do |data| { :sent => data[:timestamp], :delivery_attempts => data[:delivery_attempts], :rejects => data[:rejects], :bounces => data[:bounces], :complaints => data[:complaints], } end end |