Untitled

 avatar
unknown
plain_text
6 months ago
5.0 kB
4
Indexable
Accessi Effettuati:
fra
fra@gmail.com
Motivazione Visita: fra
Exception in thread Thread-1 (monitor_log):
Traceback (most recent call last):
  File "C:\Users\Fast Charge\AppData\Local\Programs\Python\Python313\Lib\threading.py", line 1041, in _bootstrap_inner
    self.run()
    ~~~~~~~~^^
  File "C:\Users\Fast Charge\AppData\Local\Programs\Python\Python313\Lib\threading.py", line 992, in run
    self._target(*self._args, **self._kwargs)
    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Fast Charge\Desktop\fastcharge-login-interface-main\fastcharge-login-interface-main\monitoraccessi.py", line 93, in monitor_log
    invia_email(log_data)
    ~~~~~~~~~~~^^^^^^^^^^
  File "C:\Users\Fast Charge\Desktop\fastcharge-login-interface-main\fastcharge-login-interface-main\monitoraccessi.py", line 42, in invia_email
    message["To"] = receiver_email
                    ^^^^^^^^^^^^^^
UnboundLocalError: cannot access local variable 'receiver_email' where it is not associated with a value
"""
Module Name: monitoraccessi
Description: This module checks if accessi.txt file contains data 
            and it sends to the RECEIVER_EMAIL address.
Author: Francesco Zompanti
"""
from datetime import date
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import os
import time
from dotenv import load_dotenv

# Carica la password per l'app Google, altrimenti non funziona il codice e non viene inviata la mail
load_dotenv()

# Configurazione del file di log e timer
LOG_FILE_PATH = "resources/log/accessi.txt"  # Percorso del file di log
EMAIL_INTERVAL = 1 * 60  # 15 minuti in secondi
MAX_FILE_SIZE = 1024  # Dimensione massima del file di log in byte prima dell'invio dell'email

def invia_email(data):
    """
    Invia un'email con i dati del file di log.
    """
    # Metodo Account Google (commentare per non utilizzare questo metodo)
    #sender_email = os.getenv("SENDER_EMAIL")
    #receiver_email = os.getenv("RECEIVER_EMAIL")
    #password = os.getenv("EMAIL_APP_PASSWORD")

    # Metodo Aruba (togliere hashtag per utilizzare Aruba)
    sender_email = os.getenv("SENDER_EMAIL")
    receiver_emails = os.getenv("RECEIVER_EMAIL").split(",")
    password = os.getenv("SENDER_PASSWORD")

    # Crea l'oggetto MIMEMultipart
    message = MIMEMultipart("alternative")
    today = date.today().strftime("%d/%m/%Y")
    message["Subject"] = f"Accessi FastCharge {today}"
    message["From"] = sender_email
    message["To"] = receiver_email

    # Corpo dell'email
    text = f"{data}"
    part1 = MIMEText(text, "plain")
    message.attach(part1)

    try:
        # Connessione al server SMTP di Gmail (commentare per non utilizzare questo metodo)
        # server = smtplib.SMTP("smtp.gmail.com", 587)
        # server.starttls()
        # server.login(sender_email, password)

        # Connessione al server SMTP di Aruba (togliere hashtag per utilizzare Aruba e sostituire nomedominio ed estensione)
        server = smtplib.SMTP("smtp.fceitalia.it", 587)
        server.starttls()
        server.login(sender_email, password)

        for receiver_email in receiver_emails:
            message["To"] = receiver_email.strip()
            # Invio dell'email (unico)
            server.sendmail(sender_email, receiver_email.strip(), message.as_string())
            print(f"Email inviata con successo all'indirizzo {receiver_email.strip()}!")

    except (smtplib.SMTPException, ConnectionError) as e:
        print(f"Errore durante l'invio dell'email: {e}")

    finally:
        server.quit()

def monitor_log():
    """
    Monitora il file di log e invia un'email ogni 15 minuti 
    o quando il file raggiunge la dimensione massima.
    """
    last_email_time = time.time()

    while True:
        current_time = time.time()
        time_since_last_email = current_time - last_email_time

        # Controlla se il file di log esiste e contiene dati
        if os.path.exists(LOG_FILE_PATH) and os.path.getsize(LOG_FILE_PATH) > 0:
            # Se il file supera la dimensione massima o sono passati 15 minuti, invia un'email
            if (os.path.getsize(LOG_FILE_PATH) >= MAX_FILE_SIZE or
                time_since_last_email >= EMAIL_INTERVAL):
                # Leggi i dati dal file di log
                with open(LOG_FILE_PATH, "r", encoding='utf-8') as file:
                    log_data = file.read()

                # Invia l'email con i dati accumulati
                invia_email(log_data)

                # Svuota il file di log dopo l'invio
                with open(LOG_FILE_PATH, "w", encoding='utf-8') as file:
                    file.write("")

                # Aggiorna il tempo dell'ultimo invio email
                last_email_time = current_time

        # Attendi prima di ricontrollare
        time.sleep(5)

if __name__ == "__main__":
    monitor_log()
Editor is loading...
Leave a Comment