Amazon SES Support


Introduction

From, http://aws.amazon.com/ses/ :

Amazon Simple Email Service (Amazon SES) is a highly scalable and cost-effective bulk and transactional email-sending service for businesses and developers. Amazon SES eliminates the complexity and expense of building an in-house email solution or licensing, installing, and operating a third-party email service. The service integrates with other AWS services, making it easy to send emails from applications being hosted on services such as Amazon EC2. With Amazon SES there is no long-term commitment, minimum spend or negotiation required - businesses can utilize a free usage tier and after that enjoy low fees for the number of emails sent plus data transfer fees.

Dada Mail has support for Amazon SES, both by using the Amazon SES API and using the Amazon SES SMTP Interface. The SMTP Interface is probably easier to set up, it's possible that the SES API is faster.

If you're having trouble sending messages using your hosting account's mail server, perhaps because of the time it takes to complete a mass mailing, or because of the amount of mail you're sending, using Amazon SES may be an interesting alternative.

Amazon SES costs around $0.10 per thousand messages you send. See:

http://aws.amazon.com/ses/pricing/

for current pricing. Using the service in a non-production mode is free.

Dada Mail does not currently work 100% with Amazon's EC2 hosting, which is something else, entirely.


Experimental Support!

Support for Amazon SES is currently labeled as, Experimental (as Amazon labels SES itself as, Beta). We would love your feedback on how it's working for you, but please understand there may be a few unknowns left to uncover.

Some things to consider:


Use for Closed-List Opt-In Subscriptions Lists Only

Since Amazon SES is an outside, third party sending service, you'll absolutely need to use a mailing list that's 100% confirmed opt-in. If you don't, complaints of abuse sent to Amazon, manually sent or automatically sent, will most likely disallow you from furthering your use of their service.

Bounce Handler Support

Here's the overview of Bounce support for SES: http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/index.html

Dada Mail's support for bounce handling w/SES sending is also Experimental. We'd love to get your feedback.

When you use Dada Mail with SES, Dada Mail will set the Return-Path header explicitly.

Dada Mail's included bounce handler has rules specifically for Amazon SES.

One caveat of using Bounce Handler is that the Bounce Handler email address has to be verified by Amazon to receive the bounces, just like you would verify a sender. Best thing to do would be to create the bounce handler email address and verify it before you configure the Bounce Handler and the rest of Dada Mail with this address, since Bounce Handler will not automatically verify itself - it'll most likely simply ignore the request.


Limitations

Method: Amazon SES API

Additional Things to Installl

Currently, Dada Mail relies heavily on the Amazon SES Developer Tools and the scripts that come with it to send out email messages using Amazon SES. You'll need to separately install these scripts.

v4.9.0 of Dada Mail does not need the ses-send-email.pl script, but instead uses it's own (superior, I think) method in its place.

Performance

Sending via Amazon SES is done with a persistent HTTP connection (as of v4.9.0 of Dada Mail), so performance shouldn't be too bad. Expect around .3 seconds/message for just passing the email message from Dada Mail to the Amazon SES service.

Method: Amazon SES SMTP Interface

Performance

It's not known how performance compares to the SES API.

Both Methods

No Discussion List Support

Since every email address that's set in the From: header of any outgoing email message sent through Amazon SES, setting up a discussion list using it is probably unrealistic.

Different email headers sent

Amazon has a list of supported email headers:

http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/AppendixHeaders.html

Dada Mail usually sends messages out with a different set of email headers:

The, Message-ID header will be sent as the, X-Message-ID header.

The, List header will be sent as the, X-List header.

Email headers that are not supported by Amazon SES are automatically not sent out.

Sending Quota

Amazon SES starts out with a small sending quota - 1,000 messages you may send in 24 hours, with a maximum 1 message you can send every second. This quota can grow (and quickly), but make sure not to try to send out quicker than your quota can grow.

More Information

http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/index.html


Configuration

Both Methods: Sign up for Amazon Web Services

Begin the signup procedure for Amazon's AWS:

https://aws-portal.amazon.com/gp/aws/developer/registration

You'll be asked to create a new Amazon account and give Amazon your payment information.

None of this information will be saved within Dada Mail.

Method: Amazon SES API

There's a few steps you need to take, before you can start using the Amazon SES API with Dada Mail. None of them are particularily hard, but it's suggested you have a fairly good understanding on how to administrate your own hosting account, can make simple edits to already-created perl scripts and don't mind taking a little while to make sure everything is working. Take the time to set everything up correctly.

Install the Amazon SES Developer Tools

The Amazon SES Developer Tools are located at:

http://aws.amazon.com/code/Amazon-SES/8945574369528337

As of 11/17/11, this is the direct link to the developer tools:

http://d36cz9buwru1tt.cloudfront.net/catalog/attachments/ses-tools-2011-10-31.zip

These scripts require you to create a AWS Credentials file, which is outlined here:

http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/InitialSetup.Scripts.html

Once you've created the AWS credentials file, you'll want to try out and test the SES scripts, ses-send-email.pl and ses-verify-email-address.pl individually. Docs on these three scripts are located at:

http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/SendingEmail.Raw.html

http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/InitialSetup.EmailVerification.html

http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/ManagingActivity.SendingLimits.html

Configure Dada Mail with your Amazon SES configuration.

None of the Amazon AWS credentials are stored within Dada Mail - only in that AWS Credentials file.

