ListMailPRO Email Marketing Software Forums

ListMailPRO Email Marketing Software Forums => General Help & How-To => Topic started by: franklinfick on November 22, 2014, 07:09:46 pm

Title: SMTP with Amazon SES Problem
Post by: franklinfick on November 22, 2014, 07:09:46 pm
I can not get the SMTP Setting with Amazon SES to work

I am getting this error message on the log
[23-Nov-2014 01:39:34 UTC] PHP Warning:  fsockopen(): unable to connect to      email-smtp.us-east-1.amazonaws.com:465 (php_network_getaddresses: getaddrinfo failed: Name or service not known) in /home/shenlong/public_html/connect/editconf.php on line 1894

and this on the test mail settings:
[SMTP Server]
Is enabled?  Yes
Connecting to SMTP server.. Connected!
Verifying username and password... Failed!
The SMTP server is not configured correctly. Check your settings.


I have the
host
port
Auth - login ID and Password

all filled out correctly

and I have tried every port that Amazon has in their help file on connecting to the SMTP server

///////////////////////
STARTTLS

STARTTLS is a means of upgrading an unencrypted connection to an encrypted connection. There are versions of STARTTLS for a variety of protocols; the SMTP version is defined in RFC 3207.

To set up a STARTTLS connection, the SMTP client connects to the Amazon SES SMTP endpoint on port 25, 587, or 2587, issues an EHLO command, and waits for the server to announce that it supports the STARTTLS SMTP extension. The client then issues the STARTTLS command, initiating TLS negotiation. When negotiation is complete, the client issues an EHLO command over the new encrypted connection, and the SMTP session proceeds normally.
TLS Wrapper

TLS Wrapper (also known as SMTPS or the Handshake Protocol) is a means of initiating an encrypted connection without first establishing an unencrypted connection. With TLS Wrapper, the Amazon SES SMTP endpoint does not perform TLS negotiation: it is the client's responsibility to connect to the endpoint using TLS, and to continue using TLS for the entire conversation. TLS Wrapper is an older protocol, but many clients still support it.

To set up a TLS Wrapper connection, the SMTP client connects to the Amazon SES SMTP endpoint on port 465 or 2465. The server presents its certificate, the client issues an EHLO command, and the SMTP session proceeds normally.
///////////////////////



I previously had my listmap pro installation set up to run STMP through a VPS that I had

I no longer have the VPS

and have decided to try Amazon SES

but can't get to work


Here is my SMTP log File that was written


> EHLO localhost

250-email-smtp.amazonaws.com

250-8BITMIME

250-SIZE 10485760

250-STARTTLS

250-AUTH PLAIN LOGIN

250 Ok

LM: AUTH LOGIN Detected

> AUTH LOGIN

530 Must issue a STARTTLS command first


thanks for any help in this matter

Franklin

Title: Re: SMTP with Amazon SES Problem
Post by: DW on November 22, 2014, 09:20:19 pm
Hi Franklin,

It appears there are two separate issues in your post.

1. "php_network_getaddresses: getaddrinfo failed: Name or service not known" suggests a DNS error. The PHP script is not able to do a hostname lookup to determine the IP to connect to. You might talk to your host about fixing that or try connecting by IP after looking up the host yourself.

2. LMP doesn't currently have any support for STARTTLS connections, however I will consider it for the future. Until then, please use an unencrypted service if available.

Regards,
Title: Re: SMTP with Amazon SES Problem
Post by: franklinfick on November 23, 2014, 08:02:57 am
Hi Franklin,

It appears there are two separate issues in your post.

1. "php_network_getaddresses: getaddrinfo failed: Name or service not known" suggests a DNS error. The PHP script is not able to do a hostname lookup to determine the IP to connect to. You might talk to your host about fixing that or try connecting by IP after looking up the host yourself.

2. LMP doesn't currently have any support for STARTTLS connections, however I will consider it for the future. Until then, please use an unencrypted service if available.

Regards,

for 1-  i think that was an error i got when trying other ports to connect through
and could not connect


2- then amazon ses is not an option?
i don't think they support unencrypted connections
(at least i can not find anything in their docs about it)

please consider in the future to make LMP comparable with Amazon SES
that would be wonderful
thanks


Franklin




Title: Re: SMTP with Amazon SES Problem
Post by: DW on November 23, 2014, 03:55:18 pm
Hey Franklin,

