mirror of
https://github.com/domainaware/parsedmarc.git
synced 2026-07-15 13:04:56 +00:00
Move IMAP messages over a seperate connection
This commit is contained in:
+78
-2
@@ -917,15 +917,30 @@ def get_dmarc_reports_from_inbox(host=None,
|
||||
move_supported = "MOVE" in server_capabilities
|
||||
|
||||
def delete_messages(msg_uids):
|
||||
_server = imapclient.IMAPClient(host,
|
||||
port=port,
|
||||
ssl=ssl,
|
||||
ssl_context=ssl_context,
|
||||
use_uid=True)
|
||||
_server.login(user, password)
|
||||
|
||||
logger.debug("Deleting message UID(s) {0}".format(",".join(
|
||||
str(uid) for uid in msg_uids)))
|
||||
if type(msg_uids) == str or type(msg_uids) == int:
|
||||
msg_uids = [int(msg_uids)]
|
||||
|
||||
server.delete_messages(msg_uids, silent=True)
|
||||
server.expunge(msg_uids)
|
||||
_server.delete_messages(msg_uids, silent=True)
|
||||
_server.expunge(msg_uids)
|
||||
_server.logout()
|
||||
|
||||
def move_messages(msg_uids, folder):
|
||||
_server = imapclient.IMAPClient(host,
|
||||
port=port,
|
||||
ssl=ssl,
|
||||
ssl_context=ssl_context,
|
||||
use_uid=True)
|
||||
_server.login(user, password)
|
||||
|
||||
if type(msg_uids) == str or type(msg_uids) == int:
|
||||
msg_uids = [int(msg_uids)]
|
||||
for chunk in chunks(msg_uids, 100):
|
||||
@@ -941,6 +956,8 @@ def get_dmarc_reports_from_inbox(host=None,
|
||||
server.copy(msg_uids, folder)
|
||||
delete_messages(msg_uids)
|
||||
|
||||
_server.logout()
|
||||
|
||||
if not server.folder_exists(archive_folder):
|
||||
logger.debug("Creating IMAP folder: {0}".format(archive_folder))
|
||||
server.create_folder(archive_folder)
|
||||
@@ -992,6 +1009,11 @@ def get_dmarc_reports_from_inbox(host=None,
|
||||
TimeoutError) as error:
|
||||
logger.debug("IMAP error: {0}".format(error.__str__()))
|
||||
logger.debug("Reconnecting to IMAP")
|
||||
try:
|
||||
server.shutdown()
|
||||
except Exception as e:
|
||||
logger.debug(
|
||||
"Failed to log out: {0}".format(e.__str__()))
|
||||
if not ssl:
|
||||
logger.debug("Connecting to IMAP over plain text")
|
||||
server = imapclient.IMAPClient(host,
|
||||
@@ -1059,6 +1081,11 @@ def get_dmarc_reports_from_inbox(host=None,
|
||||
TimeoutError) as e:
|
||||
logger.debug("IMAP error: {0}".format(e.__str__()))
|
||||
logger.debug("Reconnecting to IMAP")
|
||||
try:
|
||||
server.shutdown()
|
||||
except Exception as e:
|
||||
logger.debug(
|
||||
"Failed to log out: {0}".format(e.__str__()))
|
||||
if not ssl:
|
||||
logger.debug("Connecting to IMAP over plain text")
|
||||
server = imapclient.IMAPClient(host,
|
||||
@@ -1096,6 +1123,11 @@ def get_dmarc_reports_from_inbox(host=None,
|
||||
logger.debug("IMAP error: {0}".format(
|
||||
error.__str__()))
|
||||
logger.debug("Reconnecting to IMAP")
|
||||
try:
|
||||
server.shutdown()
|
||||
except Exception as e:
|
||||
logger.debug("Failed to log out: {0}".format(
|
||||
e.__str__()))
|
||||
if not ssl:
|
||||
logger.debug(
|
||||
"Connecting to IMAP over plain text")
|
||||
@@ -1137,6 +1169,12 @@ def get_dmarc_reports_from_inbox(host=None,
|
||||
logger.debug("IMAP error: {0}".format(
|
||||
error.__str__()))
|
||||
logger.debug("Reconnecting to IMAP")
|
||||
try:
|
||||
server.shutdown()
|
||||
except Exception as e:
|
||||
logger.debug("Failed to "
|
||||
"disconnect: {0}".format(
|
||||
e.__str__()))
|
||||
if not ssl:
|
||||
logger.debug(
|
||||
"Connecting to IMAP over plain text")
|
||||
@@ -1175,6 +1213,11 @@ def get_dmarc_reports_from_inbox(host=None,
|
||||
results=results
|
||||
)
|
||||
|
||||
try:
|
||||
server.logout()
|
||||
except Exception as e:
|
||||
logger.debug("Failed to log out: {0}".format(e.__str__()))
|
||||
|
||||
return results
|
||||
except imapclient.exceptions.IMAPClientError as error:
|
||||
error = error.__str__().lstrip("b'").rstrip("'").rstrip(".")
|
||||
@@ -1502,6 +1545,10 @@ def watch_inbox(host, username, password, callback, port=None, ssl=True,
|
||||
error,
|
||||
sleep_minutes))
|
||||
logger.debug("Reconnecting watcher")
|
||||
try:
|
||||
server.logout()
|
||||
except Exception as e:
|
||||
logger.debug("Failed to log out: {0}".format(e.__str__()))
|
||||
server = imapclient.IMAPClient(host)
|
||||
server.login(username, password)
|
||||
server.select_folder(rf)
|
||||
@@ -1528,6 +1575,10 @@ def watch_inbox(host, username, password, callback, port=None, ssl=True,
|
||||
except ConnectionResetError:
|
||||
logger.debug("IMAP error: Connection reset")
|
||||
logger.debug("Reconnecting watcher")
|
||||
try:
|
||||
server.shutdown()
|
||||
except Exception as e:
|
||||
logger.debug("Failed to disconnect: {0}".format(e.__str__()))
|
||||
server = imapclient.IMAPClient(host)
|
||||
server.login(username, password)
|
||||
server.select_folder(rf)
|
||||
@@ -1546,6 +1597,10 @@ def watch_inbox(host, username, password, callback, port=None, ssl=True,
|
||||
except KeyError:
|
||||
logger.debug("IMAP error: Server returned unexpected result")
|
||||
logger.debug("Reconnecting watcher")
|
||||
try:
|
||||
server.logout()
|
||||
except Exception as e:
|
||||
logger.debug("Failed to log out: {0}".format(e.__str__()))
|
||||
server = imapclient.IMAPClient(host)
|
||||
server.login(username, password)
|
||||
server.select_folder(rf)
|
||||
@@ -1572,6 +1627,10 @@ def watch_inbox(host, username, password, callback, port=None, ssl=True,
|
||||
except BrokenPipeError:
|
||||
logger.debug("IMAP error: Broken pipe")
|
||||
logger.debug("Reconnecting watcher")
|
||||
try:
|
||||
server.shutdown()
|
||||
except Exception as e:
|
||||
logger.debug("Failed to disconnect: {0}".format(e.__str__()))
|
||||
server = imapclient.IMAPClient(host)
|
||||
server.login(username, password)
|
||||
server.select_folder(rf)
|
||||
@@ -1638,6 +1697,11 @@ def watch_inbox(host, username, password, callback, port=None, ssl=True,
|
||||
error,
|
||||
sleep_minutes))
|
||||
logger.debug("Reconnecting watcher")
|
||||
try:
|
||||
server.logout()
|
||||
except Exception as e:
|
||||
logger.debug("Failed to disconnect: {0}".format(
|
||||
e.__str__()))
|
||||
server = imapclient.IMAPClient(host)
|
||||
server.login(username, password)
|
||||
server.select_folder(rf)
|
||||
@@ -1662,6 +1726,10 @@ def watch_inbox(host, username, password, callback, port=None, ssl=True,
|
||||
except (KeyError, socket.error, BrokenPipeError, ConnectionResetError):
|
||||
logger.debug("IMAP error: Connection reset")
|
||||
logger.debug("Reconnecting watcher")
|
||||
try:
|
||||
server.logout()
|
||||
except Exception as e:
|
||||
logger.debug("Failed to disconnect: {0}".format(e.__str__()))
|
||||
server = imapclient.IMAPClient(host)
|
||||
server.login(username, password)
|
||||
server.select_folder(rf)
|
||||
@@ -1680,6 +1748,10 @@ def watch_inbox(host, username, password, callback, port=None, ssl=True,
|
||||
except KeyError:
|
||||
logger.debug("IMAP error: Server returned unexpected result")
|
||||
logger.debug("Reconnecting watcher")
|
||||
try:
|
||||
server.logout()
|
||||
except Exception as e:
|
||||
logger.debug("Failed to log out: {0}".format(e.__str__()))
|
||||
server = imapclient.IMAPClient(host)
|
||||
server.login(username, password)
|
||||
server.select_folder(rf)
|
||||
@@ -1706,6 +1778,10 @@ def watch_inbox(host, username, password, callback, port=None, ssl=True,
|
||||
except BrokenPipeError:
|
||||
logger.debug("IMAP error: Broken pipe")
|
||||
logger.debug("Reconnecting watcher")
|
||||
try:
|
||||
server.shutdown()
|
||||
except Exception as e:
|
||||
logger.debug("Failed to disconnect: {0}".format(e.__str__()))
|
||||
server = imapclient.IMAPClient(host)
|
||||
server.login(username, password)
|
||||
server.select_folder(rf)
|
||||
|
||||
Reference in New Issue
Block a user