But, you'll need to tell Dada Mail where that AWS Credentials file is, as well as two of the three scripts, ses-verify-email-address.pl and ses-get-stats.pl (ses-send-email.pl is not used directly by Dada Mail).

In your .dada_config file, add the following lines:

        $AMAZON_SES_OPTIONS = { 
                aws_credentials_file            => undef, 
                ses_verify_email_address_script => undef, 
                ses_get_stats_script            => undef, 
        };

And fill out the necessary information. In this example:

        $AMAZON_SES_OPTIONS = { 
                aws_credentials_file            => '/home/myaccount/aws-credentials', 
                ses_verify_email_address_script => '/home/myaccount/ses/bin/ses-verify-email-address.pl',
                ses_get_stats_script            => '/home/myaccount/ses/bin/ses-get-stats.pl', 
                 
        };

/home/myaccount is my home directory, aws-credentials is the name of the AWS Credentials file and I copied the, bin directory from the developer tools download into a directory I created called, ses.

If you then change into the ses directory, you should be able to run the scripts. For example:

        ./ses-verify-email-address.pl -k /home/myaccount/aws-credentials -v me@example.com

and once that email address is verified...

        ./ses-send-email.pl -k /home/myaccount/aws-credentials -r
        From: me@example.com
        To: me@example.com
        Subject: test to myself! 
        
        Hello, this is a test to myself!

(control D)

If you run these scripts outside of this directory, you'll more than likely get an error, like this:

 Can't locate SES.pm in @INC:

Either follow the directions that come with the README file of the SES Developer Tools, or, what may be helpful, is just to add a, use lib qw(...) line in the ses-send-email.pl, ses-verify-email-address.pl and ses-get-stats.pl scripts themselves. For our examples, we just have to add the directory the scripts are in:

Top of ses-send-email.pl and/or ses-verify-email-address.pl)

        #!/usr/bin/perl -w
        use lib qw(/home/myaccount/ses/bin); # <- now this script can find the, SES.pm module!

Once these steps are taken, Amazon SES should be working on your account and ready to be used within Dada Mail.

Configuring Dada Mail to use the Amazon SES API

In Dada Mail, log into your list control panel and go to:

Mail Sending - Sending Preferences

There should be an option, along with sending via the sendmail command and sending via SMTP, to Send Email Using the Amazon Simple Email Service.

If Dada Mail cannot find your AWS Credentials file, ses-send-email.pl script, ses-verify-email-address.pl script or the ses-get-stats.pl script or you're missing any required CPAN modules, it'll notify you. Don't try using sending via this method, until all these prerequisites are met.

Verify your List Owner

Before you can send any email messages using Amazon SES in Dada Mail, you have to verify your list owner. Dada Mail has a small frontend utility to the, ses-verify-email-address.pl script to do this. Under, Amazon SES Tools, right on the Sending Preferences screen, you should see a little verifier. Enter your List Owner email address and click, Verify Address for Sending.

Once verified, you may use Dada Mail's built-in Sending Preferences Tester to see if Amazon SES sending is working. If it is, congratulations! You're now using Amazon SES to send email out, using Dada Mail. You can further test Amazon SES on a small test list by verifying individual addresses in your subscription list using the same verification utility. To really use Amazon SES for mass mailing, you'll need to request full production access from Amazon.

Method: Amazon SES SMTP Interface

Here's the overview of Amazon SES SMTP Interface:

http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/SMTP.html

You'll first have to create a SMTP username and password:

http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/SMTP.Credentials.html

and then configure Dada Mail to use these credentials:

Configuring Dada Mail to use the Amazon SES SMTP Interface

Log into your Dada Mail List and go to: Mail Sending - Sending Preferences

Choose, Send Email Using SMTP

For the, SMTP Server:, use, email-smtp.us-east-1.amazonaws.com

For the Port use, 465

Check Use Secure Sockets Layer (SSL)

Check Use SMTP Authentication (SASL)

For Type: use, PLAIN

Fill out the, Username and Password with the username and password provided by Amazon.

Verify your List Owner

Sign in to the AWS Management Console at,

https://console.aws.amazon.com/s3/home

Once at the Amazon AWS Console, click the, Amazon SES tab, click on, Verified Senders and click the button labeled, Verify a New Sender. Enter in your List Owner. You will have to do this for each different List Owner you plan to use.

Both Methods: Request Full Production Access

Once you're done testing Amazon SES, you'll want to request full production access:

http://aws.amazon.com/ses/fullaccessrequest

Without full production access, you'll only be able to send messages to addresses that have manually been verified.


Alternative Ways to Use Amazon SES with Dada Mail

You can use Amazon SES through your existing mail server, as outlined here:

http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/IntegratingWithServer.html


SPF, Sender ID, and DKIM

Since you're asking a third party to send email on behalf of you, you'll most likely want to make sure you have a correct SPF Record set up to tell the world that that's OK.

Amazon's doc's have an overview on how to do this,

http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/index.html


Bugs

Probably plenty. Please give feedback using the links, below:


Feedback Appreciated

Amazon SES support is currently a little rough and we need feedback on how it's working for you. Please either use the forum/boards:

http://dadamailproject.com/support/boards

Discuss on our dev. list:

http://dadamailproject.com/cgi-bin/dada/mail.cgi/list/dadadev/

And/or file an issue:

http://github.com/justingit/dada-mail/issues


Related Projects

We've seperated out the work we've done with Amazon and using a persistent HTTP connection. That project is located at:

https://github.com/justingit/Net--Amazon--SES