From 82f885466e9faeb56500bcc2ea643953a89bdf0f Mon Sep 17 00:00:00 2001 From: Fred Boniface Date: Fri, 16 Feb 2024 22:01:27 +0000 Subject: [PATCH] Add IMAP Connector --- .gitignore | 2 ++ src/imap_connector.py | 44 +++++++++++++++++++++++++++++++++++++++ src/owlboard_connector.py | 7 ++++++- 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/imap_connector.py diff --git a/.gitignore b/.gitignore index acaeaa9..3f0479e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +env_conf + # ---> Python # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/src/imap_connector.py b/src/imap_connector.py new file mode 100644 index 0000000..5357257 --- /dev/null +++ b/src/imap_connector.py @@ -0,0 +1,44 @@ +import imaplib, email, os + +class IMAPConnector: + _instance = None + + def __new__(cls, *args, **kwargs): + if not cls._instance: + cls._instance = super().__new__(cls) + return cls._instance + + def __init__(self): + if not hasattr(self, 'imap_connection'): + IMAP_SERVER = os.environ.get('DGP_EML_HOST') + IMAP_USER = os.environ.get('DGP_EML_USER') + IMAP_PASS = os.environ.get('DGP_EML_PASS') + + if not all([IMAP_SERVER, IMAP_USER, IMAP_PASS]): + raise ValueError("Please ensure DGP_EML_HOST, DGP_EML_USER and DGP_EML_PASS are defined in the environment") + + self.imap_connection = imaplib.IMAP4_SSL(IMAP_SERVER) + self.imap_connection.login(IMAP_USER, IMAP_PASS) + self.imap_connection.select('INBOX') + + def fetch_filtered_emails(self, sender_email): + filtered_emails = [] + result, data = self.imap_connection.search(None, f'(FROM "{sender_email}")') + if result == 'OK': + for num in data[0].split(): + result, email_data = self.imap_connection.fetch(num, '(RFC822)') + if result == 'OK': + raw_email = email_data[0][1] + email_message = email.message_from_bytes(raw_email) + filtered_emails.append(email_message) + return filtered_emails + + + def delete_emails_from_sender(self, sender_email): + result, data = self.imap_connection.search(None, f'(FROM "{sender_email}")') + if result == 'OK': + for num in data[0].split(): + self.imap_connection.store(num, '+FLAGS', '\\Deleted') + self.imap_connection.expunge() + print(f"All messages from {sender_email} deleted successfully") + diff --git a/src/owlboard_connector.py b/src/owlboard_connector.py index 6be9226..8f098bd 100644 --- a/src/owlboard_connector.py +++ b/src/owlboard_connector.py @@ -2,4 +2,9 @@ ### AUTHENTICATION MUST BE COMPLETED, REGISTERING FOR THE API IF NECCESSARY ### THIS NEGATES THE ABILITY TO USE LOCAL MODE - MAILBOX MODE ONLY AS -### MAILBOX ACCESS IS NEEDED FOR REGISTRATION \ No newline at end of file +### MAILBOX ACCESS IS NEEDED FOR REGISTRATION + +from imap_connector import IMAPConnector + +imap_connector = IMAPConnector() +imap_connector.fetch_filtered_emails("no-reply@owlboard.info") \ No newline at end of file