From c80721e33e56cbc0f8dcbc6b7157a5ad5c50288d Mon Sep 17 00:00:00 2001 From: Santi Date: Tue, 4 Feb 2025 18:30:45 +0100 Subject: [PATCH] Correos funcional correctamente --- app/main.py | 21 +++--- correo_server/EmailTab.py | 64 +++++------------- correo_server/MailClient.py | 38 ++--------- .../__pycache__/EmailTab.cpython-313.pyc | Bin 6637 -> 4248 bytes .../__pycache__/MailClient.cpython-313.pyc | Bin 3120 -> 1509 bytes 5 files changed, 32 insertions(+), 91 deletions(-) diff --git a/app/main.py b/app/main.py index 5c65050..cf9877c 100644 --- a/app/main.py +++ b/app/main.py @@ -18,19 +18,16 @@ from solapas.SQLQueryExecutor import SQLQueryExecutor from solapas.TicTacToe import TicTacToe from solapas.WebScraperToDB import WebScraperToDB + # Configuración del servidor de correos -smtp_server = "192.168.120.103" -smtp_port = 465 -imap_server = "192.168.120.103" -imap_port = 993 -username = "tu_usuario@psp.ieslamar.org" -password = "tu_contraseña" +SMTP_SERVER = "192.168.120.103" +SMTP_PORT = 587 # Usar SSL para mayor seguridad # Clave de API de OpenWeatherMap API_KEY = "1fa8fd05b650773bbc3f2130657e808a" # Crear cliente de correo -mail_client = MailClient(smtp_server, smtp_port, imap_server, imap_port, username, password) +mail_client = MailClient(SMTP_SERVER, SMTP_PORT) def update_time(status_bar): """Función que actualiza la hora y el día de la semana en un label""" @@ -154,35 +151,35 @@ notebook.pack(fill="both", expand=True) # Crear la Solapa 1 y añadir el downloader tab1 = ttk.Frame(notebook) -notebook.add(tab1, text="Solapa 1", padding=4) +notebook.add(tab1, text="Downloader", padding=4) # Añadir el downloader a la Solapa 1 music_downloader = MusicDownloader(tab1) # Crear la Solapa 2 y añadir los gráficos tab2 = ttk.Frame(notebook) -notebook.add(tab2, text="Solapa 2", padding=4) +notebook.add(tab2, text="Graphics", padding=4) # Añadir los gráficos de economía mundial y Bitcoin a la Solapa 2 economy_bitcoin_chart = EconomyBitcoinChart(tab2) # Crear la Solapa 3 y añadir el Tic Tac Toe tab3 = ttk.Frame(notebook) -notebook.add(tab3, text="Solapa 3", padding=4) +notebook.add(tab3, text="Tic Tac Toe", padding=4) # Añadir el juego de Tic Tac Toe a la Solapa 3 tic_tac_toe = TicTacToe(tab3) # Crear la Solapa 4 y añadir el SQL Query Executor tab4 = ttk.Frame(notebook) -notebook.add(tab4, text="Solapa 4", padding=4) +notebook.add(tab4, text="SQL Querys", padding=4) # Añadir el ejecutor de consultas SQL a la Solapa 4 sql_query_executor = SQLQueryExecutor(tab4) # Crear la Solapa 5 y añadir el Web Scraper tab5 = ttk.Frame(notebook) -notebook.add(tab5, text="Solapa 5", padding=4) +notebook.add(tab5, text="Web Scraper", padding=4) # Añadir el widget de Web Scraper a la Solapa 5 web_scraper = WebScraperToDB(tab5) diff --git a/correo_server/EmailTab.py b/correo_server/EmailTab.py index 33bdacf..412550d 100644 --- a/correo_server/EmailTab.py +++ b/correo_server/EmailTab.py @@ -3,14 +3,14 @@ from tkinter import ttk, messagebox import threading class MailTab: - def __init__(self, notebook, mail_client): + def __init__(self, parent, 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 + # Crear el frame de la pestaña + self.frame = ttk.Frame(parent) + parent.add(self.frame, text="Correo") - # Campos de entrada para credenciales + # Campos de entrada para enviar correo 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) @@ -19,62 +19,30 @@ class MailTab: 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") + ttk.Label(self.frame, text="Destinatario:").grid(row=2, column=0, sticky="e", padx=5, pady=5) self.recipient_entry = ttk.Entry(self.frame, width=40) - self.recipient_entry.grid(row=3, column=1, padx=5, pady=5) + self.recipient_entry.grid(row=2, column=1, padx=5, pady=5) - ttk.Label(self.frame, text="Asunto:").grid(row=4, column=0, padx=5, pady=5, sticky="e") + ttk.Label(self.frame, text="Asunto:").grid(row=3, column=0, sticky="e", padx=5, pady=5) self.subject_entry = ttk.Entry(self.frame, width=40) - self.subject_entry.grid(row=4, column=1, padx=5, pady=5) + self.subject_entry.grid(row=3, column=1, padx=5, pady=5) - ttk.Label(self.frame, text="Mensaje:").grid(row=5, column=0, padx=5, pady=5, sticky="ne") + ttk.Label(self.frame, text="Mensaje:").grid(row=4, column=0, sticky="ne", padx=5, pady=5) self.body_text = tk.Text(self.frame, width=50, height=10) - self.body_text.grid(row=5, column=1, padx=5, pady=5) + self.body_text.grid(row=4, 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") + self.send_button.grid(row=5, column=1, padx=5, pady=5, sticky="e") def send_email_thread(self): threading.Thread(target=self.send_email).start() def send_email(self): + sender_email = self.entry_email.get() + sender_password = self.entry_password.get() 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) + + result = self.mail_client.send_email(sender_email, sender_password, 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}") diff --git a/correo_server/MailClient.py b/correo_server/MailClient.py index ead2e55..3e731d5 100644 --- a/correo_server/MailClient.py +++ b/correo_server/MailClient.py @@ -1,41 +1,17 @@ import smtplib -import imaplib class MailClient: - def __init__(self, smtp_server, smtp_port, imap_server, imap_port, username, password): + def __init__(self, smtp_server, smtp_port): self.smtp_server = smtp_server self.smtp_port = smtp_port - self.imap_server = imap_server - self.imap_port = imap_port - self.username = username - self.password = password - def send_email(self, recipient, subject, body): - """Envía un correo utilizando el servidor SMTP.""" + def send_email(self, sender_email, sender_password, recipient, subject, body): + """Envía un correo utilizando el servidor SMTP con SSL.""" try: - with smtplib.SMTP_SSL(self.smtp_server, self.smtp_port) as server: - server.login(self.username, self.password) - message = f"Subject: {subject}\\n\\n{body}" - server.sendmail(self.username, recipient, message) + with smtplib.SMTP(self.smtp_server, self.smtp_port) as server: + server.login(sender_email, sender_password) + message = f"Subject: {subject}\n\n{body}" + server.sendmail(sender_email, recipient, message) return "Correo enviado correctamente" except Exception as e: return f"Error al enviar el correo: {str(e)}" - - def fetch_emails(self): - """Obtiene los correos más recientes utilizando el servidor IMAP.""" - try: - with imaplib.IMAP4_SSL(self.imap_server, self.imap_port) as server: - server.login(self.username, self.password) - server.select("inbox") - status, messages = server.search(None, "ALL") - email_ids = messages[0].split() - emails = [] - - for email_id in email_ids[-5:]: # Obtener los últimos 5 correos - status, msg_data = server.fetch(email_id, "(RFC822)") - for response_part in msg_data: - if isinstance(response_part, tuple): - emails.append(response_part[1].decode()) - return emails - except Exception as e: - return f"Error al recibir correos: {str(e)}" diff --git a/correo_server/__pycache__/EmailTab.cpython-313.pyc b/correo_server/__pycache__/EmailTab.cpython-313.pyc index 55a00126b79639ad54ed3b8ec52c2864aa356692..90aea5cb41dae641b3404fcde3c548740ae8bb47 100644 GIT binary patch delta 1214 zcmYLJO>7%Q6y6{2kJmrRZf&n)lhhW(?vgmfO;WIhDg~tqB}!23hPtFxyRo;aOS~J+ zu3Hfyg#$&dQ~_a-k`t;Bha7rAoH-ykaH(WBRF1Yt^co2yl!AJMd28H0OP}9+^Ua&_ z_l^AL)NVTbG!&935|d}XS^GiU4&SCT+h2|HNLb@FVY~ARbCdh-**t?kqQ|*`GE-o% z%tq-!{1d&{+X$PNsZs?0%VbGk=T(m@Kj$hQHvl{c!i{-crO(BTZ$yojdGZkoT#8zW z_m~t_N?=(S6Jlkx951kVo_igC?TgbR(B+26q!j*9h~O+g8{o=G*tm<~FQA4s=Po+amh zOdTXMzl!m{c`7!vbMecIyEpfvnU?RabRdR5m+nYkOz#x8i}&7cNgXkVKMDNIhyi>z zI3%{uoo}yPYFF|7V1=J*FTdBmjHOV8pKD*Jw6Eanp(guKd@Ev)C9>sfdCOJbIRaonXKoZd9>3w`C@8Hj(ewxLpn2H<9F{n5n z5nRGs;SByGdIFz{MW8#+k*?C8@#4D_eUbOGic*;)n(TV2W3fyP5@{C;{dM`aM?3Ub1r8)sJ?-Y zL$?S3HoKyI-MUpbuUVSl>Ei}%!>k$TiqY88>+9~o|K)~m+qW!KbN$Gu);H?JOINU) zt2d0Q#GwmkW42PT-ClufII~?*;TV0HQQCk zI_lWInrj6k2Z@nxBG*aex`})zk>5{DwFdB`V+)s`$kDEx?#St`Jl>JV_b&Z%wtcm> zFB>iXH&N+|$%kTccVRE~NSs7qtS0uv0I7N^r6KdA@br2ON)T;H6Y+!islXI8CIE_f zcxZSFru2Rc4;cXXW`otAQb)`%w?H4Arn$mDyvXIfLp_qlyMpsU-E<7(S%Kh5dCH?V zAoHfZ3)%A%T=C6@Rco#rr_njG0B_Px!+*eEEKSposmSlt%a5tSXTC8ye?$@Rw*CjT C6dvjT delta 3021 zcmZ`*T}&I<6`rv@_ShbSf5Bj4hQ)!{rDOvp1@@0X$ZkTD4W3v@)@f5?55!qBhCAbI zmZ~LM?MAe!lw_w>(mZsDv{i|;Qd0FLZ%udmkVg+B9W+5*t&~3SP-#V4_3x$UjP1Zi z*^Bkfz2|=S+@Evqce&B=_x^^b9*>KHa`!*CW-d2eYxsyBy!Ol8;Z}+`1Un!rH~^gj zOI$O~xa-;rJB^QtU>>fHBA*c^oIq^Vf6~r?ePgN z!47|n;2&btFKs6swU+u5>zKz=Wt;p~;J=~vSbLa|U>UNgx0sN-NwC#NBVYZ1NzzSf z$U4R}*Etb;jT6Qhcq$XE`%LlAmf0e-3K2D6Kj3o@*??nt#@XIV8>~6Dy_GV{*#+RC=4jKH+0KzRF~(l2PAuow9dSQbOg7`de3dQDcvQi}sg3Ie+u~O7KqW z?bgchL?wM%PtR)bi%PhNh`ES}#zu6O*I0gea%KMR{Jr@HfeN;dK8f<%jeoCqB?iRX1J-~f9_wSvk&1^8J?q%wI{Muy=HE|3?_LR z05Z=T)V;js<#lgN^TyV^T}w=AJ(G7Ony-6> zS@R7p+5hVHZE#IG*S^ZNSNQ(Q!0|`i4Gs9Cp>o$STuxgfWQ-9=fs)P1`I>$N3 zLHAP)^#R-86vphia>}2!4xm3Mk}ZQ`VU`rCaL^`L(l+&phhKCPJR~xPun!@L&<9{x z$B!K}7+E2OxoW)L#x6W`au5Jy#|)1XVqBOjh>~JB!D&^lNZvjijePNJl zM}R&Ie?3ZaP?Yjjsd*L2Wq?bRy45g|*b#>w&DXPX`hIZDcWBAJ!TNPJvdTtoOsq6L zVqdPF`68Ksp^!00;X{rA7~D=BBdDBY5@2UMzK6U>eK9-vHQmEwk=p?-Q5&pJXTz&( zc-f}&`!x8meN`!W#150L5g>gdo~YMmJbwdG{uLF)cbZav%IzJaGk7LuNz)lrd$ZIp z;t!B7sv|9`9)GX5|0!D!=Xg8JOwjF@nZan{e14Py@L7Y+vMad%Y;@H|1izYAz8 zcNezzBE%2|5lji$k2RE#V{x~7vvGgx>u4|~egJExdf<&CXVk}yyB0^VYAQEg0fK<{ zLhb~(Ol?{AFvsbw6SRXlL~r?NW@yXKF#EO|Xy%oF+FeYNi~!FZ6}KA>FN&o-= diff --git a/correo_server/__pycache__/MailClient.cpython-313.pyc b/correo_server/__pycache__/MailClient.cpython-313.pyc index d1a239afdc8b1024e4eaaec79e21f82b448cff16..9087a6e46f263b8bc342da30ffdbbcefacf91732 100644 GIT binary patch delta 877 zcmYLHO-vI(6rS1t-L~5n4OA?!;V;=3ARr}L1uR4pgCKEjQlpWScH2~!ZJjM@hz8=p zgT}s*6{uA1b*&;U&#Igw&87>+v{BH_ z@-G@QG6Xy!QN%uoVps>Mkl}eiN->~kLy*_``3x_p|`GV;PmTqR3@Gu@wU(78smZ!5ob<88J&TJ7IyKl_p=-e4uT<^R}L4<#CH zu|pBGT!6db$*(zA=uB4|Ukjd>xO-iXgJ>h-{1tWF0Ir#iwAOqS&54 zg2={^OC%hekc{&mzn5tLb2!5JrDAs3&?itIc92P1Eg1G_2;ny%A2KqG?*j~O%wKBW ByFCB^ literal 3120 zcmcImO>7&-6`tjCmt2~Z$SAU9NwHTywnMqH9XUcRDNaj?HXOuM6s-x!kdp0+Trq2` zcG;PwYY907IrNmG^1-ML6o`x-tQ?Foh=JtT+CJoHMM^|$awyP~Z?2WXKzwlD+vSps zk@VEgl5gL>dW@8d)HeQwR+y9Ocmi4J$lQK?wsD6@f-d zVmji+a++aInTBpT4>6Vk1lVXeB@h4I^FXeVxun?`nv>07LNa&4tOrNP+^vr z87z;?{l*jmd5NUC>9pwXVarZgWjejAQ&;jjWt%$g9%ET+%Ds*!k5)j}(w22MTGkl* zolT3df-uv~C5mCwC=v+?ZaCe8Bo2h(sO&fQ;?(#;9vra+rdf`$Ftbv4Pov8-)V`z_ z9JT<=3NZFr!_rLX6m(`Y1%fmRhRqfVHl?~p8p~?W*nX|ER5%?UFxA)Vkz9Bz8fI6dIcc9TEQCQIuiZuaN^}9#yDLoVk-ZIHitzKxs= zTLSoQe@+>?Kka+2bF`jFGOSkN@o9Q4h5N`a2-Xa?BJ9ahNG1n~3{Qza%^xI7TpyWF z`s0K|h}K1j1$jT;5yIbm`ACE~jH|1na{z7TqYiR~6-aGv{5wv`dE7On5iSbgQ@w zrR_>*t`zjLW7w9%Ln89G~Xy(z|7*dKv>Kpur7()f3&uANlhSE;`B!JYn*&Hj;U_Vejar?*p6 zf4f{u?)_8zYW(_zkKeiR&PMjHxleN2$?;n6q4m=G#f_!vh3eS{-4kmO)N8-mz8=1n zxS7~k*-lQ@_KiM~$O~C+CpGm=YU=6tF_PTBOE_t~)_LMiNA>N`_Ew`0I>x?^k3D_F zgZKwF0Wp1ebh3lo&cr7}{NKl-z~2qUCX}GZqx{{M5|bzRyF(oECj_8{ zdd`3sOsjfTE848 zyBm0fZWj$2%mr|iawGUzMmUnt=c^tbHNU)gwk>D`kYWN7BD83<@SZC$Fm+sENq3+Z zGnip9N3#mLD>#+1sk@?9E(5^0Vo@*HMV;c=Q#|x^%!4o53p}`UG^fJcXdS7TD|v{d z8b#)c9t(qk2-H|fEozSDCaBKJw#9U{tWk&J=`j4f)vpNf@=-4C1?a;ZbN992TdwH)&4H8E3!lIH>ATyh?3d!tARXXZ;%ef0X*+qiHjut` z`sV5Ci`B~3!0FATye8Iq2iM=e@#aqN@MiDuR`2mOskXmoP5g(P-ss;L_)FW`x!RH8 zTkqd|zk2SAOIt_Y*nDwt?d-SdSFR_%>p8T(d?&xtGqKe(QS0shICmqrG5iI$IW)dA zl-V50Yz<9))0^ED$k52Y1k!i>QH*pQc(R|oa0U=H3%{q|ch?bhtk!w_4qwfDCT?7L z&~fVP_$d!j$9`ZLSo?=ZvvG2JvU6&Jzb76=`icaSdlRv&6uB?(z~7fV8jod<@%Q&8 zvT6SQ0Ec{90Gby4OPiNOc&qSlbKboUFLKlADBiE|`Um%`n5r(@#fpi1TvdNt(aict zyQ(f3lsTqh>6Wdk6tRvTMDj}@Zl|hZ+86~@a~x_cR-jx|^%Fu7@w{WFcyICuG7ROv zCyzs-(Dyhg3FH6Xn-a!+Z5&VY6w#03t=qQ**l6+QMql$IeVt