ó
    jªÄj“‡  ã                   ó  • S r SSKrSSKrSSKrSSKrSSKJr  SSKJrJrJ	r	J
r
  SSKJr  SSKJr  SSKJrJr  SSKJrJrJrJrJr  SS	KJr  SS
KJr  SSKrSSKrSSKrSSKJ r   Sr!Sr"Sr#Sr$Sr%Sr&Sr'Sr(/ SQr)Sr*Sr+Sr,Sr-Sr.Sr/Sr0Sr1Sr2S1r3Sr4Sr5SS1r6S r7S!r8S"r9Sr:S#r;S$r<\Rz                  " S%5      r>S&\4S' jr?\ " S( S)5      5       r@S*\AS&\A4S+ jrBSWS&\@4S, jjrCS-\\D\D4   S&\\\D\D4   \\D   4   4S. jrES/\\D\D4   S0\\A   S&\\D   4S1 jrFS2rGS&\H4S3 jrIS4\HS0\\A   S&\H4S5 jrJS6\\D   S&\\D   4S7 jrKS8\;SSS4S6\\D   S9\DS:\DS;\DS<\AS=\\A   S>\\D   S&\A4S? jjrLS@\HSA\DS&\D4SB jrMSC\DS=\\A   SD\ASE\S&\H4
SF jrNS&\A4SG jrOS=\ASH\\\D\P4      SD\ASE\S&\\\P   \A4   4
SI jrQSXSJ jrRS:\DS&\D4SK jrSSL\R¨                  S&\4SM jrUSN\VS&\H4SO jrWSN\VS&\H4SP jrXS&\\D\A4   4SQ jrYS&\\D\A4   4SR jrZS&\\D\P4   4SS jr[SYST\A4SU jjr\S&\A4SV jr]g)Zu'  KimenÅ‘ levelek sora (outbox), sebessÃ©gkorlÃ¡t, ÃºjraprÃ³bÃ¡lÃ¡s Ã©s az ismÃ©tlÅ‘dÅ‘ hibÃ¡k szÅ±rÃ©se.

TÃ–RTÃ‰NET / MIÃ‰RT KÃ‰SZÃœLT (2026-10-04, e-mail rendszer B szelet)
    Eddig a rendszer a leveleket azonnal, a kÃ©rÃ©s hÃ¡ttÃ©rszÃ¡lÃ¡n kÃ¼ldte (email_utils.py), Ã­gy:
      - ha az SMTP-szerver Ã©ppen nem mÅ±kÃ¶dÃ¶tt, a levÃ©l ELVESZETT;
      - semmi nem korlÃ¡tozta, hÃ¡ny levÃ©l megy ki Ã³rÃ¡nkÃ©nt - egy hiba-Ã¡radat a feladÃ³-cÃ­met
        spam-listÃ¡ra vihette (ezÃ©rt kell a dedikÃ¡lt, korlÃ¡tozott "webapp@" feladÃ³);
      - ugyanaz a hiba minden nap Ãºjra Ã©s Ãºjra levelet generÃ¡lt.
    Ez a modul ezt hÃ¡rom dologgal oldja meg:
      1) SOR: minden levÃ©l elÅ‘bb az `email_kimeno` tÃ¡blÃ¡ba kerÃ¼l (sorba_allit), egy percenkÃ©nt
         futÃ³ Ã¼temezett feladat (kiurites) kÃ¼ldi ki Å‘ket.
      2) SEBESSÃ‰GKORLÃ�T: Ã³rÃ¡nkÃ©nt Ã©s naponta legfeljebb a rendszeradmin Ã¡ltal beÃ¡llÃ­tott szÃ¡mÃº
         levÃ©l megy ki (alapÃ©rtÃ©k: 10/Ã³ra, 100/nap). A tÃ¶bbi sorban vÃ¡r, nem vÃ©sz el.
      3) ISMÃ‰TLÃ‰S-SZÅ°RÃ‰S: ugyanarrÃ³l a hibÃ¡rÃ³l csak az elsÅ‘ alkalommal megy levÃ©l, Ã©s csak
         `email_ismetles_nap` (alapbÃ³l 7) nap utÃ¡n emlÃ©keztetÃ¼nk Ãºjra, ha mÃ©g fennÃ¡ll.

A KÃœLDÃ‰S MENETE (kiurites, percenkÃ©nt)
    1. Az `utemezo_utils.vedett` biztosÃ­tja, hogy a 3 gunicorn worker kÃ¶zÃ¼l csak EGY futtassa.
    2. Ha nincs SMTP beÃ¡llÃ­tva (szimulÃ¡ciÃ³s mÃ³d): a vÃ¡rakozÃ³ leveleket a konzolra Ã­rja Ã©s
       "szimulalt" Ã¡llapotba teszi (nem szÃ¡mÃ­t bele a korlÃ¡tba).
    3. KÃ¼lÃ¶nben kiszÃ¡molja a mÃ©g felhasznÃ¡lhatÃ³ keretet: min(Ã³ra-korlÃ¡t - az elmÃºlt Ã³rÃ¡ban
       elkÃ¼ldÃ¶ttek, nap-korlÃ¡t - az elmÃºlt 24 Ã³rÃ¡ban elkÃ¼ldÃ¶ttek). Egy futÃ¡s legfeljebb
       TICK_MAX levelet kÃ¼ld (hogy a kÃ¼ldÃ©s ne "csomagban" menjen).
    4. A leveleket prioritÃ¡s (0 sÃ¼rgÅ‘s, 1 normÃ¡l, 2 alacsony), majd beÃ©rkezÃ©s szerint veszi.
    5. Sikeres kÃ¼ldÃ©s -> "elkuldve". Hiba esetÃ©n:
         - vÃ©gleges hiba (pl. a szerver a cÃ­mzettet elutasÃ­totta, 5xx) -> "hibas";
         - Ã¡tmeneti hiba -> ÃºjraprÃ³bÃ¡lÃ¡s nÃ¶vekvÅ‘ vÃ¡rakozÃ¡ssal (5, 10, 20, 40, 80 perc), a
           MAX_PROBALKOZAS-adik hiba utÃ¡n "hibas";
         - kapcsolati/hitelesÃ­tÃ©si hiba (az SMTP-szerver nem elÃ©rhetÅ‘) -> a futÃ¡s abbamarad (nem
           prÃ³bÃ¡lkozunk 5 levÃ©llel, mindegyiknÃ©l 30 mp-es idÅ‘tÃºllÃ©pÃ©ssel).
    A "hibas" leveleket a rendszeradmin a "KimenÅ‘ levelek" oldalon egy gombbal Ãºjra sorba Ã¡llÃ­thatja.

IDÅ�KEZELÃ‰S
    Az adatbÃ¡zisban minden idÅ‘pont UTC, idÅ‘zÃ³na-jelÃ¶lÃ©s nÃ©lkÃ¼l ("naiv" UTC) - a megszokott
    mintÃ¡val egyezÅ‘en. A helyi (budapesti) dÃ¡tumot csak az ismÃ©tlÃ©s-szÅ±rÃ©s napi bontÃ¡sÃ¡hoz
    hasznÃ¡ljuk (a hÃ­vÃ³ adja Ã¡t).

MIT NE TEGYÃ‰L?
    - Levelet ne kÃ¼ldj kÃ¶zvetlenÃ¼l (email_beallitasok.kuld) - Ã¡llÃ­tsd sorba (sorba_allit), hogy a
      korlÃ¡t Ã©s az ÃºjraprÃ³bÃ¡lÃ¡s Ã©rvÃ©nyesÃ¼ljÃ¶n. Egyetlen kivÃ©tel a rendszeradmin teszt-levÃ©l gombja.
    - A levÃ©l tÃ¶rzsÃ©be kerÃ¼lÅ‘, felhasznÃ¡lÃ³tÃ³l szÃ¡rmazÃ³ szÃ¶veget html.escape-pel vÃ©dd (l. email_utils.py).

