diff --git a/main.py b/main.py index 41f01b7..042f072 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,8 @@ import configparser from imaplib import IMAP4 import ssl +import email +import os from sqlalchemy import create_engine @@ -11,6 +13,7 @@ config.read('config.ini') db = create_engine(f"postgresql://{config['db']['username']}:{config['db']['password']}@{config['db']['host']}/{config['db']['database']}").connect() mail = IMAP4(host=config['mail']['host']) +fitotrack_msg_filter = '(OR SUBJECT "fitotrack" SUBJECT "Fitotrack" SUBJECT "FITOTRACK")' def init_database(): @@ -19,9 +22,29 @@ def init_database(): def get_gpx_files_from_mail(): + try: + os.mkdir('gpx_files') + except FileExistsError: + pass mail.starttls(ssl.create_default_context()) mail.login(config['mail']['username'], config['mail']['password']) + mail.create(config['mail']['mailbox_dir']) + mail.select() + (resp, ids) = mail.search(None, fitotrack_msg_filter) + ids = ids[0].split() + for i in ids: + resp, fetched = mail.fetch(i, '(RFC822)') + email_message = email.message_from_bytes(fetched[0][1]) + for part in email_message.walk(): + if part.get_content_maintype() == 'multipart' or part.get_content_disposition() is None: + continue + filename = part.get_filename() + + if filename: + with open(os.path.join('gpx_files', filename), 'wb') as f: + f.write(part.get_payload(decode=True)) + mail.logout() @@ -34,4 +57,4 @@ if __name__ == '__main__': try: main() except (KeyboardInterrupt, EOFError): - pass \ No newline at end of file + pass