REGEX = r'SDS_ILS_BEGINN(#D#Leitstelle:\s+)(.*)(m|o|i)(RTW|NAW|KTW) (.*) \$GPSN(.*)E(.*)SDS_ILS_ENDE' from dotenv import load_dotenv import requests import imaplib import email from email.header import decode_header import os import time 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) DRAEGER_API_KEY = os.environ.get("DRAEGER_API_KEY", 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, 'UNSEEN 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') from_ = msg.get("From") print(f'Neue E-Mail von {from_} mit Betreff: {subject}') 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) r = requests.post('https://einsatzmeldesystem.de/ems/inbound/deployment/universal/', json=get_draeger_json(pdf_text)) print(r.status_code) print(r.json()) mail.logout() except Exception as e: print(f'Fehler: {e}') if __name__ == "__main__": # send_email("Test", "Test") while True: print("Loop") check_email() time.sleep(CHECK_INTERVAL)