def connect_account(self, email, pw, imap_endpoint, account_id=None): """Provide a connection to a IMAP account. Raises ------ socket.error If we cannot connect to the IMAP host. IMAPClient.error If the credentials are invalid. """ host, port = imap_endpoint try: conn = IMAPClient(host, port=port, use_uid=True, ssl=True) except IMAPClient.AbortError as e: log.error('account_connect_failed', account_id=account_id, email=email, host=host, port=port, error="[ALERT] Can't connect to host - may be transient") raise TransientConnectionError(str(e)) except (IMAPClient.Error, gaierror, socket_error) as e: log.error('account_connect_failed', account_id=account_id, email=email, host=host, port=port, error='[ALERT] (Failure): {0}'.format(str(e))) raise ConnectionError(str(e)) conn.debug = False try: conn.oauth2_login(email, pw) except IMAPClient.AbortError as e: log.error('account_verify_failed', account_id=account_id, email=email, host=host, port=port, error="[ALERT] Can't connect to host - may be transient") raise TransientConnectionError(str(e)) except IMAPClient.Error as e: log.error('IMAP Login error during connection. ' 'Account: {}, error: {}'.format(email, e), account_id=account_id) if (str(e) == '[ALERT] Invalid credentials (Failure)' or str(e).startswith('[AUTHENTICATIONFAILED]')): raise ValidationError(str(e)) else: raise ConnectionError(str(e)) except SSLError as e: log.error('account_verify_failed', account_id=account_id, email=email, host=host, port=port, error='[ALERT] (Failure) SSL Connection error') raise ConnectionError(str(e)) return conn
def connect_account(self, provider, email, credential): """Provide a connection to a generic IMAP account. Raises ------ ConnectionError If we cannot connect to the IMAP host. TransientConnectionError Sometimes the server bails out on us. Retrying may fix things. ValidationError If the credentials are invalid. """ info = provider_info(provider, email) host, port = info['imap'] try: conn = IMAPClient(host, port=port, use_uid=True, ssl=True) except IMAPClient.AbortError as e: log.error('account_connect_failed', email=email, host=host, port=port, error="[ALERT] Can't connect to host - may be transient") raise TransientConnectionError(str(e)) except(IMAPClient.Error, gaierror, socket_error) as e: log.error('account_connect_failed', email=email, host=host, port=port, error='[ALERT] (Failure): {0}'.format(str(e))) raise ConnectionError(str(e)) conn.debug = False try: conn.login(email, credential) except IMAPClient.AbortError as e: log.error('account_verify_failed', email=email, host=host, port=port, error="[ALERT] Can't connect to host - may be transient") raise TransientConnectionError(str(e)) except IMAPClient.Error as e: log.error('account_verify_failed', email=email, host=host, port=port, error='[ALERT] Invalid credentials (Failure)') raise ValidationError(str(e)) except SSLError as e: log.error('account_verify_failed', email=email, host=host, port=port, error='[ALERT] SSL Connection error (Failure)') raise ConnectionError(str(e)) return conn
def connect_account(account): """Provide a connection to a IMAP account. Raises ------ socket.error If we cannot connect to the IMAP host. IMAPClient.error If the credentials are invalid. """ info = provider_info(account.provider) host = info['imap'] try: conn = IMAPClient(host, use_uid=True, ssl=True) except IMAPClient.AbortError as e: log.error('account_connect_failed', email=account.email_address, host=host, error=("[ALERT] Can't connect to host - may be transient")) raise TransientConnectionError(str(e)) except(IMAPClient.Error, gaierror, socket_error) as e: log.error('account_connect_failed', email=account.email_address, host=host, error='[ALERT] (Failure): {0}'.format(str(e))) raise ConnectionError(str(e)) conn.debug = False try: conn.oauth2_login(account.email_address, account.access_token) except IMAPClient.AbortError as e: log.error('account_verify_failed', email=account.email_address, host=host, error="[ALERT] Can't connect to host - may be transient") raise TransientConnectionError(str(e)) except IMAPClient.Error as e: log.error('IMAP Login error during refresh auth token. ' 'Account: {}, error: {}'.format(account.email_address, e)) if str(e) == '[ALERT] Invalid credentials (Failure)': # Access token could've expired try: conn.oauth2_login(account.email_address, account.renew_access_token()) except IMAPClient.Error as e: raise ValidationError(str(e)) else: raise ConnectionError(str(e)) except SSLError as e: log.error('account_verify_failed', email=account.email_address, host=host, error='[ALERT] (Failure) SSL Connection error') raise ConnectionError(str(e)) return conn
def connect_account(provider, email, pw): """Provide a connection to a IMAP account. Raises ------ socket.error If we cannot connect to the IMAP host. IMAPClient.error If the credentials are invalid. """ info = provider_info(provider) host, port = info['imap'] try: conn = IMAPClient(host, port=port, use_uid=True, ssl=True) except IMAPClient.AbortError as e: log.error('account_connect_failed', email=email, host=host, port=port, error=("[ALERT] Can't connect to host - may be transient")) raise TransientConnectionError(str(e)) except (IMAPClient.Error, gaierror, socket_error) as e: log.error('account_connect_failed', email=email, host=host, port=port, error='[ALERT] (Failure): {0}'.format(str(e))) raise ConnectionError(str(e)) conn.debug = False try: conn.oauth2_login(email, pw) except IMAPClient.AbortError as e: log.error('account_verify_failed', email=email, host=host, port=port, error="[ALERT] Can't connect to host - may be transient") raise TransientConnectionError(str(e)) except IMAPClient.Error as e: log.error('IMAP Login error during refresh auth token. ' 'Account: {}, error: {}'.format(email, e)) if str(e) == '[ALERT] Invalid credentials (Failure)' or \ str(e) == '[AUTHENTICATIONFAILED] OAuth authentication failed.': raise ValidationError(str(e)) else: raise ConnectionError(str(e)) except SSLError as e: log.error('account_verify_failed', email=email, host=host, port=port, error='[ALERT] (Failure) SSL Connection error') raise ConnectionError(str(e)) return conn