python-tools/gmail/email_count.py

68 lines
2.4 KiB
Python

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"))
# using zip()
# to convert lists to dictionary
accounts = dict(zip(EMAIL_ACCOUNTS, EMAIL_PASSWORDS))
# print(accounts)
# Influx DB
client = influxdb_client.InfluxDBClient(
url=os.environ.get('DB_URL'),
token=os.environ.get('DB_TOKEN'),
org=os.environ.get('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)