Properly handle SMTP auth errors when using XOAUTH2.
Properly handle SMTP auth errors when using XOAUTH2.

Summary:
Previously we'd use `smtplib.SMTP.docmd()` to implement XOAUTH2 auth, and try
to catch `smtplib.SMTPAuthenticationError`. Unfortunately, the `docmd()` method
never throws `SMTPAuthenticationError`. You have to actually check the return
code. Do that instead.

Test Plan:
Patch token manager to return fake tokens. Verify that sending then
fails appropriately with a 403 status code returned.

Reviewers: kav-ya, mg, jennie

Reviewed By: jennie

Differential Revision: https://review.inboxapp.com/D1161

Eagles2F/sync-engine,nylas/sync-engine,wakermahmud/sync-engine,jobscore/sync-engine,Eagles2F/sync-engine,gale320/sync-engine,jobscore/sync-engine,wakermahmud/sync-engine,Eagles2F/sync-engine,ErinCall/sync-engine,PriviPK/privipk-sync-engine,gale320/sync-engine,wakermahmud/sync-engine,ErinCall/sync-engine,closeio/nylas,Eagles2F/sync-engine,EthanBlackburn/sync-engine,wakermahmud/sync-engine,ErinCall/sync-engine,ErinCall/sync-engine,jobscore/sync-engine,jobscore/sync-engine,gale320/sync-engine,PriviPK/privipk-sync-engine,EthanBlackburn/sync-engine,PriviPK/privipk-sync-engine,gale320/sync-engine,EthanBlackburn/sync-engine,Eagles2F/sync-engine,PriviPK/privipk-sync-engine,ErinCall/sync-engine,nylas/sync-engine,PriviPK/privipk-sync-engine,wakermahmud/sync-engine,EthanBlackburn/sync-engine,gale320/sync-engine,closeio/nylas,EthanBlackburn/sync-engine,closeio/nylas,nylas/sync-engine,nylas/sync-engine,closeio/nylas