I am attempting to send an email through AWS SES using the php sdk. Please note that I am able to send a message through the aws CLI - no problem, and I am able to send an email from the SES console using the domain and email areas under Identity Management area. Also, both the domain and email have been verified and appear in the Identity Management area.
I am using the example code from the PHP SDK. I did edit the region as my emails and domains have been verified, and I operate out of the us-west-2 region.
<?php
/**
* Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* This file is licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License. A copy of
* the License is located at
*
* http://aws.amazon.com/apache2.0/
*
* This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
require 'vendor/autoload.php';
use Aws\Ses\SesClient;
use Aws\Exception\AwsException;
$SesClient = new Aws\Ses\SesClient([
'profile' => 'default',
'version' => '2010-12-01',
'region' => 'us-west-2'
]);
$html_body = '<h1>AWS Amazon Simple Email Service Test Email</h1>' .
'<p>This email was sent with <a href="https://aws.amazon.com/ses/">' .
'Amazon SES</a> using the <a href="https://aws.amazon.com/sdk-for-php/">' .
'AWS SDK for PHP</a>.</p>';
$subject = 'Amazon SES test (AWS SDK for PHP)';
$plaintext_body = 'This email was send with Amazon SES using the AWS SDK for PHP.';
$sender_email = 'email_address';
$recipient_emails = ['email_address'];
$char_set = 'UTF-8';
$configuration_set = 'ConfigSet';
try {
$result = $SesClient->sendEmail([
'Destination' => [
'ToAddresses' => $recipient_emails,
],
'ReplyToAddresses' => [$sender_email],
'Source' => $sender_email,
'Message' => [
'Body' => [
'Html' => [
'Charset' => $char_set,
'Data' => $html_body,
],
'Text' => [
'Charset' => $char_set,
'Data' => $plaintext_body,
],
],
'Subject' => [
'Charset' => $char_set,
'Data' => $subject,
],
],
// If you aren't using a configuration set, comment or delete the
// following line
'ConfigurationSetName' => $configuration_set,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
echo $e->getMessage();
echo "\n";
}
I am providing the credentials for the SDK through the ~/.aws/credential file, that contains the access ID key and secret key. This is the same file that is accessed by the AWS CLI, so the credentials appear to be correct and accessible to the CLI.
[default]
aws_access_key_id = AKIA2PK........Z72J3
aws_secret_access_key = co9r41j/i+QTrsA7244xG........KPH1LyBn34b
I added the "........" to the above to protect my access and secret access keys.
I get the following error that indicates that my email has not been verified. But it has! Also, I am not in the sandbox mode.
"Error executing "SendEmail" on "https://email.us-west-2.amazonaws.com"; AWS HTTP error: Client error: POST https://email.us-west-2.amazonaws.com resulted in a 400 Bad Request response: Sender MessageReje (truncated...) MessageRejected (client): Email address is not verified. The following identities failed the check in region US-WEST-2: [email protected] - Sender MessageRejected Email address is not verified. The following identities failed the check in region US-WEST-2: [email protected] dbbb0c1d-5493-4205-9257-a2fbb81eb5d9 The email was not sent. Error message: Email address is not verified. The following identities failed the check in region US-WEST-2: [email protected]"
Any ideas on how to debug this?
Appreciate any help that you can provide.
Mark