FinalProjectAndresGMoran/app/emailClient.py

60 lines
2.3 KiB
Python

# emailClient.py
import smtplib
import imaplib
import email
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import threading
class EmailClient:
def __init__(self):
self.server_ip = "192.168.120.103"
self.ports = {
"SMTP": 25,
"SMTP-S": 465,
"SMTP-SUBMISSION": 587,
"IMAP": 143,
"IMAP-S": 993
}
def enviar_correo(self, email_user, password, destinatario, asunto, mensaje):
def enviar():
try:
with smtplib.SMTP(self.server_ip, self.ports["SMTP"]) as smtp:
smtp.login(email_user, password)
msg = MIMEMultipart()
msg["From"] = email_user
msg["To"] = destinatario
msg["Subject"] = asunto
msg.attach(MIMEText(mensaje, "plain"))
smtp.sendmail(email_user, destinatario, msg.as_string())
print("Correo enviado correctamente.")
except Exception as e:
print(f"Error al enviar el correo: {e}")
thread = threading.Thread(target=enviar)
thread.start()
def recibir_correos(self, email_user, password, text_widget):
def recibir():
try:
with imaplib.IMAP4_SSL(self.server_ip, self.ports["IMAP-S"]) as mail:
mail.login(email_user, password)
mail.select("inbox")
status, mensajes_no_leidos = mail.search(None, 'UNSEEN')
no_leidos = mensajes_no_leidos[0].split()
text_widget.delete("1.0", "end")
text_widget.insert("end", f"Tienes {len(no_leidos)} correos no leídos.\n")
for num in no_leidos:
status, data = mail.fetch(num, '(RFC822)')
mensaje = email.message_from_bytes(data[0][1])
text_widget.insert("end", f"[NO LEÍDO] {mensaje['Subject']}\n")
mail.store(num, '+FLAGS', '\\Seen')
except Exception as e:
text_widget.insert("end", f"Error al recibir correos: {e}\n")
thread = threading.Thread(target=recibir)
thread.start()