I have heard of other clients using LMP with SES (http://listmailpro.com/forum/general-help-how-to/imported-users-deleted-by-dailymail/msg69620/#msg69620) so I wonder if the encryption requirement is new.

We may be in luck pursuant to this (http://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-connect.html) and this (http://php.net/manual/en/transports.inet.php).

Try using the hostname "tls://email-smtp.us-east-1.amazonaws.com" on port 465.

Regards
Title: Re: SMTP with Amazon SES Problem
Post by: franklinfick on November 23, 2014, 04:40:18 pm

thanks

still getting an error message when trying to connect to: tls://email-smtp.us-east-1.amazonaws.com

with either port 465 and 2465


-----------------------
[SMTP Server]
Is enabled?  Yes
Connecting to SMTP server..
Warning: fsockopen(): unable to connect to tls://email-smtp.us-east-1.amazonaws.com:465 (Connection refused) in /home/shenlong/public_html/connect/editconf.php on line 1894
Could not find server!

The SMTP server is not configured correctly. Check your settings.
-----------------------------------


Franklin
Title: Re: SMTP with Amazon SES Problem
Post by: DW on November 23, 2014, 05:08:13 pm
Hi Franklin,

On two separate systems, the following PHP test script works:
Code: [Select]
<?phperror_reporting(E_ALL);$sock=fsockopen('tls://email-smtp.us-east-1.amazonaws.com',465);if($sock) echo "Socket established\n"; else exit("Socket could not be established\n");echo fgets($sock,1024);echo "> EHLO localhost\n";fputs($sock,"EHLO localhost\r\n");$line='';while(substr($line,3,1)!==' '){        $line=fgets($sock,1024);        echo $line;}

The result when run from browser or commandline is e.g.:
Code: [Select]
Socket established
220 email-smtp.amazonaws.com ESMTP SimpleEmailService-908880847 2G85c3kZxdN3aiX48I3
> EHLO localhost
250-email-smtp.amazonaws.com
250-8BITMIME
250-SIZE 10485760
250-AUTH PLAIN LOGIN
250 Ok

For me, everything seems to be working as expected. The SMTP conversation should be able to continue as normal. LMP does it the same way.

If this test doesn't return similar results for you you will need to speak with your host as they may have limited or restricted such PHP socket connections or be experiencing a technical issue.

Regards
Title: Re: SMTP with Amazon SES Problem
Post by: franklinfick on November 23, 2014, 05:37:02 pm

i tested the php file on my server

here is what it returned:

------------------------
Warning: fsockopen(): unable to connect to tls://email-smtp.us-east-1.amazonaws.com:465 (Connection refused) in /home/shenlong/public_html/connect/testphp.php on line 3
Socket could not be established
---------------------------------------------------------------


is this caused because the port 465 is not open
or something else

I need to know what to contact my host about...
and I have no clue what could be causing this


thanks
Franklin
Title: Re: SMTP with Amazon SES Problem
Post by: franklinfick on November 23, 2014, 05:54:29 pm


on the phone with my hosting support they confirmed that port 465 is open

and now I am getting 2 errors when trying to connect throguh LMP

--------------------
[SMTP Server]
Is enabled?  Yes
Connecting to SMTP server..
Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/shenlong/public_html/connect/editconf.php on line 1894

Warning: fsockopen(): unable to connect to tls://email-smtp.us-east-1.amazonaws:465 (php_network_getaddresses: getaddrinfo failed: Name or service not known) in /home/shenlong/public_html/connect/editconf.php on line 1894
Could not find server!

The SMTP server is not configured correctly. Check your settings.

______________________

Title: Re: SMTP with Amazon SES Problem
Post by: DW on November 23, 2014, 06:04:49 pm
Quote
on the phone with my hosting support they confirmed that port 465 is open

and now I am getting 2 errors when trying to connect throguh LMP

Please mention to your host that we need to connect TO email-smtp.us-east-1.amazonaws.com on port 465 using PHP fsockopen() with TLS encryption enabled and it's not working due to DNS or other. You can send them a link to this thread. I recommend starting a support ticket if they offer that rather than phoning as it may take them some time to diagnose and fix.

Required of the host is:
  • The unrestricted ability to connect via PHP sockets
  • PHP support for SSL/TLS connections
  • A working DNS system (Your host seems to be giving DNS errors)

Regards
Title: Re: SMTP with Amazon SES Problem
Post by: franklinfick on November 23, 2014, 07:06:58 pm

thanks for your help Dean

seems I need to change hosts

here is the jist of the conversation I just had with Godaddy representative:
--------------------------
Amy -
    I apologize for any confusion and incorrect information you had received, however, within our shared hosting environments we intentionally restrict SMTP traffic. You will not be able to use a 3rd party mail server. This is done to prevent our systems from being used to send spam, or otherwise malicious messages.

franklin -
    so you are saying it is immpossible to have a web aplication that connects with amazon ses with your shared hosting plan
    franklin -
    ?

Amy -
    That is correct
   
franklin -
    and it would also be impossible to connect with any other smtp provider as well
   
franklin -
    like sendgrid
   
franklin -
    or madrill
   
Amy -
    Correct, we do provide a relay server in order to use, that would be the only way to connect through SMTP with our shared hosting.



-------------------------------------





Title: Re: SMTP with Amazon SES Problem
Post by: franklinfick on November 23, 2014, 07:36:22 pm

on phone support with them...

the only option they could offer me was to connect without any encryption on port 25


so it looks like my host is not able to connect to amazon ses


any recommendations on affordable hosting that will work with tls:// on port 465?


thanks

Franklin
Title: Re: SMTP with Amazon SES Problem
Post by: DW on November 23, 2014, 08:00:41 pm
Hi Franklin,

There are a lot of hosts out there, many more permissive than GoDaddy. You'll have to ask to be sure if they support PHP connections to external servers like Amazon SES.

I just updated our Email Hosting page (http://listmailpro.com/email-hosting). Perhaps you will find something there.

Regards
Title: Re: SMTP with Amazon SES Problem
Post by: BGSWebDesign on November 23, 2014, 09:53:42 pm
Hi Franklin,

Quote
I have heard of other clients using LMP with SES so I wonder if the encryption requirement is new.

No, I'm not using LMP with Amazon SES because, as I mentioned in that post, LMP must support a method to retrieve SNS messages from Amazon to retrieve Complaints and Bounced emails, and immediately unsubscribe those users from the database.  At this time, LMP does not provide an option for that, so it would be impossible to use LMP with SES because it could end up causing problems with Amazon SES and get you banned from using that service. 

I'm hoping that Dean (the author of LMP), can soon provide us with a method to setup/configure Amazon SES with Amazon SNS to track complaints/bounces of messages, as well as the allowed message send queue size in real-time.  I've discussed this a few times and without those capabilities, it is simply not safe to use LMP with Amazon SES, unless you are willing to possibly be banned from Amazon SES, especially if you are mailing large lists, but possibly with lists of any size.  The methods that Dean has described for using LMP with SES are those that are used for transactional emails only, and not for sending broadcasts to large lists.

There are other services I use, contact me directly if you wish to discuss them (my contact page is in my signature - below).

Title: ListMailPRO Amazon SES SNS Complaint & Bounce Processing
Post by: DW on November 23, 2014, 10:51:43 pm
Hi Brett,

Quote
I'm hoping that Dean (the author of LMP), can soon provide us with a method to setup/configure Amazon SES with Amazon SNS to track complaints/bounces of messages

Try this:
Code: [Select]
<?php// LMP Amazon SES SNS Complaint & Bounce Processing// based on https://github.com/npflood/AWS-SNS-HTTP-PHP-ENDPOINT/blob/master/receiver.php//// Name this file ses_bounce.php or similar, put it in your LMP folder, and (after configuring below) set its URL as an SNS HTTP endpoint (also configure SES to publish to the SNS topic)// Change $allowedTopic below to your full SNS topic// Change $sourceDomain below to suit your region// see bottom for LMP////////// CONFIGURATION////////For Debugging.$logToFile = false;//Should you need to check that your messages are coming from the correct topicArn$restrictByTopic = true;$allowedTopic = "arn:aws:sns:us-west-2:100885381234:SES_Complaints_and_Bounces";//For security you can (should) validate the certificate, this does add an additional time demand on the system.//NOTE: This also checks the origin of the certificate to ensure messages are signed by the AWS SNS SERVICE.//Since the allowed topicArn is part of the validation data, this ensures that your request originated from//the service, not somewhere else, and is from the topic you think it is, not something spoofed.$verifyCertificate = true;$sourceDomain = "sns.us-west-2.amazonaws.com"; ////////// OPERATION//////$signatureValid = false;$safeToProcess = true; //Are Security Criteria Set Above Met? Changed programmatically to false on any security failure.if($logToFile){	////LOG TO FILE:	$dateString = date("Ymdhis");	$dateString = $dateString."_r.txt";	$myFile = $dateString;	$fh = fopen($myFile, 'w') or die("Log File Cannot Be Opened.");}//Get the raw post data from the request. This is the best-practice method as it does not rely on special php.ini directives//like $HTTP_RAW_POST_DATA. Amazon SNS sends a JSON object as part of the raw post body.$json = json_decode(file_get_contents("php://input"));//Check for Restrict By Topicif($restrictByTopic){	if($allowedTopic != $json->TopicArn){		$safeToProcess = false;		if($logToFile){			fwrite($fh, "ERROR: Allowed Topic ARN: ".$allowedTopic." DOES NOT MATCH Calling Topic ARN: ". $json->TopicArn . "\n");		}	}}//Check for Verify Certificateif($verifyCertificate){	//Check For Certificate Source	$domain = getDomainFromUrl($json->SigningCertURL);	if($domain != $sourceDomain){		$safeToProcess = false;		if($logToFile){			fwrite($fh, "Key domain: " . $domain . " is not equal to allowed source domain:" .$sourceDomain. "\n");		}	}				//Build Up The String That Was Originally Encoded With The AWS Key So You Can Validate It Against Its Signature.	if($json->Type == "SubscriptionConfirmation"){		$validationString = "";		$validationString .= "Message\n";		$validationString .= $json->Message . "\n";		$validationString .= "MessageId\n";		$validationString .= $json->MessageId . "\n";		$validationString .= "SubscribeURL\n";		$validationString .= $json->SubscribeURL . "\n";		$validationString .= "Timestamp\n";		$validationString .= $json->Timestamp . "\n";		$validationString .= "Token\n";		$validationString .= $json->Token . "\n";		$validationString .= "TopicArn\n";		$validationString .= $json->TopicArn . "\n";		$validationString .= "Type\n";		$validationString .= $json->Type . "\n";	}else{		$validationString = "";		$validationString .= "Message\n";		$validationString .= $json->Message . "\n";		$validationString .= "MessageId\n";		$validationString .= $json->MessageId . "\n";		if($json->Subject != ""){			$validationString .= "Subject\n";			$validationString .= $json->Subject . "\n";		}		$validationString .= "Timestamp\n";		$validationString .= $json->Timestamp . "\n";		$validationString .= "TopicArn\n";		$validationString .= $json->TopicArn . "\n";		$validationString .= "Type\n";		$validationString .= $json->Type . "\n";	}	if($logToFile){		fwrite($fh, "Data Validation String:");		fwrite($fh, $validationString);	}		$signatureValid = validateCertificate($json->SigningCertURL, $json->Signature, $validationString);		if(!$signatureValid){		$safeToProcess = false;		if($logToFile){			fwrite($fh, "Data and Signature Do No Match Certificate or Certificate Error.\n");		}	}else{		if($logToFile){			fwrite($fh, "Data Validated Against Certificate.\n");		}	}}if($safeToProcess){	//Handle A Subscription Request Programmatically	if($json->Type == "SubscriptionConfirmation"){		//RESPOND TO SUBSCRIPTION NOTIFICATION BY CALLING THE URL				if($logToFile){			fwrite($fh, $json->SubscribeURL);		}				$curl_handle=curl_init();		curl_setopt($curl_handle,CURLOPT_URL,$json->SubscribeURL);		curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);		curl_exec($curl_handle);		curl_close($curl_handle);		}			//Handle a Notification Programmatically	if($json->Type == "Notification"){		//Do what you want with the data here.		//fwrite($fh, $json->Subject);		//fwrite($fh, $json->Message);	}}//Clean Up For Debugging.if($logToFile){	ob_start();	print_r( $json );	$output = ob_get_clean();	fwrite($fh, $output);	////WRITE LOG	fclose($fh);}//A Function that takes the key file, signature, and signed data and tells us if it all matches.function validateCertificate($keyFileURL, $signatureString, $data){		$signature = base64_decode($signatureString);			// fetch certificate from file and ready it	$fp = fopen($keyFileURL, "r");	$cert = fread($fp, 8192);	fclose($fp);		$pubkeyid = openssl_get_publickey($cert);		$ok = openssl_verify($data, $signature, $pubkeyid, OPENSSL_ALGO_SHA1);			if ($ok == 1) {	    return true;	} elseif ($ok == 0) {	    return false;	    	} else {	    return false;	}	}//A Function that takes a URL String and returns the domain portion onlyfunction getDomainFromUrl($urlString){	$domain = "";	$urlArray = parse_url($urlString);		if($urlArray == false){		$domain = "ERROR";	}else{		$domain = $urlArray['host'];	}		return $domain;}// LMP - Process Bounce or Complaint// per http://docs.aws.amazon.com/ses/latest/DeveloperGuide/notification-examples.htmlinclude('./config.php');include('./admin.php');if($json->notificationType=='Bounce'){	if($json->bounce->bounceType=='Permanent'){		foreach($json->bounce->bouncedRecipients as $r){			// set user to bounced			mysql_query("UPDATE $utable SET cnf = '3' WHERE email LIKE '".addslashes($r->emailAddress)."';") or die(mysql_error());		}	}} elseif($json->notificationType=='Complaint'){	foreach($json->complaint->complainedRecipients as $r){		// set user to removed		mysql_query("UPDATE $utable SET cnf = '2' WHERE email LIKE '".addslashes($r->emailAddress)."';") or die(mysql_error());	}}?>

I'll have to consider the queue size issue further.

Regards
Title: Re: SMTP with Amazon SES Problem
Post by: BGSWebDesign on November 24, 2014, 07:20:31 am
Hi Dean,

Thanks!  This looks like just what I need.  I'm not that concerned with Quota (Queue size) now as mine is set really high on Amazon, but others will need that in place, so - some type of throttling to slow down sending, or leave it wide-open and somehow cut the user off after they hit their Amazon SES Quota for the day?

This is just great, I will play around with that code, and turn on the logfile to see what I get out of it.  It shouldn't be too hard to get this going, and that would really change my use of LMP making it
much more usable for sending via SES.  I still might like some type of integration step-by-step guide, as to what else I change, is it just the SMTP information pointing to Amazon SES, and then read below
about turning off, or changing how bounce processing is currently setup...

A few questions about the code. 

1.) At the top it says:
Code: [Select]
$allowedTopic = "arn:aws:sns:us-west-2:100885381234:SES_Complaints_and_Bounces";
//For security you can (should) validate the certificate, this does add an additional time demand on the system.
//NOTE: This also checks the origin of the certificate to ensure messages are signed by the AWS SNS SERVICE.
//Since the allowed topicArn is part of the validation data, this ensures that your request originated from
//the service, not somewhere else, and is from the topic you think it is, not something spoofed.
$verifyCertificate = true;
$sourceDomain = "sns.us-west-2.amazonaws.com";

I think something has to change here, as the $allowedTopic includes a sourceDomain in it?  In other words, my source domain is really USA East, not West, so I either have to change this in both places above, or maybe you move sourceDomain up top and the allowedTopic variable is setup to include the proper sourceDomain in it?  Also, I can look it up, but maybe you have the string for USA East handy?

2.) I'm not sure how this fits in with current/standard bounce processing?  What would I do with LMP's current bounce processing if I setup to send via Amazon SES, just turn it off, and what is the best way to turn off the other Bounce Processing that I currently have setup? 

Other then those two things, this is perfect and should allow me to send via SES - using LMP, something I've been wanting to do for some time now.  I'll probably setup an alternate LMP installation to test this on.

Could you please provide us with an ETA on the next version of LMP?  If you're able to crank out code like this in a few minutes, I suspect you must be ready with a new version of LMP???

Title: Re: SMTP with Amazon SES Problem
Post by: franklinfick on December 09, 2014, 11:04:41 pm


I was thinking about getting a VPS with 1and1 hosting as recomended on the hosting page

but I found this in the forum:
1and1 is blocking smtp connections from the server

-----------------------------
After many emails to 1&1 tech support and my own experience (fsockopen: connection could not be made) it is clear that they are blocking connections from the web server to the SMTP host on both ports 25 and 587.  ListMail does support SMTP authorization - it works with practically -every- other host and used to work on 1&1.  Now, however, it appears 1&1 has a new policy in place to prevent connections to SMTP made from scripts on their web servers.  This can be implemented with a local firewall or other IP-based rule.
----------------------------------------------


is this still true?
so that if I get a vps with 1and1 -- I will not be able to send mail throguh their smtp?


thanks for your input


Franklin
Title: Re: SMTP with Amazon SES Problem
Post by: franklinfick on June 11, 2016, 05:09:49 pm

i am revisiting this topic-- as I am trying again after some years to get SES to work with my listmailpro instalation

i switched hosts

and tested the code that was provided earlier

Code: [Select]
<?phperror_reporting(E_ALL);$sock=fsockopen('tls://email-smtp.us-east-1.amazonaws.com',465);if($sock) echo "Socket established\n"; else exit("Socket could not be established\n");echo fgets($sock,1024);echo "> EHLO localhost\n";fputs($sock,"EHLO localhost\r\n");$line='';while(substr($line,3,1)!==' '){        $line=fgets($sock,1024);        echo $line;}


this is working and not giving me any error messages..


================================


I set up my domain and emails in Amazon SES
and got my smtp credentials
--- i tested these credentials in thunderbird--
and i have no problem signing into the amazon ses server and sending email

putting the smtp credentials into listmailpro configuration screen:
testing the mail connection gives:

Testing mail servers..

[Bounce Handling]
Is enabled?  No (you should probably configure it)

[SMTP Server]
Is enabled?  Yes
Connecting to SMTP server.. Connected!
Could not say EHLO.

The SMTP server is not configured correctly. Check your settings.


============================


trying to send a mass email
(to a test list and only one test subscriber)
I get a failed error message that smtp was not set up correctly

log file shows:
> EHLO localhost





=================================



I get the same error message when testing mail settings and sending a test email to a list
when AUTH? is checked and when it is not checked...



Is there something simple that I am missing?



Franklin

Title: Re: SMTP with Amazon SES Problem
Post by: DW on June 24, 2016, 10:52:55 am
Hi Franklin,

I'm not sure amazon is accepting the connection as there is no SMTP greeting in the log.

Try setting the SMTP host in LMP to tls://email-smtp.us-east-1.amazonaws.com and port to 465.

Regards
Title: Re: SMTP with Amazon SES Problem
Post by: BGSWebDesign on August 03, 2016, 10:22:03 pm
Hi Franklin,

Did you get this working with Amazon SES?  I'm interested in knowing if you had success with it, or not?  Also, which host are you using?  I would not attempt it unless I was at least on VPS.

Title: Re: SMTP with Amazon SES Problem
Post by: steve4 on August 24, 2016, 04:23:41 pm
FYI. If anyone is interested Amazon SES is not very friendly if you run a commercial operation. I had my account suspended saying I didn't conform with their terms of service. When I looked back over them it says that you can't do any commercial or advertising mailing through it. If you are and it is working it might just be a matter of time or a few people marking your emails as spam until you are suspended as I was good for some months before it happened and they didn't want to look at reconsidering even though I follow all the rules and only mail people who sign up with unsubscribe links on all my mails.
Title: Re: SMTP with Amazon SES Problem
Post by: BGSWebDesign on August 29, 2016, 09:13:15 pm
Steve,

Amazon SES does allow all types of email, you can see that here:
https://aws.amazon.com/ses/faqs/ (https://aws.amazon.com/ses/faqs/)

Where it says:
Quote
Amazon SES can reliably deliver merchandising, subscription, transactional, and notification email messages.

And in their AUP (Acceptable Use Policy) here:
https://aws.amazon.com/aup/ (https://aws.amazon.com/aup/)

Maybe you misread this part about promotions, but the kind they do NOT allow are clearly indicated:
Quote
promotions (e.g., make-money-fast schemes, ponzi and pyramid schemes, phishing, or pharming)

I've had some issues with Amazon SES, that I've always been able to clear up, usually it's when I've sent to an older list (with bounce rates over 5%), etc...
I've been sending with Amazon SES for over 3 years and my Quota is at the highest you can go with over 1 M (1 million) emails/day maximum, so you can see
I am not experiencing problems sending through them.

Either way, if you mail responsibly and you keep your bounce rate down by doing better Email verification, such as using a service like:
http://www.bulkemailchecker.com/ (http://www.bulkemailchecker.com/) or:
https://email-verify.my-addr.com/ (https://email-verify.my-addr.com/)
you should be fine.

I think you may have misread their terms, or maybe confused their SMS (text message) terms which do say that you cannot send promotions, here:
https://aws.amazon.com/service-terms/ (https://aws.amazon.com/service-terms/)

Which clearly do say you cannot use Amazon SNS, or SMS messages for
Quote
advertisements or promotions for commercial products, goods or services; or

Either way, I've been looking at others services which might fill in, and you might want to consider this, I've had a look at SparkPost which seems
to be very good at deliverability, and may not have as many issues with your sending, you can find out more at: 
https://www.sparkpost.com/ (https://www.sparkpost.com/)

Good luck, let us know how it turns out for you...