Amazon SES Third Party Email Sending Support

Amazon SES Support

Introduction

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

Amazon Simple Email Service (Amazon SES) is a cost-effective email service built on the reliable and scalable infrastructure that Amazon.com developed to serve its own customer base. With Amazon SES, you can send transactional email, marketing messages, or any other type of high-quality content to your customers.

More Information: http://aws.amazon.com/ses/details/

Dada Mail can utilize Amazon SES, both by using the Amazon SES API, as well as using the Amazon SES SMTP gateway, to send out email.

Amazon SES is one solution to a problem faced by many people on shared hosting accounts who are trying to send out too many messages, too quickly.

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 testing, non-production mode is free.

We also provide setting up Dada Mail using your own Amazon SES account as part of our installation/upgrade offerings:

https://dadamailproject.com/installation/request.html

Our services for installing and configuring Amazon SES for your Dada Mail is a one-time fee.

Use for Closed-List Opt-In Subscriptions Lists Only

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

Bounce Handler Support

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

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, and we do suggest using it, if you use Amazon SES.

Configuration

During installation of Dada Mail, you'll need to chose the AWS Region/Endpoint you would like to utilize, then paste in your AWS Access Key ID and AWS Secret Access Key.

That's it.

Setting up things on the Amazon AWS side is a little more involved. We will walk through all of that below.

Obtaining your AWS Access Key ID and AWS Secret Access Key

Below, we describe a simple way that should give you for a secure and specific user, just for SES.

Sign up for Amazon Web Services

If you don't already have an Amazon AWS account, begin the signup procedure for Amazon's AWS:

http://console.aws.amazon.com/

You'll be asked to create a new Amazon account and give Amazon your payment information. For the SES service, there is no upfront cost; you are only billed for what you use.

Set up an IAM User

Once you're signed up for AWS log in (if you aren't already):

http://console.aws.amazon.com/

Create a new IAM User at:

https://console.aws.amazon.com/iam/home?#users

Click the button labeled, Create New Users,


Create New Users

Under, Enter User Names: enter a username. In this doc, I'm going to enter DadaDemo.

Make sure Generate an access key for each user is checked.

Click the button labeled, Create


Create!

Once this new user is created, click the link labeled, Show User Security Credentials and copy the, Access Key ID and, Secret Access Key. Save this information in a safe place: we'll need it later.


Show Security Credentials

Once you're finished, click Close (you may have to do this twice).

We now have to attach a new User Policy.

Create a User Policy for your new User

Click on the user you just created (for us, this is: DadaDemo).


Select Your New User

You should then see the user's details. Click on the Permissions tab and in that tab, click on the button labeled, Attach Policy.


The, Permissions Tab

You should now see a table of available policies. Scroll through them, and find the one labeled, AmazonSESFullAccess and check the policy.

Click the button labeled, Attach Policy:


Select Amazon SES Full Access

We can now use the Access Key ID and Secret Access Key in Dada Mail.

Set the Access Key ID and Secret Access Key in Dada Mail.

Using the Dada Mail Installer

In the Dada Mail Installer, click the button labeled, Show/Hide Advanced Options, then check the checkbox labeled, Configure Amazon SES.

Textboxes to paste in the Endpoint, Access Key ID and Secret Access Key we just retrieved will be revealed. Paste in those two keys, and test them by clicking the button labeled, Test Your AWS Credentials. We'll talk about endpoints a little later, when we talk about Production Access.


Configure Amazon SES

Remember: you can drop into the installer to make additional global configurations, without having to reinstall or upgrade Dada Mail. See:

https://dadamailproject.com/d/install_dada_mail.pod.html#Making-Additional-Global-Configuration-Changes-using-the-Dada-Mail-Installer

Manually

The Endpoint, Access Key ID, and Secret Access Key are set in Dada Mail's global configuration file, called, .dada_config. Add the following lines directly in your .dada_config file:

        $AMAZON_SES_OPTIONS = { 
            AWS_endpoint                     => 'https://email.us-west-2.amazonaws.com/', 
                AWSAccessKeyId                   => 'AKIAJEQVRKWAMXHYEPYQ', 
                AWSSecretKey                     => 'r0rea+xNfJ/s00mnOeLBBtumBKh/WaZOi+Y6gafO', 
                Allowed_Sending_Quota_Percentage => '100',
        };

(using your own Access Key ID and Secret Access Key).

If the credentials work, you'll be told what your current sending quota is.

Complete the installation/configuration by clicking, Configure Pro Dada/Dada Mail!

Setting up a Mailing List to use Amazon SES Sending

Once the AWS Endpoint, Access Key ID and Secret Access Key are configured in Dada Mail, you may then set up a mailing list to use SES for sending.

Log into one of your mailing lists and go to, Sending - Options

Select, Amazon Simple Email Service, then click, Save Changes


Selecting, Amazon Simple Email Service

If you haven't already, you'll need to also Verify each sender that'll be using the service. For Dada Mail, that means verifying the List Owner, and if you're using the Bounce Handler, the List Administration email address.

Under Amazon SES Tools fill in your List Owner's email address, and click, Verify.

That email account will receive an email message from Amazon AWS, with a verification link to click to finish the verification process.

Other Ways to Verify a Sender

The Amazon SES Dashboard itself allows you to Verify a Sender:

https://console.aws.amazon.com/ses/home?#verified-senders-email:

Click the button labeled, Verify a New Email Address to get started.

Set Your Mass Mailing Batch Settings

When using SES for mail sending in Dada Mail, it's important to keep below the sending quota set by Amazon SES. This limit can fluctuate - usually upwards, while you use the service.

