import os import imaplib import json from time import strftime import influxdb_client from influxdb_client.client.write_api import SYNCHRONOUS from dotenv import load_dotenv, dotenv_values load_dotenv() dotenv_file = os.path.realpath(os.path.dirname(__file__)) + "/.env" config = dotenv_values(dotenv_file) EMAIL_ACCOUNTS = json.loads(os.environ.get("MAIL_ACCOUNTS")) EMAIL_PASSWORDS = json.loads(os.environ.get("MAIL_PASSWORDS")) # print() # print(config['DB_URL']) # print() # using zip() # to convert lists to dictionary accounts = dict(zip(EMAIL_ACCOUNTS, EMAIL_PASSWORDS)) # print(accounts) # Influx DB client = influxdb_client.InfluxDBClient( url=config['DB_URL'], token=config['DB_TOKEN'], org=config['DB_ORG'] ) ################ IMAP SSL ############################## for account in accounts: with imaplib.IMAP4_SSL(host="imap.gmail.com", port=imaplib.IMAP4_SSL_PORT) as imap_ssl: print("Connection Object : {}".format(imap_ssl)) print("Logging into mailbox...") try: resp_code, response = imap_ssl.login(account, accounts[account]) except Exception as e: print("ErrorType : {}, Error : {}".format(type(e).__name__, e)) resp_code, response = None, None print("Response Code : {}".format(resp_code)) print("Response : {}\n".format(response[0].decode())) imap_ssl.select('inbox') resp_code, messages = imap_ssl.search(None, 'UnSeen') if resp_code == 'OK': if len(messages[0].split()) > 0: # print('True') # print(messages[0].split()) unread_messages = len(messages[0].split()) else: print('False') ############### Logout of Mailbox ###################### print("\nLogging Out....") imap_ssl.close() if unread_messages: message = f"{account} has {unread_messages} messages." date = strftime("%Y-%m-%d") time = strftime("%H:%M:%S") timestamp = date + "T" + time + "Z" write_api = client.write_api(write_options=SYNCHRONOUS) point = influxdb_client.Point("unread_emails").time(timestamp).tag("account", account)\ .field("count", unread_messages) write_api.write(bucket="personal_data", org=config['DB_ORG'], record=point) print(message) print( f"File location using __file__ variable: {os.path.realpath(os.path.dirname(__file__))}")