Untitled
unknown
plain_text
a year ago
5.0 kB
6
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