From 99d111ed0167e65cc60487c4016d49eb2da45a31 Mon Sep 17 00:00:00 2001 From: DennisEckerskorn Date: Thu, 9 Jan 2025 19:34:32 +0100 Subject: [PATCH] Added some methods and mail config, compiles and mail count works fine --- .../__pycache__/email_client.cpython-312.pyc | Bin 0 -> 5238 bytes .../threads_manager.cpython-312.pyc | Bin 10048 -> 10883 bytes .../{EmailClient.py => email_client.py} | 44 ++++++++++++++---- src/services/threads_manager.py | 41 ++++++++++------ .../centered_window.cpython-312.pyc | Bin 17041 -> 17313 bytes src/ui/centered_window.py | 10 +++- 6 files changed, 73 insertions(+), 22 deletions(-) create mode 100644 src/services/__pycache__/email_client.cpython-312.pyc rename src/services/{EmailClient.py => email_client.py} (58%) diff --git a/src/services/__pycache__/email_client.cpython-312.pyc b/src/services/__pycache__/email_client.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c4b6ea36e6c8c30d75030b9d6b99b73f9e25cb5e GIT binary patch literal 5238 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 JWrETj{x5WuVZ{Id literal 0 HcmV?d00001 diff --git a/src/services/__pycache__/threads_manager.cpython-312.pyc b/src/services/__pycache__/threads_manager.cpython-312.pyc index 1c163e782be7854f99fc0d5d33f856b9aea85f0f..9f5ff8485efe92f3f07b14be272a6e3c0afdfe9e 100644 GIT binary patch delta 2840 zcmai0TWlQF89rw&d-Lvk?Y-ZeS=Kh$4fsNmlGwq8*dcWYi)lg|=YeIqGmgjX&aTeP zCfG9A(5Q*4s3bW>L26JhQiW(x733EhsVb#;sMMD%b+zu&sGt_9c|dXIf*^_;U8 zyP%eN_~*=j{>%4Y&VS~;%(tI$|IX!d0P?K0FP`WPUvP)u(F^xWGhCi82*(8o6rk{V zv0yoFVQV38E!d9RAmG43poph|V!6UmeE^QzXJN{Ei!L)MSZn*btZ2oFygaKS@@YGg zLvpFa*3P5TNR<^;KPnr~Us$^cdHhbNZ{ZHnyaeXqJjhZb?3w4t7i@khfP6LF0bp92 z{40$G*%g{Rv#q&m?tTepfysY~(EpH8;AIPOZfUyID9{!>v!ltMhgTZGkbQfTI}1`= zCWX&%`}a6%ZDlR1>4qumIko0g3$m8a=JJ}Vn>DvFYnW;wTPW(9Swx5@22eXCBEHQf z5;S(?CM3nz1VhbFArIwH?*^5Xa6i8ob<$6nkVUW>?L8~3*g~tZ?era9exH97?xPkn zDG_ZN!Rt$^K@nnYIDA1243FLcFTZ-@;LrF;OEmGLS?~ zi6x}zCX0YUM-jqp#8MMVdJ+-K)LtsWk}*VA z4-rC9;$Qg!Z2`)8fRMQ){&6VKYC=}1W6Og7ryK$Cv*6F62Tz6`a8W1>$KoQX^2N|F zJc0inj^MwAXr(RTH$NwFE<YO(Y)f3=z#+v^`SxdZi+GC=w5|qKNX8siIA^3|=YH zfS021A_QIp=J4B*w;H)CM!y4L8@>~}7Ne+GL$sh##@DFcPNEmY_qrVT(|9L5d9mvN zQGdLv&r;7fp6iN?vx782Rayz!f<>&K1nXlH8NheiqdeT?qG84z@kA}(<(9yV6Mr1_V%_e2 zNa4Q4 z*o|L_`tc*-!2omoHs5r81f+xva^m-s$ymL-&azIgt!%DX*3DKM;k(H_3*RTv7=wg- zwg`SCRHcE6G*FfHRiu6I9;--?SEY%HG_ji8eKmje*&B(mH6A3Mh8uuOL=bKIGMy`# zqBJef66Cu2g7%wbU6S*Xp`w!nJ=zQ@MNd_*-fUf3DRjJw0Giu|j);Xn`x#{fI8q~)iJC$@| z)sJRto;9xwb_}PCky}F0tiPFF z%7LDwHduk4#qafQTcG`0^BXAF#~MAS8hu9NHxUVRFY;e|X5+UpORvoOzX3yqsM!|M zyS9CWqEgPQBj_aAp!bQ9B!q+y;fJ98L(oR(Ct&bq0Hkk%o&U5P<6v|hP|B?Q2kDlh AlmGw# delta 2224 zcmah~U2GIp6ux(MXLs8D@9%84-ELbc%mPIeG9!TVcs39n%Z$9Z8i4S)9$<~2Jj3Ke{0jwncBqpAFciRGqI?0?l_ug~Q z`R;elJ@ek{Uq{^Ex?JT5o`XNV(|@dH(k)|Sa%E@~CoMge1WE`=Yf9`9F#_F^w59Al zcCK5KQmU+{jO${uJmu(daNU-4rd&NPj0Dt)682LlAzc=je}sD6Ijoe;Gc}@M)7d>h z)L24IcgOT07`qPSbVE(;%cM0U6DBZI-mMx$(>r4+6-Ls5IEiJmDqC^97E5TEu4F8y zlF4fyj+P=Y*T@d91>WC&1~G+3@Cb^6R(ui&MtE^#h>P0gk^-x2FMo`(MQw5Q-)2Uc z;r|)^w@m_HutD%8KpF#TTLfTu7PS$4xdb29rP3_jFYF1InT}yCs-<-!mX52YTjz8} zQ=Csi7%jxdgoVxsO#$YcctI$FY1P$aAE|(W&X}YXma$4V8@&l)49x~w$E~*{dHRZF z2j0$nL==%!!Pm5t;dEL{_nRVwB?b>*TCt){nvYrfMzjoqkYtNq|Tn*M0$Pydtl0F?$|tYz#8`w!94w(!2gT zdQ)xy+`r17K4o#q{{kKYi%pszcFwa>P|AwTGfGT}K{7Pp!;;P%HznO5eQd~2YKpNw zLnVagZwuR6O8%>$lTHvE@ZlXhNG+RDK%A(fU;68CADycE9MaPf_yl7Y{jvV5Vj@`; zEaSh@@FLF9UmA7+_VvNGjwPbas(#goLNiN7A*s-zV#Y8jf+Afk)K(^*V`3ScNNVWC zpzP%_*tI_lH3`t@_26opoqiNtEo|iZvd6Mo6w2DP#x)~Hf?#S&MAfsIv<`&8-Cx;Dlwd zPoDrtV21`Jdd*fz|8A~yC-68PM}0!VdJ5V(ZTGIkBAsbz0zcW>K-EAF<&a{F5Y|2T zwV4+ny(0o~)A|)H)utHF3`2!KSr5G{Hjh%+ptpheV+@_Q7UWfVc~wE)ke4@HeIqZo z7v$Y}dG}1$k(v0w%n@xSGB_jez9kP4ULPz0iu720*hnm$$fTev!Ixbr*3yb8SSG&M zmx#t9OAPQ~#`@Kjt)pky)F6mIq33yhxG zUF^7c^k%h^cPit%W}V)Gvp(;vFF2d?&Suzp*E{q`w7A@lB;@j)-8-@O9Qh#f(1kpe zkNdmr4)cRV6t5{oqx9jbuuX>Wq>+Y{&70X7i>1nbM1%=;3VkPtQ|NnZ^@89M+ZKWr zaW7sd7sRFo$tu3I;HBr3mL^#e1Kc^^r+COd=7Y0vh-pLA5e~h~8j2avNxV&0$uTXi z>TOT`HmuA-e!>E-ApDi1{m_?)NFOKxY@^>PjWPa*;ZTpV2utw)lD4NZiQ%N$PL9I@ tyVd#{5DzUF<2%T62RXQO-AB*Qp^bBB-5d(fq4mF8_Xs$!fSBao{sHiR{Wt&s diff --git a/src/services/EmailClient.py b/src/services/email_client.py similarity index 58% rename from src/services/EmailClient.py rename to src/services/email_client.py index 5564c09..6d151ba 100644 --- a/src/services/EmailClient.py +++ b/src/services/email_client.py @@ -2,9 +2,11 @@ import imaplib import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart +from email import message_from_bytes +from email.header import decode_header class EmailClient: - def __init__(self, imap_server, smtp_server, email, password, imap_port=993, smtp_port=587): + def __init__(self, imap_server, smtp_server, email, password, imap_port=143, smtp_port=25): self.imap_server = imap_server self.smtp_server = smtp_server self.email = email @@ -13,19 +15,38 @@ class EmailClient: self.smtp_port = smtp_port self.imap_conn = None self.smtp_conn = None - self.connect_imap() - self.connect_smtp() + def connect_imap(self): """Conexión del servidor IMAP""" - self.imap_conn = imaplib.IMAP4_SSL(self.imap_server, self.imap_port) - self.imap_conn.login(self.email, self.password) + try: + self.imap_conn = imaplib.IMAP4(self.imap_server, self.imap_port) + self.imap_conn.login(self.email, self.password) + print("Conexión IMAP exitosa") + except Exception as e: + print(f"Erro al conectar al servidor IMAP: {e}") + self.imap_conn = None def connect_smtp(self): """Conexión del servidor SMTP""" - self.smtp_conn = smtplib.SMTP(self.smtp_server, self.smtp_port) - self.smtp_conn.starttls() - self.smtp_conn.login(self.email, self.password) + try: + self.smtp_conn = smtplib.SMTP(self.smtp_server, self.smtp_port) + #self.smtp_conn.starttls() + self.smtp_conn.login(self.email, self.password) + print("Conexión SMTP exitosa") + except Exception as e: + print(f"Error al conectar al servidor SMTP: {e}") + self.smtp_conn = None + + def is_connected(self): + """Verifica si hay una conexión valida tanto de IMAP como de SMTP""" + return self.imap_conn is not None and self.smtp_conn is not None + + def reconnect(self): + """Intenta reconectar a los servidores IMAP y SMTP""" + print("Intentando reconectar al servidor de correo...") + self.connect_imap() + self.connect_smtp() def fetch_unread_count(self): """Obtener el número de correos no leidos""" @@ -33,6 +54,13 @@ class EmailClient: status, response = self.imap_conn.search(None, "UNSEEN") return len(response[0].split()) + def fetch_folders(self): + """Obtiene la lista de carpetas disponibles en el servidor""" + status, folders = self.imap_conn.list() + if status == "OK": + return [folder.decode().split(' "/" ')[-1] for folder in folders] + return [] + def list_emails(self, limit=10): """Lista de correos más recientes""" self.imap_conn.select("INBOX") diff --git a/src/services/threads_manager.py b/src/services/threads_manager.py index 9616cb8..35856d7 100644 --- a/src/services/threads_manager.py +++ b/src/services/threads_manager.py @@ -1,7 +1,5 @@ import datetime -import random import time - import requests from src.services.Radio_Player import RadioPlayer @@ -11,8 +9,9 @@ from src.services.threaden_task import ThreadenTask class ThreadsManager: """Constructor""" - def __init__(self, ui_instance): + def __init__(self, ui_instance, email_client): self.ui_instance = ui_instance + self.email_client = email_client self.system_monitor = None self.radio_player = RadioPlayer() self.tasks = { @@ -41,8 +40,6 @@ class ThreadsManager: for metric in system_monitor.metrics.keys(): self.system_monitor_tasks[metric] = ThreadenTask() - - def start_threads(self): """Se inician los hilos, Tiempo, Temperatura, Emails""" self.tasks["time"].start(self.update_time) @@ -137,15 +134,33 @@ class ThreadsManager: return None - def update_emails(self): - count = 0 + """Actualiza la cantidad de correos no leidos en tiempo real""" while self.tasks["emails"].running: - count += random.randint(0, 2) # Simula la llegada de 0-2 correos - self.ui_instance.after( - 0, - lambda: self.ui_instance.info_labels["emails"].configure(text=f"Correos sin leer: {count}") - ) - time.sleep(20) # Actualiza cada 10 segundos + try: + if not self.email_client.is_connected(): + self.email_client.reconnect() + + if self.email_client.is_connected(): + unread_count = self.email_client.fetch_unread_count() + self.ui_instance.after( + 0, + lambda: self.ui_instance.info_labels["emails"].configure( + text=f"Correos sin leer: {unread_count}" + ) + ) + else: + print("No hay conexión al servidor de correo") + self.ui_instance.after( + 0, + lambda: self.ui_instance.info_labels["emails"].configure( + text="Servidor no disponible" + ) + ) + except Exception as e: + print(f"Error en el hilo de correos: {e}") + time.sleep(60) + + diff --git a/src/ui/__pycache__/centered_window.cpython-312.pyc b/src/ui/__pycache__/centered_window.cpython-312.pyc index 671907a727c0a3dc83e2f85ee4374de2fe70112d..753da6f574121deb6f206b53df1144737119968a 100644 GIT binary patch delta 3089 zcmaJ@eQaA-6@S;C&!0*2X*WsZe2nBZu~+A#U9zPlOVXrWlaw?xWn269V!tIXwf)@t zUb@C4#B7DOV`$56w^l1iOb9{fkSYSBfAGgDftUmWBD$r#0_xZwC_+fvlp(YViF2Oq zX6?{y>*ssVIrp4fpU=&~$KlUT+uE1?0g_p68Vtm_xFg|B`X2WY z&cY3GapxH>&dXM|TwJ#Ng3DesPXyQUYx|1?Vt59Vl9K38C~`_)e*Y@@H@iT_TH*x0 zmbmo|+Z7uc;J5`&%#S!u_vC0uU0_mm`4_KPaukqq6nJ`3VRR)w04`sk#ZjXxKVu)d zY8{KV1#Y&IMXjams?Ql(wCllw@Pci@lCg8#6_TSYI`klW&eBk2&w$}Ye!;%r%s?dK zxw#7zRk7=q$~wn_^D?-;spb)Uv)^rG#g1)mAJOJR;mY zC%8s4MbWOdNObo@k!ahlNOV_wrZO(4Qi|4_*3uD0))G=uq7ju&8@6a$dxu~%JW5hZ zi<(SN$<**@N&W7`E@R9MJ}qh5Gb)X5VDt=f`V-P(6i<$b1A_;>gA;?|$2DGtZBX(5b#&h zaf=+$&JU07#0XCzJ1bxONf%Kbp3JFglf zv>27rN^070#$`>X>O9?ZpM^T`sG2;&{^nkBgn<_$FL#!$zV2yugs?0OpPH6aB9%3D zj>hDz%5@!N=IHimt*?tvK5^hSWm&_rW0Z?AT6}ByryfW5Y-zc3$spAOW z1Q3X+0}2~WW!#6c+(ScBQl?KM+mhQEZYJYCB+Y5E$;^1ip;`-~LM5FA0eS)*yV;+vc%qQXm^-t z?O>#_iF|!kXzYQ=v6D?fmi@xBRk(=uAl!dcUcqpeg$)?$g z@BhDb7h&B4Rc`~!%w?9l-Ozl_w$2CE_`o}Sh=y6TIa`l*4L2M#SvS>w#{4DNZyEbX zb1C^fyVG0)7H?GrSK9=;b!iaInh769Ew=s{Nr!^`3QRWq$a@0GRw~C=@@0Aq32t3J zt&1@=q0(H=L|hODfW$qAf7V=gxlX+7^B0Fq%# z$WNpFC)x3E)sd%wWR?h|;!}x4LHqdrq2URdLJ1WijqozE$Wco1-y5GxCg(*drYma7 zuu~~DEeky4^bcXlW9G3P#4>d(TVCO%SiK??xSY7LdMvV=z=^oVj{{6QUJsOaMeKSg+h9c@eQGb4({48E90=x!VY_m(S$drH-HH7QO(ToNE{ zI369Fm>3(Ozd%(g^Rx#;Nz{_>Hui)xB`3@l6Uz7b&iqMsGO^uFK4P=&8<5``N022u zhPK^bh}YP!J32-LnCr(4vI(7bi;On zeb8mA#Bk>7z-``mrZ)O2^K^%L>XG*y)Bv}k>5!NN1=K)#7U3pqNlIKRB#>@WB~*h*i(9H9=-(=!-k&FzatZy5Pc7c zj?uC4k-me4{955QxhK2tvgm_nR5 gEy9jJy1n|ZTy)csw2@)*(&3Af%ab2-=EPk3KL<|+t^fc4 delta 2628 zcmaJ@eQaCR6@T~n>&1?fhT4u3=fiEBkC!ItN7`=5+B9xc`azqpG;J9nd$Hpe$BF%H z-S=FY%v~)g>dG`4?|?Q08*I`hLWR~Un}oDUbkf))##Aa=ZM-3YCN$Jd{4gb(dV*E`(d%^!`0;=6?d0#ama2kGE4A;h6omsq!g)?e zxKtZlZT5R@L=uFDz4J_#N;>Tx1Gm`FcBxDe3WDNXSqcf-xmI@t zVYUVybk*C=*bDHQyU~8eVff*y7-D{SS8STHa6Ts_ z#DWXaR*)>Lcux3{>k=#9&d}0q9p2u|LU6^q-hqzIHb9qH?_$EdAUlRZvNzRLn+`pn zQ@JTAN=i!^iefs9l#y0p)czt{2Or!2$*SQ!M?-fd-mAZl@L5s#K=NL2U6+D4r24-| zl^5L?+>1MINOiZJLUZ>^V{bQYTYkXVBevHd+w|&2j2ntE!_`5awd=cB8w{=gP2ezD|009-M_`x#E9@u?`?eyj z=sU%R;Zxt{FC!0w;qONBPyMq<_6CN&j64D_1jvCm1Bada$>0z))b_0|$7|0w9VF=? z1lh*vP5c1_)0R{XS>&Pb2OFJM*vgJR0^`9RsSO!RB0mnLpwDxhbS4S*z~$htJl~`x zrGocDuFmJ}$ECc^N(0Y8scv*~O~bUs4b809r+6%vOKC|Z9gC}JuAzomSYHCc}4q2FnTF1Y5R;U?Avb``?d}P&*FSHbyp_AxRt|wMZKFJCv2n zz}FJlStQm;g0l!Rv+ls!BvT9SV^p!>1F?+C6*?Bno(+N46821yR)RozN#doZXw30x*cjO=Z9|4!$wM$6*~HGl`A8Q# z4Zn=^mQ&mfA4S^P{Ib7wHwFzRI_eYI34u zHt_uaqb?G)D;LY_s$$&n?J9DuR2GHzTROgD|FaatKEEl2c^fp!#f@a!bYp+1hV_xkG#~P>+Zc$#*E?p=vkEOnX|LCSQ)j;hs?cH&A3%38v%=X(pm$^w5EWV?0TW8G;nScj<^d#OL6J zo)FI2U-!g3R&#dY!NLZJ`U9|gvxmL8d}#AdhVdwF0ntOgbDZoL4`}KQtfN5iV+8b* z!G8ury_vIvw4@3}@2tL9d!_8YJQYjlRh>`M%{Weo;IO(}Cy&A_h17%9(aQb-C$`_hA{yK=dCvg80#|l~1OGuC z-GfjR-j%#>Rkh!gI(XaihdZ|0Jg=j;oc1T6t?y+v0oVHiwbt|}Q^jI=Ivm0E!d5F( zzWxyN!Iu8+1P!!u7AXX#Ye+RzP34p+I+-MR96=UMPc9vsU!6qrC>xfmtZ`>n@>n93 zRp?yhR?N(bW7vgS@&rcfE%o3bboz0(2H#-$K~LiEnIEe9tC;}C*KT9hQ@ei1*c%`YL}xAC$5tLN>#?L7&z{D~I+K0$(HPgzPkw_=?eqfvS5l&3!%Y%8het+_MvtuK(3a=vyE1qU zUKwa+5%|+U(aK=ma&pf$cK_Y>hh>*#g7?wAcPx-o{BNta?&o+P+N@D76MRg|f8OxLH>bXrlc z*CQyk{xGZrSRyI`6`nqV@Yy-x6ES3W^!=+JB75)ew91DVa+T>a=2Du01wfB7y;FJ2 zb7oaG1yAq&UZ-u}*qn9YlE5uh>fwJ&yE55CKCKS$k8z8GM9??E+`fAJn=@@^2ifAW PADk?m{6w%emfn8>8~=aj diff --git a/src/ui/centered_window.py b/src/ui/centered_window.py index 485bfb4..e62e07a 100644 --- a/src/ui/centered_window.py +++ b/src/ui/centered_window.py @@ -6,6 +6,7 @@ from src.services.processes_manager import ProcessManager from src.services.system_monitor import SystemMonitor from src.services.tetris_game import TetrisGame from src.services.threads_manager import ThreadsManager +from src.services.email_client import EmailClient class CenteredWindow(ctk.CTk): @@ -14,8 +15,15 @@ class CenteredWindow(ctk.CTk): super().__init__() self.title(title) + #Configurar Email Client + self.email_client = EmailClient( + imap_server="192.168.120.103", + smtp_server="192.168.120.103", + email="dennis@psp.ieslamar.org", + password="1234" + ) # Inicializar managers (orden es importante) - self.thread_manager = ThreadsManager(self) + self.thread_manager = ThreadsManager(self, self.email_client) self.process_manager = ProcessManager() self.system_monitor = None