Added better IMAP handling
This commit is contained in:
+27
-2
@@ -22,7 +22,10 @@ def load_processed_emails():
|
|||||||
if os.path.exists(CACHE_FILE):
|
if os.path.exists(CACHE_FILE):
|
||||||
try:
|
try:
|
||||||
with open(CACHE_FILE, "r") as f:
|
with open(CACHE_FILE, "r") as f:
|
||||||
return json.load(f)
|
processed_emails = json.load(f)
|
||||||
|
# Clean up emails older than 7 days
|
||||||
|
processed_emails = cleanup_old_entries(processed_emails)
|
||||||
|
return processed_emails
|
||||||
except json.JSONDecodeError:
|
except json.JSONDecodeError:
|
||||||
logger.warning("Failed to decode JSON, resetting processed emails cache.")
|
logger.warning("Failed to decode JSON, resetting processed emails cache.")
|
||||||
return {}
|
return {}
|
||||||
@@ -64,7 +67,7 @@ def pull_all_inboxes():
|
|||||||
delete_after_process=settings.imap1_delete_after_process,
|
delete_after_process=settings.imap1_delete_after_process,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Process Mailbox #2
|
# Process Mailbox #2 (Gmail)
|
||||||
check_and_pull_mailbox(
|
check_and_pull_mailbox(
|
||||||
mailbox_key="imap2",
|
mailbox_key="imap2",
|
||||||
host=settings.imap2_host,
|
host=settings.imap2_host,
|
||||||
@@ -175,6 +178,10 @@ def pull_inbox(
|
|||||||
processed_emails[msg_id] = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S")
|
processed_emails[msg_id] = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S")
|
||||||
save_processed_emails(cleanup_old_entries(processed_emails))
|
save_processed_emails(cleanup_old_entries(processed_emails))
|
||||||
|
|
||||||
|
# Mark the email as processed (either by star or label)
|
||||||
|
if has_attachment:
|
||||||
|
mark_as_processed_with_label(mail, num, label="Ingested") # Or use mark_as_processed_with_star()
|
||||||
|
|
||||||
# Handle deletion or unread restoration
|
# Handle deletion or unread restoration
|
||||||
if delete_after_process:
|
if delete_after_process:
|
||||||
logger.info(f"Deleting message {num.decode()} from {mailbox_key}")
|
logger.info(f"Deleting message {num.decode()} from {mailbox_key}")
|
||||||
@@ -229,3 +236,21 @@ def fetch_attachments_and_enqueue(email_message):
|
|||||||
upload_to_s3.delay(file_path)
|
upload_to_s3.delay(file_path)
|
||||||
|
|
||||||
return has_attachment
|
return has_attachment
|
||||||
|
|
||||||
|
|
||||||
|
def mark_as_processed_with_star(mail, msg_id):
|
||||||
|
"""Mark email as processed using a star in Gmail."""
|
||||||
|
try:
|
||||||
|
mail.store(msg_id, '+FLAGS', '\\Flagged') # This sets the "Starred" status for Gmail
|
||||||
|
logger.info(f"Email {msg_id} has been starred and marked as ingested.")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Failed to mark email {msg_id} with star: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
def mark_as_processed_with_label(mail, msg_id, label="Ingested"):
|
||||||
|
"""Mark email as processed by adding a custom label in Gmail."""
|
||||||
|
try:
|
||||||
|
mail.store(msg_id, '+X-GM-LABELS', label) # Add custom label 'Ingested'
|
||||||
|
logger.info(f"Email {msg_id} has been labeled with '{label}' and marked as ingested.")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Failed to mark email {msg_id} with label {label}: {e}")
|
||||||
|
|||||||
Reference in New Issue
Block a user