81 lines
3.6 KiB
Python
81 lines
3.6 KiB
Python
import tkinter as tk
|
|
from tkinter import ttk, messagebox
|
|
import threading
|
|
|
|
class MailTab:
|
|
def __init__(self, notebook, mail_client):
|
|
self.mail_client = mail_client
|
|
|
|
# Crear el frame de la pestaña dentro del Notebook
|
|
self.frame = ttk.Frame(notebook)
|
|
notebook.add(self.frame, text="Correo") # ← Ahora esto es correcto
|
|
|
|
# Campos de entrada para credenciales
|
|
ttk.Label(self.frame, text="Correo electrónico:").grid(row=0, column=0, sticky="e", padx=5, pady=5)
|
|
self.entry_email = ttk.Entry(self.frame, width=40)
|
|
self.entry_email.grid(row=0, column=1, padx=5, pady=5)
|
|
|
|
ttk.Label(self.frame, text="Contraseña:").grid(row=1, column=0, sticky="e", padx=5, pady=5)
|
|
self.entry_password = ttk.Entry(self.frame, show="*", width=40)
|
|
self.entry_password.grid(row=1, column=1, padx=5, pady=5)
|
|
|
|
self.login_button = ttk.Button(self.frame, text="Iniciar Sesión", command=self.login)
|
|
self.login_button.grid(row=2, column=1, padx=5, pady=5, sticky="e")
|
|
|
|
# Campos para enviar correo
|
|
ttk.Label(self.frame, text="Destinatario:").grid(row=3, column=0, padx=5, pady=5, sticky="e")
|
|
self.recipient_entry = ttk.Entry(self.frame, width=40)
|
|
self.recipient_entry.grid(row=3, column=1, padx=5, pady=5)
|
|
|
|
ttk.Label(self.frame, text="Asunto:").grid(row=4, column=0, padx=5, pady=5, sticky="e")
|
|
self.subject_entry = ttk.Entry(self.frame, width=40)
|
|
self.subject_entry.grid(row=4, column=1, padx=5, pady=5)
|
|
|
|
ttk.Label(self.frame, text="Mensaje:").grid(row=5, column=0, padx=5, pady=5, sticky="ne")
|
|
self.body_text = tk.Text(self.frame, width=50, height=10)
|
|
self.body_text.grid(row=5, column=1, padx=5, pady=5)
|
|
|
|
self.send_button = ttk.Button(self.frame, text="Enviar", command=self.send_email_thread)
|
|
self.send_button.grid(row=6, column=1, padx=5, pady=5, sticky="e")
|
|
|
|
# Widgets para recibir correos
|
|
self.receive_button = ttk.Button(self.frame, text="Recibir Correos", command=self.fetch_emails_thread)
|
|
self.receive_button.grid(row=7, column=1, padx=5, pady=5, sticky="e")
|
|
|
|
self.emails_listbox = tk.Listbox(self.frame, height=10, width=80)
|
|
self.emails_listbox.grid(row=8, column=0, columnspan=2, padx=5, pady=5)
|
|
|
|
def login(self):
|
|
email = self.entry_email.get()
|
|
password = self.entry_password.get()
|
|
result = self.mail_client.login(email, password)
|
|
if result:
|
|
messagebox.showinfo("Inicio de Sesión", "Inicio de sesión exitoso")
|
|
else:
|
|
messagebox.showerror("Error", "Credenciales incorrectas")
|
|
|
|
def send_email_thread(self):
|
|
threading.Thread(target=self.send_email).start()
|
|
|
|
def send_email(self):
|
|
recipient = self.recipient_entry.get()
|
|
subject = self.subject_entry.get()
|
|
body = self.body_text.get("1.0", tk.END).strip()
|
|
result = self.mail_client.send_email(recipient, subject, body)
|
|
messagebox.showinfo("Resultado", result)
|
|
|
|
def fetch_emails_thread(self):
|
|
threading.Thread(target=self.fetch_emails).start()
|
|
|
|
def fetch_emails(self):
|
|
try:
|
|
result = self.mail_client.fetch_emails()
|
|
if isinstance(result, list):
|
|
self.emails_listbox.delete(0, tk.END)
|
|
for email in result:
|
|
self.emails_listbox.insert(tk.END, email[:100]) # Mostrar los primeros 100 caracteres
|
|
else:
|
|
messagebox.showerror("Error", result)
|
|
except Exception as e:
|
|
print(f"Error al recibir correos: {e}")
|