Reputation: 796
I get the following error: Authentication Credentials Invalid.
I've double checked the username (Access key ID) and password (Secret Token) a million times. I double checked the base64 sent to the server and it's correct. User has correct access rights. All outbound traffic from EC2 server is allowed. SELinux is disabled. I've escaped special characters, tried different credentials. Tried using a user with more access.
I'm using PHPMailer with AWS SES.
Here is the code:
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'tls';
$mail->SMTPDebug = 4;
$mail->setFrom('[email protected]', 'Sender Name');
$mail->addAddress('[email protected]', 'Recipient Name');
$mail->Username = 'AKIAINH6PZ2UQKDK2BTA';
$mail->Password = 'GvMMa7R3fAXZGacl3gyfA86J0RxJLO7FQte9vrof';
$mail->Host = 'email-smtp.us-east-1.amazonaws.com';
$mail->Subject = 'Amazon SES test (SMTP interface accessed using PHP)';
$mail->Body = '<h1>Email Test</h1>';
$mail->Port = 587;
$mail->isHTML(true);
$mail->AltBody = "Email Test\r\nThis email was sent through the
Amazon SES SMTP interface using the PHPMailer class.";
if(!$mail->send()) {
echo "Email not sent. " , $mail->ErrorInfo , PHP_EOL;
} else {
echo "Email sent!" , PHP_EOL;
}
Here is the full output:
2017-11-06 01:09:49 Connection: opening to email-smtp.us-east-1.amazonaws.com:587, timeout=300, options=array ()
2017-11-06 01:09:49 Connection: opened
2017-11-06 01:09:49 SMTP -> get_lines(): $data is ""
2017-11-06 01:09:49 SMTP -> get_lines(): $str is "220 email-smtp.amazonaws.com ESMTP SimpleEmailService-2367521455 ZxpFMwcwQB6LGlJ2noyc"
2017-11-06 01:09:49 SERVER -> CLIENT: 220 email-smtp.amazonaws.com ESMTP SimpleEmailService-2367521455 ZxpFMwcwQB6LGlJ2noyc
2017-11-06 01:09:49 CLIENT -> SERVER: EHLO 34.200.216.237
2017-11-06 01:09:49 SMTP -> get_lines(): $data is ""
2017-11-06 01:09:49 SMTP -> get_lines(): $str is "250-email-smtp.amazonaws.com"
2017-11-06 01:09:49 SMTP -> get_lines(): $data is "250-email-smtp.amazonaws.com"
2017-11-06 01:09:49 SMTP -> get_lines(): $str is "250-8BITMIME"
2017-11-06 01:09:49 SMTP -> get_lines(): $data is "250-email-smtp.amazonaws.com250-8BITMIME"
2017-11-06 01:09:49 SMTP -> get_lines(): $str is "250-SIZE 10485760"
2017-11-06 01:09:49 SMTP -> get_lines(): $data is "250-email-smtp.amazonaws.com250-8BITMIME250-SIZE 10485760"
2017-11-06 01:09:49 SMTP -> get_lines(): $str is "250-STARTTLS"
2017-11-06 01:09:49 SMTP -> get_lines(): $data is "250-email-smtp.amazonaws.com250-8BITMIME250-SIZE 10485760250-STARTTLS"
2017-11-06 01:09:49 SMTP -> get_lines(): $str is "250-AUTH PLAIN LOGIN"
2017-11-06 01:09:49 SMTP -> get_lines(): $data is "250-email-smtp.amazonaws.com250-8BITMIME250-SIZE 10485760250-STARTTLS250-AUTH PLAIN LOGIN"
2017-11-06 01:09:49 SMTP -> get_lines(): $str is "250 Ok"
2017-11-06 01:09:49 SERVER -> CLIENT: 250-email-smtp.amazonaws.com250-8BITMIME250-SIZE 10485760250-STARTTLS250-AUTH PLAIN LOGIN250 Ok
2017-11-06 01:09:49 CLIENT -> SERVER: STARTTLS
2017-11-06 01:09:49 SMTP -> get_lines(): $data is ""
2017-11-06 01:09:49 SMTP -> get_lines(): $str is "220 Ready to start TLS"
2017-11-06 01:09:49 SERVER -> CLIENT: 220 Ready to start TLS
2017-11-06 01:09:49 CLIENT -> SERVER: EHLO 34.200.216.237
2017-11-06 01:09:49 SMTP -> get_lines(): $data is ""
2017-11-06 01:09:49 SMTP -> get_lines(): $str is "250-email-smtp.amazonaws.com"
2017-11-06 01:09:49 SMTP -> get_lines(): $data is "250-email-smtp.amazonaws.com"
2017-11-06 01:09:49 SMTP -> get_lines(): $str is "250-8BITMIME"
2017-11-06 01:09:49 SMTP -> get_lines(): $data is "250-email-smtp.amazonaws.com250-8BITMIME"
2017-11-06 01:09:49 SMTP -> get_lines(): $str is "250-SIZE 10485760"
2017-11-06 01:09:49 SMTP -> get_lines(): $data is "250-email-smtp.amazonaws.com250-8BITMIME250-SIZE 10485760"
2017-11-06 01:09:49 SMTP -> get_lines(): $str is "250-STARTTLS"
2017-11-06 01:09:49 SMTP -> get_lines(): $data is "250-email-smtp.amazonaws.com250-8BITMIME250-SIZE 10485760250-STARTTLS"
2017-11-06 01:09:49 SMTP -> get_lines(): $str is "250-AUTH PLAIN LOGIN"
2017-11-06 01:09:49 SMTP -> get_lines(): $data is "250-email-smtp.amazonaws.com250-8BITMIME250-SIZE 10485760250-STARTTLS250-AUTH PLAIN LOGIN"
2017-11-06 01:09:49 SMTP -> get_lines(): $str is "250 Ok"
2017-11-06 01:09:49 SERVER -> CLIENT: 250-email-smtp.amazonaws.com250-8BITMIME250-SIZE 10485760250-STARTTLS250-AUTH PLAIN LOGIN250 Ok
2017-11-06 01:09:49 Auth method requested: UNKNOWN
2017-11-06 01:09:49 Auth methods available on the server: PLAIN,LOGIN
2017-11-06 01:09:49 Auth method selected: LOGIN
2017-11-06 01:09:49 CLIENT -> SERVER: AUTH LOGIN
2017-11-06 01:09:49 SMTP -> get_lines(): $data is ""
2017-11-06 01:09:49 SMTP -> get_lines(): $str is "334 VXNlcm5hbWU6"
2017-11-06 01:09:49 SERVER -> CLIENT: 334 VXNlcm5hbWU6
2017-11-06 01:09:49 CLIENT -> SERVER: QUtJQUlOSDZQWjJVUUtESzJCVEE=
2017-11-06 01:09:49 SMTP -> get_lines(): $data is ""
2017-11-06 01:09:49 SMTP -> get_lines(): $str is "334 UGFzc3dvcmQ6"
2017-11-06 01:09:49 SERVER -> CLIENT: 334 UGFzc3dvcmQ6
2017-11-06 01:09:49 CLIENT -> SERVER: R3ZNTWE3UjNmQVhaR2FjbDNneWZBODZKMFJ4SkxPN0ZRdGU5dnJvZg==
2017-11-06 01:09:50 SMTP -> get_lines(): $data is ""
2017-11-06 01:09:50 SMTP -> get_lines(): $str is "535 Authentication Credentials Invalid"
2017-11-06 01:09:50 SERVER -> CLIENT: 535 Authentication Credentials Invalid
2017-11-06 01:09:50 SMTP ERROR: Password command failed: 535 Authentication Credentials Invalid
SMTP Error: Could not authenticate.
2017-11-06 01:09:50 CLIENT -> SERVER: QUIT
2017-11-06 01:09:50 SMTP -> get_lines(): $data is ""
2017-11-06 01:09:50 SMTP -> get_lines(): $str is "221 Bye"
2017-11-06 01:09:50 SERVER -> CLIENT: 221 Bye
2017-11-06 01:09:50 Connection: closed
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Email not sent. SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Upvotes: 3
Views: 11276
Reputation: 1
I had the same issue, until I found out that ConfigServer Security & Firewall (csf) was blocking it for some reason.
The solution was turning off the "Restrict outgoing SMTP to root, exim, and mailman (FKA SMTP Tweak)" in WHM Tweak Settings. This option is incompatible with CSF.
Upvotes: 0
Reputation: 1892
I added my answer here as nothing from above helped me. This problem is related to a security feature in WHM/cPanel. Read more only if your server has WHM on it.
The option is called:
Restrict outgoing SMTP to root, exim, and mailman (FKA SMTP Tweak)
If you disable this, the problem is fixed. Please bear in mind that on some versions of cPanel this option is missing and it appears in WHM because it affects all accounts. For me, it was OK to disable it as I own the server and there are no unknown domains/users there.
Upvotes: 1
Reputation: 41
This example function will work with Amazon SES with PHP 7.1 installed on Windows 2012, assuming you unzipped phpmailer 5.2 (or so) into the same location I did. I did not bother with the composer. Note in the function below I commented out the line $mail->SMTPDebug = 2; ...but you'd want to un-comment this line while testing so you can see what happened. The values you need to add are within brackets. My SES host is "email-smtp.us-east-1.amazonaws.com" , just make sure whichever one you use that you don't put anything more than just the host fqdn, nothing else (don't lead it with tls://....
Save the following as Send_Amazon_Mail.php
<?php
function Send_Mail($to,$subject,$body)
{
require 'C:\Program Files\PHP\v7.1\phpmailer\PHPMailerAutoload.php';
$from = "[SES validated email address here]";
$mail = new PHPMailer();
// $mail->SMTPDebug = 2;
$mail->IsSMTP(true); // SMTP
$mail->SMTPAuth = true; // SMTP authentication
$mail->SMTPSecure = 'ssl';
$mail->Mailer = "smtp";
$mail->Host= "[your SES host]";
$mail->Port = 465; // SMTP Port
$mail->Username = "[SES SMTP USERNAME]"; // SMTP Username
$mail->Password = "[SES SMTP PASSWORD]"; // SMTP Password
$mail->SetFrom($from, 'Test Do Not Reply');
$mail->AddReplyTo($from,'[SES validated email address here]');
$mail->Subject = $subject;
$mail->MsgHTML($body);
$address = $to;
$mail->AddAddress($address, $to);
if(!$mail->Send())
return false;
else
return true;
}
?>
You can call this function with a test program
<?php
require 'Send_Amazon_Mail.php';
$to = "[someemailaddresshere]";
$subject = "Test Mail Subject";
$body = "Hi<br/>Test Mail<br/>Amazon SES"; // HTML tags
Send_Mail($to,$subject,$body);
?>
Upvotes: 0
Reputation: 81454
SES does not support using IAM User AccessKeys to send email. SES uses Amazon SES SMTP credentials.
Sign in to the AWS Management Console and open the Amazon SES console at https://console.aws.amazon.com/ses/.
In the navigation pane, choose SMTP Settings.
In the content pane, choose Create My SMTP Credentials.
In the Create User for SMTP dialog box, you will see that an SMTP user name has been filled in for you. You can accept this suggested user name or enter a different one. To proceed, choose Create.
Choose Show User SMTP Credentials. Your SMTP credentials will be displayed on the screen; copy them and store them in a safe place. You can also choose Download Credentials to download a file that contains your credentials.
Here is a link to a document that explains the different type of credentials and how they are used with SES.
Using Credentials With Amazon SES
Here is a link to obtaining credentials:
Obtaining Your Amazon SES SMTP Credentials
Upvotes: 6
Reputation: 104
Are these your AWS credentials or SMTP credentials? And if these are AWS credentials then generate SMTP credentials and then try. See it here
Or you can try this too Similar issue
Upvotes: 1