AWS Simple Email Service (SES) provides a reliable and scalable infrastructure for sending email. If you are not yet using an email service yet for your application, we highly recommend AWS. The days of managing your own email infrastructure is long gone.
In this tutorial, we will show you how to set up CakePHP 3 to send email with AWS SES via SMTP. In our opinion, integrating AWS SES with CakePHP 3 by SMTP is more straightforward comparing to API.
First, we need to create a CakePHP email transport profile for AWS SES. We can create it in CakePHP configuration file, it is typically config/app.php. You can create it in your custom configuration file if you have any.
'EmailTransport' => [ 'ses' => [ 'className' => 'Smtp', 'host' => 'email-smtp.us-east-1.amazonaws.com', 'port' => 587, 'username' => '', 'password' => '', 'tls' => true ] ]
We have named this transport profile as ses, you can name it whatever you prefer. Let's take a look at those configuration key:
Now we need to create a CakePHP 3 email profile, so that we can use it easily in our application code.
'Email' => [ 'default' => [ 'transport' => 'ses', 'xxx' => 'xxx' ], ],
As you can see, we have given the profile a name default and specify its transport to be ses,which is created in step 1. The rest is our regular email settings such as from, to and so on, which you should already be familiar with.
In case you need to look up the code again, CakePHP 3 email documentation is here.
If by any chance, your CakePHP 3 application is hosted at Google Cloud Engine and you face an issue with sending email with SES, it is probably caused by the port issue.
According to Google Cloud Engine's documentation. They have blocked outbound connections on ports 25, 465, and 587. That means if you are using port 587 in CakePHP email transport profile, it won't go through. Lucky for us, AWS SES provides an alternative port 2587. That will be our savior.
Hopefully this simple tutorial helped you with your development. If you like our post, please follow us on Twitter and help spread the word. We need your support to continue. If you have questions or find our mistakes in above tutorial, do leave a comment below to let us know.