RÃ©szletes leÃ­rÃ¡s: docs/EMAIL_RENDSZER.md
é    N)Ú	dataclass)ÚdateÚdatetimeÚ	timedeltaÚtimezone)ÚMIMEMultipart)ÚMIMEText)Ú
formatdateÚ
make_msgid)ÚDictÚIterableÚListÚOptionalÚTuple)Úor_)ÚIntegrityError)ÚSessionLocalÚemail_limit_orabanÚemail_limit_napontaÚemail_ismetles_napé
   éd   é   é   é   )r   r   é   é(   éP   é    é   éZ   Ú	varakozikÚkuldes_alattÚelkuldveÚ	szimulaltÚhibasÚ	aktivalasÚvisszatartvaÚ
osszegezveÚrendszeré�  Úlejartr   é   é   z5^[^@\s<>\"'\\,;]+@[^@\s<>\"'\\,;]+\.[^@\s<>\"'\\,;]+$Úreturnc                  ód   • [         R                  " [        R                  5      R	                  SS9$ )u[   A pillanatnyi idÅ‘ UTC-ben, idÅ‘zÃ³na-jelÃ¶lÃ©s nÃ©lkÃ¼l (Ã­gy tÃ¡roljuk az adatbÃ¡zisban).N)Útzinfo)r   Únowr   ÚutcÚreplace© ó    Ú/var/www/website/email_sor.pyÚ	_utc_mostr8   p   s#   € ä�<Š<œŸ™Ó%×-Ñ-°TÐ-Ð:Ð:r6   c                   óD   • \ rS rSr% Sr\r\\S'   \	r
\\S'   \r\\S'   Srg)ÚKorlatokéx   u`   Az Ã©rvÃ©nyes korlÃ¡tok. Ha a rendszeradmin mÃ©g nem Ã¡llÃ­tott semmit, az alapÃ©rtÃ©kek Ã©lnek.ÚorabanÚnapontaÚismetles_napr5   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚALAP_LIMIT_ORANr<   ÚintÚ__annotations__ÚALAP_LIMIT_NAPONr=   ÚALAP_ISMETLES_NAPr>   Ú__static_attributes__r5   r6   r7   r:   r:   x   s#   ‡ ájØ!€FˆCÓ!Ø#€GˆSÓ#Ø)€L�#Ö)r6   r:   Úalapc                 óŒ   •  [        [        U 5      R                  5       5      nUS:¼  a  U$ U$ ! [        [        4 a    Us $ f = f)Nr-   )rE   ÚstrÚstripÚ	TypeErrorÚ
ValueError)ÚertekrJ   Úvs      r7   Ú	_int_vagyrR   €   sH   € ðÜ”�E“
× Ñ Ó"Ó#ˆØ˜“FˆqÐ$ Ð$øÜ”zÐ"ó ØŠðús   ‚). ¬. ®AÁAc           	      ó&  • U SL nU(       a
  [        5       n  U R                  [        R                  5      R	                  [        R                  R
                  R                  [        [        [        /5      5      R                  5       nU Vs0 s H  o3R
                  UR                  _M     nnU(       a  U R!                  5         [#        [%        UR'                  [        5      [(        5      [%        UR'                  [        5      [*        5      [%        UR'                  [        5      [,        5      S9$ s  snf ! [         a0  n[        S[        U5      R                   SU 35        0 n SnAN¿SnAff = f! U(       a  U R!                  5         f f = f)u^   BetÃ¶lti az aktuÃ¡lis korlÃ¡tokat; SOSEM dob kivÃ©telt (hiba esetÃ©n az alapÃ©rtÃ©keket adja).NuI   â�Œ Hiba az e-mail korlÃ¡tok olvasÃ¡sakor (alapÃ©rtÃ©kek hasznÃ¡latban): ú: ©r<   r=   r>   )r   ÚqueryÚmodelsÚRendszerBeallitasÚfilterÚkulcsÚin_ÚKULCS_LIMIT_ORANÚKULCS_LIMIT_NAPONÚKULCS_ISMETLES_NAPÚallrP   Ú	ExceptionÚprintÚtyper?   Úcloser:   rR   ÚgetrD   rG   rH   )ÚdbÚsajatÚsorokÚsÚeÚexs         r7   Úkorlatok_betoltrk   ˆ   s6  € à�$ˆJ€EÞÜ‹^ˆð
Ø—‘œ×1Ñ1Ó2×9Ñ9Ü×$Ñ$×*Ñ*×.Ñ.Ô0@ÔBSÔUgÐ/hÓió
ç
‰#‹%ð 	ñ (-Ó-¢u !�W‰W�a—g‘gÒ¡uˆÐ-ö
 Ø�H‰HŒJÜÜ˜Ÿ™Ô/Ó0´/ÓBÜ˜!Ÿ%™%Ô 1Ó2Ô4DÓEÜ˜qŸu™uÔ%7Ó8Ô:KÓLñð ùò .øÜó ÜÐYÔZ^Ð_aÓZb×ZkÑZkÐYlÐlnÐoqÐnrÐsÔtØ�ûðûö Ø�H‰H�Jð ús<   —A6D9 Â D4Â-D9 Ä4D9 Ä9
E3Å&E.Å)E6 Å.E3Å3E6 Å6FÚnyersc           
      ób  • / n0 nSnU Hb  u  pEpgU R                  U5      =(       d    SR                  5       n [        U5      n	Xis=::  a  U::  d   [        e  [        e [        U	5      X$'   Md     X!4$ ! [         a2    UR	                  U SU SU S35        [
        [        [        S.U   n	 NOf = f)ul   EllenÅ‘rzi az Å±rlap Ã©rtÃ©keit. VisszatÃ©rÃ©s: (tiszta Ã©rtÃ©kek, hibÃ¡k). Hiba esetÃ©n nem szabad menteni.))r<   u   Az Ã³rÃ¡nkÃ©nti levÃ©lkorlÃ¡tr-   iè  )r=   u   A napi levÃ©lkorlÃ¡tr-   i N  )r>   u2   Az ismÃ©tlÅ‘dÅ‘ hibÃ¡k emlÃ©keztetÃ©si ideje (nap)r-   r!   Ú Ú u    Ã©s u$    kÃ¶zÃ¶tti egÃ©sz szÃ¡m kell legyen.rU   )	rd   rM   rE   rO   ÚappendrD   rG   rH   rL   )
rl   ÚhibakÚtisztaÚ	szabalyokrZ   ÚnevÚalsoÚfelsoÚszovegrP   s
             r7   Úkorlatok_ellenorizrx   Ÿ   sÎ   € à€EØ€Fð€Ió
 $-Ñˆ�DØ—)‘)˜EÓ"×( b×/Ñ/Ó1ˆð	wÜ˜“KˆEØÕ* UÔ*Ü Ð ð +Ü Ð ð +ô
 ˜E›
ˆ‹ñ $-ð ˆ=Ðøô	 ó 	wØ�L‰L˜C˜5  $  u¨U¨GÐ3WÐXÔYÜ.Ô;KÔ]nÑoÐpuÑvŠEð	wús   ¸%A2Á29B.Â-B.rr   Úuser_idc                 ó¼   • [         SS4[        SS4[        SS44n/ nU H9  u  pVn[        R                  " XX   SU5      (       d  M(  UR                  U5        M;     U$ )u    Elmenti a korlÃ¡tokat (NEM commitol - a hÃ­vÃ³ az AuditLog-bejegyzÃ©ssel egyÃ¼tt commitol).
VisszatÃ©rÃ©s: a tÃ©nylegesen mÃ³dosult beÃ¡llÃ­tÃ¡sok emberi nevei.r<   u   Ã³rÃ¡nkÃ©nti levÃ©lkorlÃ¡tr=   u   napi levÃ©lkorlÃ¡tr>   u   emlÃ©keztetÃ©si idÅ‘ (nap)F)r\   r]   r^   Úemail_beallitasokÚ_upsertrp   )re   rr   ry   ÚcimkekÚ	valtozottrZ   ÚmezoÚcimkes           r7   Úkorlatok_mentr�   µ   sq   € ô 
˜8Ð%AÐBÜ	˜IÐ';Ð<Ü	˜^Ð-IÐJð€Fð
 €IÛ$Ñˆ�UÜ×$Ò$ R°±¸eÀW×MÓMØ×Ñ˜UÖ#ñ %ð Ðr6   Úszimultan_belepes_ertesitesc                 ó  • U R                  [        R                  5      R                  [        R                  R                  [
        :H  5      R                  5       n[        US L=(       a    UR                  =(       d    SS:H  5      $ )Nrn   Ú1)	rV   rW   rX   rY   rZ   ÚKULCS_SZIMULTAN_ERTESITESÚfirstÚboolrP   )re   Úsors     r7   Úszimultan_ertesites_be_vanr‰   Ê   s]   € Ø
�(‰(”6×+Ñ+Ó
,×
3Ñ
3´F×4LÑ4L×4RÑ4RÔVoÑ4oÓ
p×
vÑ
vÓ
x€CÜ�˜4�×< S§Y¡Y§_°"¸Ñ$<Ó=Ð=r6   Úbec                 ó\   • [         R                  " U [        U(       a  SSU5      $ SSU5      $ )u‚   Be/ki kapcsolja a szimultÃ¡n belÃ©pÃ©s Ã©rtesÃ­tÅ‘ levelÃ©t. NEM commitol. Igazzal tÃ©r vissza, ha az Ã©rtÃ©k tÃ©nyleg vÃ¡ltozott.r„   Ú0F)r{   r|   r…   )re   rŠ   ry   s      r7   Úszimultan_ertesites_beallitasar�   Ï   s/   € ä×$Ò$ RÔ)BÎ2ÀCÐX]Ð_fÓgÐgÐSVÐX]Ð_fÓgÐgr6   Ú	cimzettekc                 óJ  • [        5       n/ nU =(       d    /  H‡  nU=(       d    SR                  5       nU(       a)  [        U5      S:”  d  [        R	                  U5      (       d  MN  UR                  5       nXA;   a  Me  UR                  U5        UR                  U5        M‰     U$ )uW  (A hÃ­vÃ³k az ismÃ©tlÃ©s-szÅ±rÃ©s Ã¡llapotÃ¡nak rÃ¶gzÃ­tÃ©se ELÅ�TT is ezzel szÅ±rik a cÃ­meket, hogy Ã©rvÃ©nytelen cÃ­mzett esetÃ©n ne maradjon "elkÃ¼ldÃ¶ttnek" jelÃ¶lt hiba.)
Ã‰rvÃ©nyes, egyedi (kis-nagybetÅ±-fÃ¼ggetlen) cÃ­mek, sorrendtartÃ³. A CR/LF-et tartalmazÃ³ vagy
szintaktikailag hibÃ¡s cÃ­meket eldobja (fejlÃ©c-injekciÃ³ ellen is).rn   éÿ   )ÚsetrM   ÚlenÚ_EMAIL_MINTAÚmatchÚlowerÚaddrp   )rŽ   ÚlatottÚvisszaÚcrZ   s        r7   Úcimek_tisztitasarš   ×   s‚   € ô ‹U€FØ€FØ�_˜"Š_ˆØ�W�"�O‰OÓˆÞ”C˜“F˜S“L¬×(:Ñ(:¸1×(=Ñ(=ÙØ—‘“	ˆØ‹?ÙØ�
‰
�5ÔØ�‰�aÖñ ð €Mr6   ÚriasztasÚtargyÚ
torzs_htmlÚ	kategoriaÚ	prioritasÚ
company_idÚdedup_kulcsc                 óº  • [        U 5      nU(       d  gUSL n	U	(       a
  [        5       n [        U5      R                  SS5      R                  SS5      SS n
[	        5       nU[
        ;  a   SSKnUR                  Xh5      nU HY  nUR                  5       U;   nUR                  [        R                  " XêU(       a  SOUUXO(       a  [         O["        SUUS
9	5        M[     U	(       a  UR%                  5         ['        U5      U	(       a  UR)                  5         $ $ ! [         a.  n[        S[        U5      R                   S	U 35         SnANÌSnAff = f! [         a]  nU	(       a  UR+                  5         [        S[        U5      R                   S	U 35         SnAU	(       a  UR)                  5         ggSnAff = f! U	(       a  UR)                  5         f f = f)uþ  A levelet (cÃ­mzettenkÃ©nt egy sorral) a kimenÅ‘ sorba teszi. VisszatÃ©rÃ©s: a sorba Ã¡llÃ­tott
levelek szÃ¡ma (0, ha nem volt Ã©rvÃ©nyes cÃ­mzett vagy hiba tÃ¶rtÃ©nt - a hiba a konzolra kerÃ¼l,
de a hÃ­vÃ³t nem Ã¡llÃ­tja meg).

db: ha megadsz egy session-t, a sorok ABBA kerÃ¼lnek Ã©s NEM commitolunk (a hÃ­vÃ³ commitol, Ã­gy
az ismÃ©tlÃ©s-szÅ±rÃ©s Ã¡llapotÃ¡val egy tranzakciÃ³ban mentÅ‘dik). NÃ©lkÃ¼le sajÃ¡t session-nel azonnal
commitolunk.

dedup_kulcs: az ismÃ©tlÃ©s-szÅ±rÃ©s kulcsa (l. riasztas_kulcs), ha a levÃ©l egy "hiba-jelzÃ©s". Ha a levelet
vÃ©gleg nem sikerÃ¼l kikÃ¼ldeni ("hibas"), a kulcshoz tartozÃ³ Ã¡llapot tÃ¶rlÅ‘dik, hogy ugyanaz a hiba
legkÃ¶zelebb ismÃ©t levelet generÃ¡ljon - kÃ¼lÃ¶nben egy SMTP-kiesÃ©s 7 napra elnÃ©mÃ­thatnÃ¡ a riasztÃ¡st.r   NÚrn   Ú
ro   éô  uQ   âš ï¸� A szabadsÃ¡g-ellenÅ‘rzÃ©s sikertelen (a levÃ©l a megszokott mÃ³don megy): rT   )	Úcimzettrœ   r�   rž   rŸ   ÚallapotÚprobalkozasokr    r¡   u(   â�Œ Hiba a levÃ©l sorba Ã¡llÃ­tÃ¡sakor: )rš   r   rL   r4   r‘   Ú%SZABADSAG_ALATT_IS_KULDOTT_KATEGORIAKÚszabadsag_utilsÚszabadsagon_levo_cimekr`   ra   rb   r?   r•   r–   rW   ÚEmailKimenoÚALLAPOT_VISSZATARTVAÚALLAPOT_VARAKOZIKÚcommitr’   rc   Úrollback)rŽ   rœ   r�   rž   rŸ   r    re   r¡   Úcimekrf   Útargy_tisztaÚszabadsagonrª   ri   r™   Útartvas                   r7   Úsorba_allitrµ   é   s³  € ô ˜YÓ'€EÞØØ�$ˆJ€EÞÜ‹^ˆðÜ˜5“z×)Ñ)¨$°Ó3×;Ñ;¸DÀ#ÓFÀtÈÐLˆô “eˆØÔAÓAðCÛ&Ø-×DÑDÀRÓO�ó ˆAØ—W‘W“Y +Ñ-ˆFØ�F‰F”6×%Ò%ØÆ¹"ÈJÐbkØ#ÅVÕ-AÔQbÐrsð  AKØ'ñö ñ ö Ø�I‰IŒKÜ�5‹zö Ø�H‰H�Jð øô% ó CÜÐiÔjnÐopÓjq×jzÑjzÐi{Ð{}Ð~ð  ~Að  B÷  Cñ  CûðCûô ó ÞØ�K‰KŒMÜÐ8¼¸a»×9IÑ9IÐ8JÈ"ÈQÈCÐPÔQÛæØ�H‰H�Jð ûðûö Ø�H‰H�Jð úsU   ªAE Á-D ÂB E Ä
EÄ%$EÅ	E ÅEÅE Å
F=Å ;F8ÆG  Æ8F=Æ=G  Ç GÚkritikusÚhiba_leirasc                 óø   • SR                  [        U=(       d    S5      R                  5       5      n[        R                  " UR                  S5      5      R                  5       SS nSU  SU(       a  SOS	 SU 3$ )
u¦   A gÃ©pnaplÃ³-riasztÃ¡sok (hibajegyek) azonosÃ­tÃ³ja: ugyanaz a gÃ©p + sÃºlyossÃ¡g + hibaszÃ¶veg
mindig ugyanazt a kulcsot adja, egy eltÃ©rÅ‘ szÃ¶veg (Ãºj hiba) Ãºjat.ro   rn   úutf-8Né   ú	riasztas:Ú:ÚKÚF)ÚjoinrL   ÚsplitÚhashlibÚsha1ÚencodeÚ	hexdigest)Úgep_idr¶   r·   Úujsor_nelkulÚhash_s        r7   Úriasztas_kulcsrÈ     sl   € ð —8‘8œC × 1¨rÓ2×8Ñ8Ó:Ó;€LÜ�LŠL˜×,Ñ,¨WÓ5Ó6×@Ñ@ÓBÀ3ÀBÐG€EØ�v�h˜a¦x¡°SÐ9¸¸5¸'ÐBÐBr6   rZ   r>   Úmac           	      ó¾  • U R                  [        R                  5      R                  [        R                  R                  U:H  5      R                  5       nUc?   U R                  5          U R                  [        R                  " XUS95        SSS5        gXER                  -
  R                  U:¼  a  XEl	        gg! , (       d  f       g= f! [         a     gf = f)u‡  EldÃ¶nti, hogy egy hibÃ¡rÃ³l kÃ¼ldhetÃ¼nk-e levelet, Ã©s ha igen, rÃ¶gzÃ­ti a mai napot.

Igaz: a hiba Ãºj (mÃ©g nincs bejegyzÃ©s), VAGY az utolsÃ³ kikÃ¼ldÃ©s Ã³ta eltelt legalÃ¡bb
      `ismetles_nap` nap -> kÃ¼ldhetÅ‘, a bejegyzÃ©s frissÃ¼l.
Hamis: nemrÃ©g mÃ¡r jeleztÃ¼k -> NEM kÃ¼ldÃ¼nk.
A db session-ben csak flush tÃ¶rtÃ©nik; a commitot a hÃ­vÃ³ vÃ©gzi (a sorba Ã¡llÃ­tÃ¡ssal egyÃ¼tt).N)rZ   r    Úutolso_kikuldes_napTF)rV   rW   ÚEmailErtesitesAllapotrY   rZ   r†   Úbegin_nestedr–   r   rË   Údays)re   rZ   r    r>   rÉ   rˆ   s         r7   Úkikuldheto_e_es_rogzitrÏ   '  s¸   € ð �(‰(”6×/Ñ/Ó
0×
7Ñ
7¼×8TÑ8T×8ZÑ8ZÐ^cÑ8cÓ
d×
jÑ
jÓ
l€CØ
�{ð	ð —‘Õ"Ø—‘”v×3Ò3¸%ÐlnÑoÔp÷ #àð 	×$Ñ$Ñ$×*Ñ*¨lÓ:Ø"$ÔØØ÷ #Ô"àûÜó 	Ùð	ús0   ÁC Á,%B>ÂC Â>
CÃC ÃC Ã
CÃCc                 óà   • U R                  [        R                  5      R                  [        R                  R                  R                  S[        U5       S35      5      R                  SS9$ )uÁ   Egy gÃ©p riasztÃ¡s-bejegyzÃ©seinek tÃ¶rlÃ©se - a hibajegy lezÃ¡rÃ¡sakor hÃ­vjuk, hogy ha a hiba kÃ©sÅ‘bb
Ãºjra elÅ‘fordul, az ismÃ©t "Ãºj hiba" legyen (Ã©s azonnal menjen levÃ©l). NEM commitol.r»   z:%F©Úsynchronize_session)rV   rW   rÌ   rY   rZ   ÚlikerE   Údelete)re   rÅ   s     r7   Úriasztas_allapot_torleserÕ   >  sY   € ð �8‰8”F×0Ñ0Ó1×8Ñ8Ü×$Ñ$×*Ñ*×/Ñ/°)¼CÀ»K¸=ÈÐ0KÓLóç�f €fÐ'ð(r6   Útetelekc           
      ó8  • SU S3nU R                  [        R                  5      R                  [        R                  R                  R                  US-   5      [        R                  R                  U:H  5      R                  5        Vs0 s H  ofR                  U_M     nn/ nSn	[        5       n
U H¬  u  p¼X[-   nXÚ;   a  M  U
R                  U5        UR                  U5      nUc7  U R                  [        R                  " XÑXDS95        UR                  U5        Ml  XNl        XNR                  -
  R                  U:¼  a  XNl        UR                  U5        M§  U	S-  n	M®     UR                  5        H  u  pÞXÚ;  d  M  U R!                  U5        M     X‰4$ s  snf )u:  A napi riport tÃ©teleinek szÅ±rÃ©se egy cÃ©gre.

tetelek: (stabil_kulcs, tartalom) pÃ¡rok - a kulcs a hibÃ¡t azonosÃ­tja (l. email_utils.py), a
tartalom tetszÅ‘leges (a hÃ­vÃ³ dÃ¶nti el, pl. a kÃ©sz html Ã©s a csoport); a fÃ¼ggvÃ©ny csak visszaadja.
VisszatÃ©rÃ©s: (a mostani levÃ©lbe kerÃ¼lÅ‘ tartalmak, az elnyomott = korÃ¡bban mÃ¡r jelzett tÃ©telek szÃ¡ma).

MellÃ©khatÃ¡s (commit nÃ©lkÃ¼l): az Ãºj/emlÃ©keztetett tÃ©telek bejegyzÅ‘dnek, Ã©s az a bejegyzÃ©s,
amelyhez ma mÃ¡r nincs tÃ©tel (a hiba megoldÃ³dott), tÃ¶rlÅ‘dik - Ã­gy ha kÃ©sÅ‘bb visszatÃ©r, Ãºjra "Ãºj".
zriport:r¼   Ú%r   )rZ   r    rË   Úutoljara_latva_napr-   )rV   rW   rÌ   rY   rZ   rÓ   r    r_   r‘   r–   rd   rp   rÙ   rË   rÎ   ÚitemsrÔ   )re   r    rÖ   r>   rÉ   Úelonyomrh   ÚmeglevoÚkuldendoÚ	elnyomottÚmaiakÚ
kulcs_reszÚ
tetel_htmlrZ   rˆ   s                  r7   Úriport_tetelek_szureserâ   F  s{  € ð ˜
�| 1Ð%€GàŸH™H¤V×%AÑ%AÓB×IÑIÜ×(Ñ(×.Ñ.×3Ñ3°G¸c±MÓBÜ×(Ñ(×3Ñ3°zÑAó
÷ ‰#‹%ðóò�q�‰�Š
ñ ð ð ð  €HØ€IÜ‹E€EÛ")Ñˆ
ØÑ$ˆØ‹>ÙØ�	‰	�%ÔØ�k‰k˜%Ó ˆØ‰;Ø�F‰F”6×/Ò/ØÈñcô dà�O‰O˜JÖ'à%'Ô"Ø×,Ñ,Ñ,×2Ñ2°lÓBØ*,Ô'Ø—‘ 
Ö+à˜Q‘’	ñ! #*ð$ —m‘m–o‰
ˆØÕØ�I‰I�cŽNñ &ð ÐÐùò=s   ÂFc                 ó<   • U R                   [        ;   a  SU l        gg)uÝ   Az aktivÃ¡lÃ³ levÃ©l tÃ¶rzse (a nyers token a linkben) a kikÃ¼ldÃ©s utÃ¡n tÃ¶rlÅ‘dik - Ã­gy az adatbÃ¡zis /
mentÃ©s kiszivÃ¡rgÃ¡sa nem ad hasznÃ¡lhatÃ³ aktivÃ¡lÃ³ linket (a tÃ¡bla 30 napig Å‘rzi az elkÃ¼ldÃ¶tt leveleket).uh   <p>(BiztonsÃ¡gi okbÃ³l a levÃ©l tartalmÃ¡t - az aktivÃ¡lÃ³ linket - a kikÃ¼ldÃ©s utÃ¡n tÃ¶rÃ¶ltÃ¼k.)</p>N)rž   ÚTITKOS_TORZSU_KATEGORIAKr�   )rˆ   s    r7   Ú_titkos_torzs_torleserå   v  s    € ð ‡}�}Ô0Ó0ð Dˆ�ð 1r6   c                 óh  • [         R                  " SSU =(       d    S5      n[         R                  " SSU5      n[         R                  " SSU5      n[        R                  " U5      nSR	                  S UR                  5        5       5      n[         R                  " SSU5      R                  5       $ )	u’   EgyszerÅ± szÃ¶veges (text/plain) vÃ¡ltozat a HTML-bÅ‘l - a multipart/alternative levelek kevÃ©sbÃ©
"spam-gyanÃºsak", ha van szÃ¶veges rÃ©szÃ¼k is.z (?is)<(script|style).*?>.*?</\1>rn   z%(?i)<br\s*/?>|</(p|div|li|h[1-6]|tr)>r¤   z(?s)<[^>]+>c              3   ó@   #   • U  H  oR                  5       v •  M     g 7f©N)rM   )Ú.0rˆ   s     r7   Ú	<genexpr>Ú%_szoveges_valtozat.<locals>.<genexpr>„  s   é € Ð8ª #—)‘)—+�+ªùs   ‚z\n{3,}z

)ÚreÚsubÚhtmlÚunescaper¿   Ú
splitlinesrM   )r�   rh   s     r7   Ú_szoveges_valtozatrñ   }  s…   € ô 	�ŠÐ2°B¸
×8HÀbÓI€AÜ
�ŠÐ7¸¸qÓA€AÜ
�Šˆ~˜r 1Ó%€AÜ�Š�aÓ€AØ�	‰	Ñ8¨¯©¬Ó8Ó8€AÜ�6Š6�)˜V QÓ'×-Ñ-Ó/Ð/r6   Úbeallc                 óJ  • [        S5      nU R                  US'   UR                  US'   U R                  R	                  SS5      R	                  SS5      US'   [        SS	9US
'   UR                  =(       d    UR                  =(       d    SR                  5       nSU;   a  UR                  SS5      S   OSn[        US9US'   SUS'   SUS'   UR                  [        [        U R                  5      SS5      5        UR                  [        U R                  SS5      5        U$ )uÁ   A sorbÃ³l kÃ©sz MIME-levelet Ã©pÃ­t. Date Ã©s Message-ID fejlÃ©cet is ad (hiÃ¡nyuk rontja a
kÃ©zbesÃ­thetÅ‘sÃ©get), Ã©s "automatikus levÃ©l"-kÃ©nt jelÃ¶li (az automatikus vÃ¡laszokat elnyomja).ÚalternativeÚSubjectÚFromr£   rn   r¤   ÚToF)Ú	localtimeÚDateÚ@r-   N)Údomainz
Message-IDzauto-generatedzAuto-SubmittedÚAllzX-Auto-Response-SuppressÚplainr¹   rî   )r   rœ   Úfelado_fejlecr¦   r4   r
   Ú
felado_cimÚfelhasznalorM   rÀ   r   Úattachr	   rñ   r�   )rˆ   rò   Úmsgrÿ   rû   s        r7   Ú_uzenet_epiteser  ˆ  s  € ô ˜Ó
&€CØ—Y‘Y€Cˆ	�NØ×%Ñ%€Cˆ�KØ—‘×#Ñ# D¨"Ó-×5Ñ5°d¸BÓ?€Cˆ�IÜ uÑ-€Cˆ�KØ×"Ñ"×= e×&7Ñ&7×=¸2×DÑDÓF€JØ,/°:Ó,=ˆZ×Ñ˜c 1Ó% aÒ(À4€FÜ"¨&Ñ1€CˆÑØ,€CÐÑØ&+€CÐ"Ñ#Ø‡J�JŒxÔ*¨3¯>©>Ó:¸GÀWÓMÔNØ‡J�JŒx˜Ÿ™¨°Ó8Ô9Ø€Jr6   ri   c                 óè  • [        U [        R                  5      (       ab  U R                  =(       d    0 R	                  5        Vs/ s H  o(       d  M  US   PM     nn[        U5      =(       a    [        S U 5       5      $ [        U [        R                  5      (       a  g[        U [        R                  5      (       a  U R                  S:¼  a  g[        U [        [        45      (       a  ggs  snf )u�  VÃ©gleges hiba: ÃºjraprÃ³bÃ¡lÃ¡ssal sem fog sikerÃ¼lni (a szerver a cÃ­mzettet vagy a levelet
vÃ©glegesen elutasÃ­tja, vagy a levelet nem lehet Ã¶sszeÃ¡llÃ­tani/elkÃ¼ldeni).