To make things easier, Dada Mail can be set to automatically adjust its Batch Settings to work within your limit.

In Dada Mail's List Control Panel, go to: Sending - Mass Mailing Options and check:

Automatically set batching speeds based on your Amazon SES limits


Auto-Adjust Batch Settings

Your batch settings will now grow or shrink, depending on your current Amazon SES sending limits. If you do go over your total 24 hour quota, mass mailings will not be sent out, and batches will be set to wait for 5 minutes, before trying to be sent again. When your 24 hour quota is lifted, sending will once again take place.

For the most part, Dada Mail will attempt to aggressively keep your batch sending speeds high, until you start coming near your daily mail quota set by SES.

When that happens, batch sending speeds will creep lower, to accomadate your limits. At no point should Dada Mail send either faster than it should, either by going over the limit per second limit, or the 24 hour limit.

Your SES sending limits themselves should creep up, as you use the service. Keeping the mass sending rates high will show the Amazon AWS system that you're utilizing the system, and they're most likely going to want to raise the limit for you, without further intervention.

Verifying a Domain with Amazon SES

Verifying a Domain with Amazon SES allows you to use any email address belonging to that domain that you would like for your List Owner and List Admin. This makes setting up the Bounce Handler for Dada Mail a lot easier, as it can be tricky to verify the Bounce Handler email address, if the Bounce Handler plugin itself keeps checking the account, then removing the messages it reads. This also makes creating additional mailing lists much easier, as you do not have to verify new addresses, everytime you create a new mailing list.

To verify a domain, log back into your AWS console, and go to Services - SES. AWS has the idea of Endpoints, so you want to make sure you do all of the following work on the same Endpoint that you've set up Dada Mail to utilize. In this doc, we're using the, US West (Oregon) endpoint. On the left hand menu, click the, Domains link, then click the, Verify a New Domain button.


In the textbox labeled, Domain enter the domain you would like to verify. I would also suggest clicking the, Generate DKIM Settings checkbox.

Then, click the button labeled, Verify This Domain


A series of TXT and CNAME records will be created for you, and AWS will monitor your DNS records to see if those records are set up. Once they are, your domain will be verified.


Click the link labeled, Download Record Set as CSV to download the DNS records you need to set up. Here's what they look like, in our demo:

        "Domain verification record set:"
        "Record name","Record type","Record Value"
        "_amazonses.dadademo.com","TXT","xu84Kjrj3ZKe8ST1Z8DncK7M7l8Bb94CofKOndW0sQ0="

        "Alternate domain verification record:"
        "Record name","Record type","Record Value"
        "dadademo.com","TXT","amazonses:xu84Kjrj3ZKe8ST1Z8DncK7M7l8Bb94CofKOndW0sQ0="

        "DKIM record set:"
        "Record name","Record type","Record Value"
        "juh6ivamg7onz7rn5pbivbc5gdn4chu2._domainkey.dadademo.com","CNAME","juh6ivamg7onz7rn5pbivbc5gdn4chu2.dkim.amazonses.com"
        "7dakxyw3ckpt4dqozfwbq44765b44mxq._domainkey.dadademo.com","CNAME","7dakxyw3ckpt4dqozfwbq44765b44mxq.dkim.amazonses.com"
        "qtq7lvmscivx6ydykg2noh7n5hsbackl._domainkey.dadademo.com","CNAME","qtq7lvmscivx6ydykg2noh7n5hsbackl.dkim.amazonses.com"

We're most concered with the TXT record. The record name is,

        _amazonses.dadademo.com

and the Record Value (for us) is,

        xu84Kjrj3ZKe8ST1Z8DncK7M7l8Bb94CofKOndW0sQ0=

Our website is managed via cPanel - and so is our DNS settings. In our demo, we would log into our cPanel, and go to DNS Zone Editor. Under, Add DNS Record, we would paste in:

        _amazonses.dadademo.com

Change the Type to, TXT, and we would paste in:

        xu84Kjrj3ZKe8ST1Z8DncK7M7l8Bb94CofKOndW0sQ0=

under, Text Value.

Once completed, click the, add record button.


Repeat these steps for the three CNAME records. But, make sure under, Type to select, CNAME and not, TXT. If everything is successful, the domain will then be verified. You can test to see if the domain is verified back in the Amazon AWS Console.


Request Full Production Access

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

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

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


When requesting production access, you'll be asked a few different questions - make sure to take your time and answer these questtions thoughtfully, as someone will check that your answer comply with the AWS and SES terms of service.

Of note make sure the following are set:

Once the form is submitted, it'll take approx. one day to get an answer via email. Once you do get a positive answer, you're ready to use Amazon SES in production. Hurray!

Limitations

Amazon SES API

Performance

Sending via Amazon SES is done with a persistent HTTP connection, so performance should be pretty good!. Expect around .3 seconds/message for just passing the email message from Dada Mail to the Amazon SES service.

Discussion List Support

Along with the List Owner and List Administration address, be sure to verify the, List Email address with Amazon SES.

And always keep this option checked:

Send messages, "On Behalf Of" (p.p. mode)

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 - 10,000 messages you may send in 24 hours, with a maximum 5 messages 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?ManagingActivity.PlanningAhead.html

Dependencies

Amazon SES requires a few more CPAN Perl modules than the base Dada Mail install requires. Make sure you already have, or can install the following CPAN Perl modules:

See also the FAQ, How do you install, "CPAN Perl Modules"

https://dadamailproject.com/d/FAQ-installing_CPAN_Perl_modules.pod.html

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


Dada Mail Project

Download

Installation

Support