download gpx file attachments

This commit is contained in:
Riccardo Berto 2021-02-24 10:13:54 +01:00
parent 184e13b698
commit 8868421671

25
main.py
View File

@ -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
pass