FONTOS: a cÃ­mzett-elutasÃ­tÃ¡s (SMTPRecipientsRefused) csak akkor vÃ©gleges, ha MINDEN elutasÃ­tÃ³
kÃ³d 5xx. A 4xx (pl. greylisting, 452 "tele a postalÃ¡da", 421 tÃºl sok kapcsolat) Ã¡tmeneti - az
ÃºjraprÃ³bÃ¡lÃ¡sra Ã¡ll.r   c              3   ó>   #   • U  H  n[        U5      S :¬  v •  M     g7f)r¥   N)rE   )ré   Úks     r7   rê   Ú#_vegleges_hiba_e.<locals>.<genexpr>£  s   é € Ð"@º%°Q¤3 q£6¨S¦=º%ùs   ‚Tr¥   F)Ú
isinstanceÚsmtplibÚSMTPRecipientsRefusedÚ
recipientsÚvaluesr‡   r_   ÚSMTPNotSupportedErrorÚSMTPDataErrorÚ	smtp_coderO   ÚUnicodeError)ri   rQ   Úkodoks      r7   Ú_vegleges_hiba_er  š  s¶   € ô �!”W×2Ñ2×3Ñ3Ø !§¡× 2°×:Ñ:Ô<ÓBÒ<˜!Ã“��1”Ñ<ˆÐBÜ�E‹{×@œsÑ"@¹%Ó"@Ó@Ð@Ü�!”W×2Ñ2×3Ñ3ØÜ�!”W×*Ñ*×+Ñ+°·±¸sÓ0BØÜ�!”j¤,Ð/×0Ñ0ØØùò Cs   Á
C/Á	C/c                 ó"   • [        U [        5      $ )u¶   A szerverrel/kapcsolattal van baj (nem a levÃ©llel): idÅ‘tÃºllÃ©pÃ©s, elutasÃ­tott belÃ©pÃ©s,
megszakadt kapcsolat... Ilyenkor a futÃ¡st abbahagyjuk, mert a tÃ¶bbi levÃ©l is elbukna.)r  ÚOSError)ri   s    r7   Ú_szerver_hiba_er  ­  s   € ô �aœÓ!Ð!r6   c            
      ó¼  ^^• SSSSSSS.n [        5       m [        5       m[        R                  " T5      n[	        T5      nUR
                  (       a+  [        SUR
                   S35        U TR                  5         $ T[        [        S9-
  nTR                  [        R                  5      R                  [        R                  R                  [        :H  [        R                  R                   U:  5      R#                  [$        SS.SS	9  TR'                  5         TR                  [        R                  5      R                  [        R                  R                  [$        :H  [        R                  R(                  S
:H  [        R                  R*                  T[        [,        S9-
  :  5      R#                  [.        S[,         S3S.SS	9U S'   TR'                  5         [        R                  R                  [$        :H  [        R                  R                   R1                  S5      [        R                  R                   T:*  -  -  nUR2                  (       Gd/  TR                  [        R                  5      R                  U5      R5                  [        R                  R6                  [        R                  R8                  5      R;                  S5      R=                  5        H~  n[        S5        [        S5        [        SUR>                   35        [        SUR@                   35        [        S5        [B        Ul        SUl"        [G        U5        U S==   S-  ss'   M€     TR'                  5         U TR                  5         $ URH                  (       d  [        S5        U TR                  5         $ S[        S[J        4UU4S jjnU" [        SS95      nU" [        SS95      nURL                  U-
  n	[O        URP                  U-
  U	5      n
[S        U
S5      U S'   / nU	S:”  a»  TR                  [        R                  5      R                  U[        R                  R6                  [T        :H  5      R5                  [        R                  R8                  5      R;                  [O        U	[V        5      5      R=                  5       nU Vs/ s H  oÝR8                  PM     nn[S        [O        [V        [Y        U5      -
  U
[Y        U5      -
  5      S5      nUS:”  aÉ  TR                  [        R                  5      R                  U[        R                  R6                  [T        :„  5      R5                  [        R                  R6                  [        R                  R8                  5      R;                  U5      R=                  5       nX¿ Vs/ s H  oÝR8                  PM     sn-  nU(       d  U TR                  5         $ U GH8  n[        5       nTR                  [        R                  5      R                  [        R                  R8                  U:H  [        R                  R                  [$        :H  5      R#                  [        UUS.SS	9nTR'                  5         US:w  a  M¥  TR[                  [        R                  U5      n []        XQ5      n[        R^                  " UU5        [`        Ul        [        5       Ul1        SUl        SUl"        [G        U5        TR'                  5         U S==   S-  ss'   GM;     U TR                  5         $ s  snf s  snf ! [d         Ga  nTRg                  5         TR[                  [        R                  U5      nURh                  =(       d    SS-   Ul4        [k        U5      Rl                   S [o        U5      SS!  3Ul"        SUl1        [q        U5      (       d  URh                  [r        :¼  a‘  [t        Ul        SUl        U S"==   S-  ss'   URv                  (       a`  TR                  [        Rx                  5      R                  [        Rx                  Rz                  URv                  :H  5      R}                  SS	9  O^[$        Ul        [~        [O        URh                  [Y        [~        5      5      S-
     n[        5       [        US9-   Ul        U S#==   S-  ss'   TR'                  5         [        S$U S%URh                   S&URD                   35        [q        U5      (       d  [�        U5      (       a   SnA  GM   SnAGM]   SnAGMd  SnAff = f! [d         aP  nTRg                  5         [        S'[k        U5      Rl                   S U 35        U s SnATR                  5         $ SnAff = f! TR                  5         f = f)(u›   A kimenÅ‘ sor feldolgozÃ¡sa - percenkÃ©nt hÃ­vja az Ã¼temezÅ‘ (l. main.py). VisszatÃ©rÃ©s: statisztika
(tesztekhez Ã©s naplÃ³zÃ¡shoz). SOSEM dob kivÃ©telt.r   )r$   r%   Úujraprobalandor&   r,   Úkeretu[   â�Œ E-mail kiÃ¼rÃ­tÃ©s kihagyva: az SMTP-beÃ¡llÃ­tÃ¡sok nem olvashatÃ³k az adatbÃ¡zisbÃ³l (u   ). A levelek a sorban vÃ¡rnak.)ÚminutesN)r§   Úelkuldve_atFrÑ   Únapi_riport©Úhoursu	   LejÃ¡rt: u:    Ã³rÃ¡nÃ¡l tovÃ¡bb vÃ¡rt a sorban, ezÃ©rt nem kÃ¼ldtÃ¼k ki)r§   Úutolso_hibar,   é2   z3
==================================================u0   ðŸ“§ E-MAIL SZIMULÃ�LVA (Nincs SMTP beÃ¡llÃ­tva)u
   CÃ­mzett: u   TÃ¡rgy: z3==================================================
r%   r-   uÜ   â�Œ E-mail kiÃ¼rÃ­tÃ©s kihagyva: a mentett SMTP-jelszÃ³ nem fejthetÅ‘ vissza (megvÃ¡ltozott a titkosÃ­tÃ¡si kulcs?). A rendszeradmin Ã­rja be Ãºjra a jelszÃ³t az E-mail beÃ¡llÃ­tÃ¡sok oldalon. A levelek a sorban vÃ¡rnak.Úmennyir/   c                 ó  >• TR                  [        R                  5      R                  [        R                  R                  R                  [        [        /5      [        R                  R                  TU -
  :¬  5      R                  5       $ rè   )
rV   rW   r¬   rY   r§   r[   ÚALLAPOT_ELKULDVEÚALLAPOT_KULDES_ALATTr  Úcount)r   re   Úmosts    €€r7   Ú_kuldott_dbÚkiurites.<locals>._kuldott_dbñ  sg   ø€ Ø—8‘8œF×.Ñ.Ó/×6Ñ6Ü×"Ñ"×*Ñ*×.Ñ.Ô0@ÔBVÐ/WÓXÜ×"Ñ"×.Ñ.°$¸±-Ñ?ó÷ ‰e‹gðr6   é   r  )r§   Úkovetkezo_proba_atr  r$   rT   r+   r&   r  u    â�Œ LevÃ©lkÃ¼ldÃ©s sikertelen (#z, u   . prÃ³ba): u)   â�Œ Hiba az e-mail sor feldolgozÃ¡sakor: )Ar   r8   r{   Úbetoltrk   Úbetoltesi_hibara   rc   r   ÚKULDES_ALATT_LEJARAT_PERCrV   rW   r¬   rY   r§   r#  r)  Úupdater®   r¯   rž   Úletrehozva_atÚNAPI_RIPORT_LEJARAT_ORAÚALLAPOT_LEJARTÚis_ÚkonfiguraltÚorder_byrŸ   ÚidÚlimitr_   r¦   rœ   ÚALLAPOT_SZIMULALTr  rå   Újelszo_visszafejthetorE   r=   Úminr<   ÚmaxÚPRIORITAS_SURGOSÚTICK_MAXr’   rd   r  Úkuldr"  r  r`   r°   r¨   rb   r?   rL   r  ÚMAX_PROBALKOZASÚALLAPOT_HIBASr¡   rÌ   rZ   rÔ   ÚHIBA_VARAKOZAS_PERCr  )Ústatrò   Úkorlatr,   Úesedekesrˆ   r&  Úkuldott_oraÚkuldott_napÚ	keret_napÚ	keret_oraÚ
azonositokÚsurgosÚxÚnormal_darabÚtobbiÚsor_idÚlefoglalas_idejeÚ	lefoglaltr  ri   Ú	varakozasre   r%  s                         @@r7   ÚkiuritesrP  ³  sî  ù€ ð ¨¸QÈÐVWÐbcÑd€DÜ	‹€BðPÜ‹{ˆÜ!×(Ò(¨Ó,ˆÜ  Ó$ˆð
 ××Üð Ø×*Ñ*Ð+Ð+IðKô LàðJ 	�‰�
ðE œ	Ô*CÑDÑDˆØ
�‰”×#Ñ#Ó$×+Ñ+Ü×Ñ×&Ñ&Ô*>Ñ>Ü×Ñ×1Ñ1°FÑ:ó	
÷ ‰&Ô.¸tÑDÐZ_ˆ&Ñ
`Ø
�	‰	Œð Ÿ™¤&×"4Ñ"4Ó5×<Ñ<Ü×Ñ×&Ñ&Ô*;Ñ;Ü×Ñ×(Ñ(¨MÑ9Ü×Ñ×,Ñ,¨t´iÔF]Ñ6^Ñ/^Ñ^ó
÷ ‰&œ^Ø#,Ô-DÐ,EÐEð  "AñBà%*ð ð ,ð	 	ˆX‰ð 	�	‰	Œä×&Ñ&×.Ñ.Ô2CÑCÜ×Ñ×1Ñ1×5Ñ5°dÓ;¼v×?QÑ?Q×?dÑ?dÐhlÑ?lÑmñ
ˆð
 × × Ð Ø—x‘x¤× 2Ñ 2Ó3×:Ñ:¸8ÓD×MÑMÜ×&Ñ&×0Ñ0´&×2DÑ2D×2GÑ2GóIßINÉÈrË×SVÑSVÓSXòY�ä�oÔ&ÜÐHÔIÜ˜
 3§;¡; -Ð0Ô1Ü˜ §¡ Ð,Ô-Ü�oÔ&Ü/�”Ø"&�”Ü% cÔ*Ø�[Ó! QÑ&Õ!ñYð �I‰IŒKØð~ 	�‰�
ð{ ×*×*Üð |ô }àðt 	�‰�
ðo	¤	ð 	¬c÷ 	ð 	ñ "¤)°!Ñ"4Ó5ˆÙ!¤)°"Ñ"5Ó6ˆØ—N‘N [Ñ0ˆ	Ü˜Ÿ™¨Ñ3°YÓ?ˆ	Ü˜I qÓ)ˆˆW‰ð
 !#ˆ
Ø�q‹=Ø—X‘Xœf×0Ñ0Ó1×8Ñ8Øœ&×,Ñ,×6Ñ6Ô:JÑJóç‰h”v×)Ñ)×,Ñ,Ó-¯e©e´C¸	Ä8Ó4LÓ.MÏcÉcËeð ñ )/Ó/ª 1Ÿ$œ$©ˆJÐ/ô œ3œx¬#¨j«/Ñ9¸9ÄsÈ:ÃÑ;VÓWÐYZÓ[ˆØ˜!ÓØ—H‘HœV×/Ñ/Ó0×7Ñ7Øœ&×,Ñ,×6Ñ6Ô9IÑIóç‰h”v×)Ñ)×3Ñ3´V×5GÑ5G×5JÑ5JÓKÏEÉEÐR^ÓL_×`cÑ`cÓ`eð ð ¨Ó/ª AŸ4œ4©Ñ/Ñ/ˆJÞØðr 	�‰�
ôo !ˆFô  )›{ÐØŸ™¤×!3Ñ!3Ó4×;Ñ;Ü×"Ñ"×%Ñ%¨Ñ/´×1CÑ1C×1KÑ1KÔO`Ñ1`óç‰fÔ!5ÐM]Ø%5ñ7à).ð ð 0ð ð
 �I‰IŒKØ˜A‹~ÙØ—&‘&œ×+Ñ+¨VÓ4ˆCð"Ü% cÓ1�Ü!×&Ò& s¨EÔ2Ü.�”Ü"+£+�”Ø)-�Ô&Ø"&�”Ü% cÔ*Ø—	‘	”Ø�ZÓ  AÑ%Ö ñ/ !ðb ð 	�‰�
ùòG 0ùò 0øô8 ô Ø—‘”Ø—f‘fœV×/Ñ/°Ó8�Ø%(×%6Ñ%6×%;¸!¸qÑ$@�Ô!Ü%)¨!£W×%5Ñ%5Ð$6°b¼¸Q»ÀÀ¸¸Ð"G�”Ø"&�”Ü# A×&Ñ&¨#×*;Ñ*;¼Ó*NÜ"/�C”KØ-1�CÔ*Ø˜“M QÑ&“MØ——ð Ÿ™¤×!=Ñ!=Ó>×EÑEÜ"×8Ñ8×>Ñ>À#Ç/Á/ÑQóç ™&°U˜&Ñ;øä"3�C”KÜ 3´C¸×8IÑ8IÌ3ÔObÓKcÓ4dÐghÑ4hÑ i�IÜ-6«[¼9ÈYÑ;WÑ-W�CÔ*ØÐ)Ó*¨aÑ/Ó*Ø—	‘	”ÜÐ8¸¸ÀÀ3×CTÑCTÐBUÐU`Ðad×apÑapÐ`qÐrÔsÜ'¨×*Ñ*¬¸q×/AÑ/Aßö 0BÖ*ûð/ûô4 ó Ø
�‰ŒÜÐ9¼$¸q»'×:JÑ:JÐ9KÈ2ÈaÈSÐQÔRØŒà
�‰�
ûðûð
 	�‰�
ús–   —Ae, Á>K:e, Î	e, Î7De, Ó]Ó"C)e, ×]× e, ×>Ce, ÛA2]Ü8e, Ý
e, Ýe)Ý$G*e$åe, å$e)å)e, å,
gå65gæ+gæ,g	 çgçg	 ç	gc                  ó:  • SSSS.n [        5       n [        5       n[        R                  nU S==   UR	                  U5      R                  UR                  R                  [        [        [        /5      UR                  U[        [        S9-
  :  5      R                  SS9-  ss'   U S==   UR	                  U5      R                  UR                  [        :H  UR                  U[        [         S9-
  :  5      R                  SS9-  ss'   U S==   UR	                  U5      R                  UR                  R                  ["        /5      UR                  U[        [        S9-
  :  5      R                  SS9-  ss'   U S==   UR	                  U5      R                  UR                  [$        :H  UR                  U[        [&        S9-
  :  5      R                  SS9-  ss'   [(        R*                  " 5       nU[        [,        S9-
  n[        R.                  nUR	                  U5      R1                  5        HG  nUR2                  =(       d    UR4                  nX…:  d  M)  UR                  U5        U S==   S-  ss'   MI     UR7                  5         URC                  5         [D        RF                  " 5       U S'   U $ ! [8         a>  n	UR;                  5         [=        S	[?        U	5      R@                   S
U	 35         Sn	A	NmSn	A	ff = f! URC                  5         f = f)uÂ   RÃ©gi sorok tÃ¶rlÃ©se: az elkÃ¼ldÃ¶tt/szimulÃ¡lt levelek 30 nap, a hibÃ¡sak 90 nap utÃ¡n; a rÃ©gi
ismÃ©tlÃ©s-szÅ±rÃ©si bejegyzÃ©sek Ã©s Ã¼temezett-futÃ¡s sorok szintÃ©n. Naponta egyszer hÃ­vjuk.r   )ÚlevelekÚ	allapotokÚfutasokrR  )rÎ   FrÑ   rS  r-   u(   â�Œ Hiba az e-mail sor takarÃ­tÃ¡sakor: rT   NrT  )$r   r8   rW   r¬   rV   rY   r§   r[   r"  r6  r0  r.  r   ÚELKULDOTT_MEGTARTAS_NAPrÔ   r>  ÚHIBAS_MEGTARTAS_NAPÚALLAPOT_OSSZEGEZVEr­   ÚVISSZATARTOTT_MEGTARTAS_NAPr   ÚtodayÚALLAPOT_MEGTARTAS_NAPrÌ   r_   rÙ   rË   r¯   r`   r°   ra   rb   r?   rc   Úutemezo_utilsÚ	takaritas)
r@  re   r%  r½   rÉ   ÚhatarÚArˆ   Úutolsori   s
             r7   r\  r\  N  s‘  € ð  q°QÑ7€DÜ	‹€BðÜ‹{ˆÜ×ÑˆØˆY‹˜2Ÿ8™8 A›;×-Ñ-Ø�I‰I�M‰MÔ+Ô->ÄÐOÓPØ�O‰O˜d¤YÔ4KÑ%LÑLÑLóNçNTÉfÐinÈfÐNoñ	p‹ð 	ˆY‹˜2Ÿ8™8 A›;×-Ñ-Ø�I‰IœÑ&Ø�O‰O˜d¤YÔ4GÑ%HÑHÑHóJçJPÉ&ÐejÈ&ÐJkñ	l‹ð 	ˆY‹˜2Ÿ8™8 A›;×-Ñ-Ø�I‰I�M‰MÔ-Ð.Ó/Ø�O‰O˜d¤YÔ4KÑ%LÑLÑLóNçNTÉfÐinÈfÐNoñ	p‹ð 	ˆY‹˜2Ÿ8™8 A›;×-Ñ-Ø�I‰IÔ-Ñ-Ø�O‰O˜d¤YÔ4OÑ%PÑPÑPóRçRXÑRXÐmrÐRXÐRsñ	t‹ô �ZŠZ‹\ˆØ”YÔ$9Ñ:Ñ:ˆÜ×(Ñ(ˆØ—8‘8˜A“;—?‘?Ö$ˆCØ×+Ñ+×F¨s×/FÑ/FˆFØ�~Ø—	‘	˜#”Ø�[Ó! QÑ&Õ!ñ	 %ð
 	�	‰	Œð
 	�‰Œ
Ü#×-Ò-Ó/€Dˆ�OØ€Køô ó RØ
�‰ŒÜÐ8¼¸a»×9IÑ9IÐ8JÈ"ÈQÈCÐP×QÑQûðRûð 	�‰�
ús0   ’IJ= É!2J= Ê=
LË4L Ë;L Ì LÌL ÌLc                 óR  ^ ^• [        5       n[        R                  mUU 4S jnT R                  T5      R	                  TR
                  [        :H  5      R                  TR                  5      R                  5       nU" TR
                  [        :H  5      U" TR
                  [        :H  5      U" TR
                  [        :H  5      U" TR
                  [        :H  5      U" TR
                  [        :H  5      U" TR
                  [        :H  5      U" TR
                  R                  [         [        /5      TR"                  U[%        SS9-
  :¬  5      U" TR
                  R                  [         [        /5      TR"                  U[%        SS9-
  :¬  5      U(       a  UR&                  S.	$ SS.	$ )u*   Az "KimenÅ‘ levelek" oldal Ã¶sszesÃ­tÅ‘je.c                  ó\   >• TR                  T5      R                  " U 6 R                  5       $ rè   )rV   rY   r$  )Úfeltr½   re   s    €€r7   Ú_dbÚstatisztika.<locals>._dby  s%   ø€ Ø�x‰x˜‹{×!Ò! 4Ð(×.Ñ.Ó0Ð0r6   r-   r  r(  N)	r"   r#   r&   r,   r(   r%   Úelkuldve_oraÚelkuldve_napÚlegregebbi_varakozo)r8   rW   r¬   rV   rY   r§   r®   r3  r4  r†   r#  r>  r0  r­   r6  r[   r"  r  r   r.  )re   r%  rc  Ú
legregebbir½   s   `   @r7   Ústatisztikari  t  sf  ù€ ä‹;€DÜ×Ñ€Aö1ð —‘˜!“×#Ñ# A§I¡IÔ1BÑ$BÓC×LÑLÈQÏTÉTÓR×XÑXÓZ€Já˜Ÿ™Ô&7Ñ7Ó8Ù˜AŸI™IÔ)=Ñ=Ó>Ù�Q—Y‘Y¤-Ñ/Ó0Ù�a—i‘i¤>Ñ1Ó2Ù˜AŸI™IÔ)=Ñ=Ó>Ù˜Ÿ™Ô&7Ñ7Ó8Ù˜AŸI™IŸM™MÔ+;Ô=QÐ*RÓSÐUV×UbÑUbÐfjÔmvÐ}~ÑmÑfÑUó  AÙ˜AŸI™IŸM™MÔ+;Ô=QÐ*RÓSÐUV×UbÑUbÐfjÔmvÐ}ñ  nAñ  gAñ  VAó  BÞ;E˜z×7Ñ7ñ
ð 
ð LPñ
ð 
r6   r5  c                 óä   • U R                  [        R                  5      R                  [        R                  R                  R                  5       5      R                  U5      R                  5       $ rè   )rV   rW   r¬   r3  r4  Údescr5  r_   )re   r5  s     r7   Úlegutobbi_levelekrl  Š  sL   € Ø�8‰8”F×&Ñ&Ó'×0Ñ0´×1CÑ1C×1FÑ1F×1KÑ1KÓ1MÓN×TÑTÐUZÓ[×_Ñ_ÓaÐar6   c                 ód  • U R                  [        R                  5      R                  [        R                  R                  [
        :H  [        [        R                  R                  R                  S5      [        R                  R                  S:g  5      5      R                  [        SSSS.SS9$ )u^   A "hibas" leveleket Ãºjra "varakozik" Ã¡llapotba teszi (a rendszeradmin gombja). NEM commitol.Nr'   r   )r§   r¨   r)  r  FrÑ   )rV   rW   r¬   rY   r§   r>  r   rž   r1  r-  r®   )re   s    r7   Úhibasak_ujrasorba_allitasarn  Ž  s’   € ð �8‰8”F×&Ñ&Ó'×.Ñ.Ü×Ñ×"Ñ"¤mÑ3ÜŒF×Ñ×(Ñ(×,Ñ,¨TÓ2´F×4FÑ4F×4PÑ4PÐT_Ñ4_Ó`óbçbhÑbhÜ%¸ÐQUÐfjÑkØ!ð cið c#ð#r6   rè   )r/   N)r  )^rC   rÁ   rî   rì   r	  Údataclassesr   r   r   r   r   Úemail.mime.multipartr   Úemail.mime.textr	   Úemail.utilsr
   r   Útypingr   r   r   r   r   Ú
sqlalchemyr   Úsqlalchemy.excr   r{   rW   r[  Údatabaser   r\   r]   r^   rD   rG   rH   r;  r=  r?  r,  rU  rV  rZ  r®   r#  r"  r6  r>  rä   r­   rW  r©   rX  r0  r/  r:  ÚPRIORITAS_NORMALÚPRIORITAS_ALACSONYÚcompiler“   r8   r:   rE   rR   rk   rL   rx   r�   r…   r‡   r‰   r�   rš   rµ   rÈ   rÏ   rÕ   Úobjectrâ   rå   rñ   ÚEmailBeallitasokr  r`   r  r  rP  r\  ri  rl  rn  r5   r6   r7   Ú<module>r|     sª  ðñ+óX Û Û 	Û Ý !ß 8Ó 8Ý .Ý $ß .ß 8Õ 8å å )ã Û Û Ý !ð (Ð Ø)Ð Ø)Ð à€ØÐ ØÐ ð €à€â.Ð àÐ àÐ ØÐ ØÐ àÐ Ø%Ð ØÐ ØÐ Ø€Ø'˜=Ð Ø%Ð Ø!Ð ð *4°[Ð(AÐ %Ø!Ð Ø€ð Ð àÐ ØÐ ØÐ à�zŠzÐRÓS€ð;�8ô ;ð ÷*ð *ó ð*ð˜3ð  3ô ñ õ ð.˜d 3¨ 8™nð °°t¸CÀ¸H±~ÀtÈCÁyÐ7PÑ1Qô ð,˜d 3¨ 8™nð °xÀ±}ð ÈÈcÉô ð$ :Ð ð> dô >ð
h¨4ð h¸(À3¹-ð hÈDô hð ¨¡ð °$°s±)ô ð$ YcØ!1ÈtÐX\Ø-1ñ0˜8 C™=ð 0°ð 0À#ð 0ÐRUð 0Øð0Ø?GÈ¹}ð0à% c™]ð0à69õ0ðlC Tð C¸ð CÀô Cð cð °xÀ±}ð ÐTWð Ð]að Ðfjô ð.(¨Cô (ð*¨3ð *¸¸eÀCÈÀKÑ>PÑ9Qð *Ðadð *Ø#ð*Ø(-¨d°6©l¸CÐ.?Ñ(@ô*ô`Dð0 3ð 0¨3ô 0ðÐ 1× BÑ Bð À}ô ð$˜	ð  dô ð&"�yð " Tô "ðU�$�s˜C�x‘.ô Uðv#�4˜˜S˜‘>ô #ðL�t˜C ˜KÑ(ô ñ,b õ bð# cõ #r6   