from dotenv import load_dotenv import imaplib import email from email.header import decode_header import os from logger import logging from helpers import get_draeger_json, read_pdf load_dotenv(override=True) # Konfigurationsparameter IMAP_SERVER = os.environ.get("IMAP_SERVER", default=None) EMAIL_ACCOUNT = os.environ.get("EMAIL_ACCOUNT", default=None) EMAIL_PASSWORD = os.environ.get("EMAIL_PASSWORD", default=None) MAILBOX = os.environ.get("MAILBOX", default=None) CHECK_INTERVAL = int(os.environ.get("CHECK_INTERVAL", default=None)) # in Sekunden SAVE_FOLDER = os.environ.get("SAVE_FOLDER", default=None) def check_email(): try: mail = imaplib.IMAP4_SSL(IMAP_SERVER) mail.login(EMAIL_ACCOUNT, EMAIL_PASSWORD) mail.select(MAILBOX) status, messages = mail.search(None, '(SUBJECT "Nachricht von DLRG Stuttgart")') mail_ids = messages[0].split() for mail_id in mail_ids: status, msg_data = mail.fetch(mail_id, '(RFC822)') for response_part in msg_data: if isinstance(response_part, tuple): msg = email.message_from_bytes(response_part[1]) subject, encoding = decode_header(msg["Subject"])[0] if isinstance(subject, bytes): subject = subject.decode(encoding if encoding else 'utf-8') for part in msg.walk(): if part.get_content_maintype() == 'multipart': continue if part.get('Content-Disposition') is None: continue filename = part.get_filename() if filename: filepath = os.path.join(SAVE_FOLDER, filename) with open(filepath, 'wb') as f: f.write(part.get_payload(decode=True)) if filename.endswith('.pdf'): pdf_text = read_pdf(filepath).replace("\n", "") logging.info(get_draeger_json(pdf_text)) mail.logout() except Exception as e: logging.error(f'Fehler: {e}') if __name__ == "__main__": check_email()