Improve Amazon SES code error handling behavior
Improve Amazon SES code error handling behavior

Summary:
Fixes T10728. Fixes T10476. SES uses third-party code with unique, creative ideas about error handling.

  - Make the error handling behavior more correct, so it doesn't try to use undefined variables.
  - Simplify the error handling behavior (throw exceptions sooner, remove redundant code).
  - Explicitly test for `-smtp` misconfigurations. These can arise if you read the wrong column out of the table in the AWS docs, as in T10728.
  - Explicitly test for SimpleXML, to catch T10476 before it does damage.

Test Plan:
  - Configured SES to use a bogus SMTP endpoint.
  - Faked past the SMTP check, hit sane error on the connection.
  - Undid faking, hit immediate hard stop on the STMP check.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T10476, T10728

Differential Revision: https://secure.phabricator.com/D15632

devurandom/phabricator,phacility/phabricator,phacility/phabricator,Soluis/phabricator,wikimedia/phabricator,folsom-labs/phabricator,vinzent/phabricator,gsinkovskiy/phabricator,benchling/phabricator,hach-que/phabricator,uhd-urz/phabricator,MicroWorldwide/phabricator,wikimedia/phabricator,Khan/phabricator,wikimedia/phabricator,Soluis/phabricator,r4nt/phabricator,huangjimmy/phabricator-1,Khan/phabricator,gsinkovskiy/phabricator,benchling/phabricator,Automatic/phabricator,devurandom/phabricator,gsinkovskiy/phabricator,freebsd/phabricator,MicroWorldwide/phabricator,wikimedia/phabricator-phabricator,kanarip/phabricator,aik099/phabricator,vinzent/phabricator,devurandom/phabricator,Automatic/phabricator,Soluis/phabricator,tanglu-org/tracker-phabricator,wikimedia/phabricator-phabricator,dannysu/phabricator,Khan/phabricator,uhd-urz/phabricator,MicroWorldwide/phabricator,dannysu/phabricator,huangjimmy/phabricator-1,r4nt/phabricator,Soluis/phabricator,gsinkovskiy/phabricator,vinzent/phabricator,r4nt/phabricator,hach-que/phabricator,vinzent/phabricator,hach-que/phabricator,uhd-urz/phabricator,wikimedia/phabricator,wikimedia/phabricator-phabricator,devurandom/phabricator,kanarip/phabricator,huangjimmy/phabricator-1,dannysu/phabricator,tanglu-org/tracker-phabricator,kanarip/phabricator,huangjimmy/phabricator-1,vinzent/phabricator,wikimedia/phabricator-phabricator,freebsd/phabricator,kanarip/phabricator,MicroWorldwide/phabricator,benchling/phabricator,Khan/phabricator,folsom-labs/phabricator,wikimedia/phabricator-phabricator,tanglu-org/tracker-phabricator,uhd-urz/phabricator,aik099/phabricator,folsom-labs/phabricator,folsom-labs/phabricator,freebsd/phabricator,tanglu-org/tracker-phabricator,tanglu-org/tracker-phabricator,Automatic/phabricator,devurandom/phabricator,hach-que/phabricator,dannysu/phabricator,benchling/phabricator,aik099/phabricator,aik099/phabricator,r4nt/phabricator,dannysu/phabricator,phacility/phabricator,devurandom/phabricator,r4nt/phabricator,phacility/phabricator,Automatic/phabricator,folsom-labs/phabricator,freebsd/phabricator,huangjimmy/phabricator-1,uhd-urz/phabricator,kanarip/phabricator,gsinkovskiy/phabricator,hach-que/phabricator,Soluis/phabricator