
    xi                     x   d dl Z d dlZd dlZd dlmZmZmZ d dlZd dlZ	h dZ
h dZ ed      ZdedefdZd	edefd
Zdedeeeef   fdZdededee   fdZdedee   fdZdedefdZdedefdZdedeeef   fdZedk(  r4d dlZ eej6                  d         Z e ej<                  ed             yy)    N)DictTupleList>   yopmail.comtempmail.comtrashmail.commailinator.comsharklasers.com10minutemail.comguerrillamail.com>
   no-replyinfomailadminhellosalesofficecontactnoreplysupportzCabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._%+-localreturnc                     dt        |       cxk  rdk  sy yt        d | D              ry| d   dk(  s| d   dk(  sd| v ryy	)
N   @   Fc              3   ,   K   | ]  }|t         v  y wN)LOCAL_PART_ALLOWED.0chs     =/var/www/webhook.estador.de/web/meta/checker/email_checker.py	<genexpr>z'_is_valid_local_part.<locals>.<genexpr>   s     
8B2''
8s   r   .z..T)lenanyr   s    r"   _is_valid_local_partr)      sK    U!r!5!5

8%
88Qx3%)s*demE    domain_asciic                 &   | rt        |       dkD  sd| vry| j                  d      }t        |d         dk  s|d   j                         sy|D ]A  }dt        |      cxk  rdk  s y  yt        d |D              r y|d	   d
k(  s	|d   d
k(  sA y y)N   r$   Fr%      r   ?   c              3   L   K   | ]  }|j                         xs |d k(     yw)-N)isalnumr   s     r"   r#   z)_is_valid_domain_ascii.<locals>.<genexpr>   s"     =2BJJL-B#I.=s   "$r   r1   T)r&   splitisalphar'   )r+   labelslabs      r"   _is_valid_domain_asciir7      s    3|,s2c6MV[$F
6":&*"4"4"6u 9SX##U#U===eq6S=CGsN59 r*   addrc                 b   | j                         } d| vrt        d      | j                  d      }t        |      dk7  rt        d      |d   |d   j                         }}t	        |      st        d      	 t        j                  |j                               j                  d      }t        |      st        d
      t        |      dz   t        |      z   dkD  rt        d      |j                          d| |j                         |fS # t
        j                  $ r t        d	      w xY w)N@zMissing '@'r.   zMultiple '@'r   r   zInvalid local-partasciizInvalid IDN domainzInvalid domain   zToo long)strip
ValueErrorr3   r&   r)   idnaencodelowerdecode	IDNAErrorr7   )r8   parts	local_raw
domain_rawr+   s        r"   normalize_emailrG   !   s   ::<D
$j77JJsOE
5zQj88!!HeAhnn&6zI	**=Q2R,R/{{:#3#3#56==gF ",/zBR7S1S
9~aL))C/z*7M1Moo ,0)//2C\QQ	 >> /-../s   92D D.namerrtypec                     t         j                  j                  | |      D cg c]  }|j                          c}S c c}w # t        $ r g cY S w xY wr   )dnsresolverresolveto_text	Exception)rH   rI   rs      r"   
dns_lookuprQ   0   s<    &)ll&:&:4&HII	IIRis   "A =A A AAdomainc                 X   g }	 t         j                  j                  | d      }|D ]5  }|j                  t	        |j
                        j                  d             7 |st        | d      }t        | d      }||z   }|S # t        $ r! t        | d      }t        | d      }||z   }Y |S w xY w)z5Fast version: only resolve MX/A/AAAA, no SMTP probingMXr$   AAAAA)	rK   rL   rM   appendstrexchangerstriprQ   rO   )rR   mxanswersrP   aaaaas         r"   get_mail_hostsr_   4   s    	B
,,&&vt4@A"))C

O$:$:3$?@@63'Aff-DTB
 I	  vs#&&)XI	s   A9A? ?&B)(B)c                     | t         v S r   )
DISPOSABLE)rR   s    r"   is_disposablerb   D   s    v/C(Cr*   c                 T    | j                  dd      d   j                         t        v S )N+r   r   )r3   rA   ROLE_PREFIXESr(   s    r"   is_role_accountrf   E   s&    C0B10E0K0K0MQ^0^)^r*   c                    | dg dg ddddg dd}	 t        |       \  }}}||d<   t	        |      rd|d<   |d	   j                  d       t        |      rd|d<   |d	   j                  d       t        |      }||d<   t        d t        |d      D              |d<   t        d t        d| d      D              |d<   |s d|d<   |d	   j                  d       d|d
<   |S d|d<   d}|d   r|dz  }|d   r|dz  }t        dt        d|            |d
<   |S # t        $ r3}d|d<   |d	   j                  t        |             d|d
<   |cY d}~S d}~ww xY w)zw
    Fast version: only syntax, disposable, role account, MX/A/AAAA existence.
    Skips SMTP probing + catch-all.
    unknownNFr   )inputstatusreasonsrR   mx_hostshas_spf	has_dmarcrole_accountdisposable_domain
smtp_notes
confidencerR   invalidrj   rk   rr   Tro   rp   rl   c              3   @   K   | ]  }d |j                         v   yw)zv=spf1NrA   r    txts     r"   r#   z&verify_email_strong.<locals>.<genexpr>o   s     VSSYY[0V   TXTrm   c              3   @   K   | ]  }d |j                         v   yw)zv=dmarc1Nru   rv   s     r"   r#   z&verify_email_strong.<locals>.<genexpr>p   s     f:4frx   z_dmarc.rn   no_mx_or_a_recordsyntax_checkedF      
   d   )rG   r>   rW   rX   rf   rb   r_   r'   rQ   maxmin)r8   outfullr   rR   vemx_list	base_confs           r"   verify_email_strongr   H   s    "C-d3eVH u"NIn-V#' I12V$GC
O VJvu<UVVC	Nf
WU[T\K]_d@effC !HI12L J )H	"#Y"_Y~	R	3sI#67LJA  !HIc"g&L
	s   D 	E(EEE__main__r   r.   )indent)randomstringjsontypingr   r   r   r?   dns.resolverrK   ra   re   setr   rX   boolr)   r7   rG   rQ   r_   rb   rf   objectr   __name__sysargvresultprintdumps r*   r"   <module>r      s     $ $ 
 ^_     R# R%C"4 R S  #  $s)  3 49   D# C$ C ^3 ^4 ^6c 6d3;&7 6r z !-F	*$**VA
&' r*   