Configure SSMTP to send emails via Amazon SES.
Before We Begin
This article assumes you already have the following:
- AWS SES account configured for production access.
- A verified AWS SES sender (i.e. [email protected]).
- An IAM user’s credentials with at least the following permissions set:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:CreateAccessKey", "iam:CreateUser", "iam:PutUserPolicy" ], "Resource": [ "*" ] }] }
Installation (Debian Wheezy)
Install awscli:
# apt-get install python2.7 python-pip # pip install awscli
Configuration
Configure awscli if using for the first time:
$ aws configure AWS Access Key ID [****************1234]: AWS Secret Access Key [****************ABCD]: Default region name [eu-west-1]: Default output format [text]: json
Create a SES user policy:
$ cat > ./sespolicy.json EOL { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ses:SendRawEmail", "Resource": "*" } ] } EOL
Create a new IAM user for SES:
$ aws iam create-user --user-name SES-USER { "User": { "UserName": "SES-USER", "Path": "/", "CreateDate": "2014-10-14T14:52:34.455Z", "UserId": "AIDAJ33BKAWUSF2MVOD3Q", "Arn": "arn:aws:iam::297649722856:user/SES-USER" } }
Add a SES policy:
$ aws iam put-user-policy --user-name SES-USER --policy-name SESPOLICY --policy-document file://sespolicy.json
Create access keys:
$ aws iam create-access-key --user-name SES-USER { "AccessKey": { "UserName": "SES-USER", "Status": "Active", "CreateDate": "2014-10-14T14:53:00.375Z", "SecretAccessKey": "Fu923JvUYN6MeMg5h5fc9WlTGQMhSPt6La6X755t", "AccessKeyId": "AKIAJWOBYL2QRQQUVFXQ" } }
Obtaining Amazon SES SMTP Credentials by Converting AWS Credentials (in BASH)
Script requires OpenSSL.
# apt-get install openssl
Generate SES SMTP credentials from AWS SecretAccessKey:
$ cat ./ses-smtp-conv.sh #!/bin/bash # written by Tomas (www.lisenet.com) # 14/10/2014 (dd/mm/yy) # copyleft free software # # Many thanks to: # http://blog.celingest.com/en/2014/02/12/new-ses-endpoints-creating-ses-credentials-iam-users/ # Check for OpenSSL installation, exit if not present type openssl >/dev/null 2>&1 || { echo >&2 "I require OpenSSL, but it's not installed. Aborting."; exit 1; }; # If you want to provide the AWS keys below rather than supplying on a CLI, # you can do so and comment out everything in between dashes (#---) #IAMUSER=""; #IAMSECRET=""; #-------------------------------------------- IAMUSER="$1"; IAMSECRET="$2"; if [ "$#" -ne "2" ];then echo "Usage: ./ses-smtp-conv.sh "; echo "Alternatively, you can put the AWS keys in the script."; exit 1 fi #-------------------------------------------- # You do not need to modify anything below this line MSG="SendRawEmail"; VerInBytes="2"; VerInBytes=$(printf \\$(printf '%03o' "$VerInBytes")); SignInBytes=$(echo -n "$MSG" | openssl dgst -sha256 -hmac "$IAMSECRET" -binary); SignAndVer=""$VerInBytes""$SignInBytes""; SmtpPass=$(echo -n "$SignAndVer"|base64); echo "SMTP User: ""$IAMUSER"; echo "SMTP Pass: ""$SmtpPass"; exit 0
$ ./ses-smtp-conv.sh SMTP User: AKIAJWOBYL2QRQQUVFXQ SMTP Pass: AqXIiv3i1pvh0eL3bTx5Sgg6aLQgF9pPBcyBpake/c0C
Note: you can also obtain Amazon SES SMTP credentials by using the Amazon SES console.
Configuring SSMTP and Sending a Test email
Install SSMTP and heirloom-mailx (an intelligent mail processing system):
# apt-get install ssmtp heirloom-mailx
# cat > /etc/ssmtp/ssmtp.conf EOL [email protected] mailhub=email-smtp.us-east-1.amazonaws.com:465 AuthUser=AKIAJWOBYL2QRQQUVFXQ AuthPass=AqXIiv3i1pvh0eL3bTx5Sgg6aLQgF9pPBcyBpake/c0C UseTLS=YES AuthMethod=LOGIN FromLineOverride=YES EOL
$ echo test | mail -v -s "testing ssmtp setup" -r [email protected] [email protected] [<-] 220 email-smtp.amazonaws.com ESMTP SimpleEmailService-871993721 qbd1g98DBizYgNNflWpP [->] EHLO debian [<-] 250 Ok [->] AUTH LOGIN [<-] 334 VXNlcm5hbWU6 [->] QUtJQUpXT0JZTDJRUlFRVVZGWFE= [<-] 334 UGFzc3dvcmQ6 [<-] 235 Authentication successful. [->] MAIL FROM:<[email protected]> [<-] 250 Ok [->] RCPT TO:<[email protected]> [<-] 250 Ok [->] DATA [<-] 354 End data with . [->] Received: by debian (sSMTP sendmail emulation); Tue, 14 Oct 2014 15:56:04 +0100 [->] Date: Tue, 14 Oct 2014 15:56:04 +0100 [->] From: [email protected] [->] To: [email protected] [->] Subject: testing ssmtp setup [->] Message-ID: <543d3984.hSR4l1twBhlkXO4Q%[email protected]> [->] User-Agent: Heirloom mailx 12.5 6/20/10 [->] MIME-Version: 1.0 [->] Content-Type: text/plain; charset=us-ascii [->] Content-Transfer-Encoding: 7bit [->] [->] test [->] . [<-] 250 Ok 000001490f28b40a-8a1ff40b-53e7-4213-a277-b7256887725a-000000 [->] QUIT [<-] 221 Bye