o
    y
j)                      @   s   d Z ddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZ ddlmZ ddlmZmZmZ eeZdefdd	Zd
eddfddZddededdfddZddededdfddZdS )z9E-Mail-Versand: Rechnung an Mitglied, SEPA-XMLs an Admin.    N)MIMEApplication)MIMEMultipart)MIMEText)MitgliedSEX_MALE
SEX_FEMALEreturnc                 C   s  t | jddp	d }t | jddpd  }t | jddp%d }t | jddp2d}|rK|rK|p;d}|||dkrDdnd|||d	S tjtjt	d
d}i }tj
|rvztt|dd }W n	 tyu   Y nw |dptjdd  }|dptjdd }|dptjdd}	|	rt|	n|dkrdnd}
|dptjdd }|dptjdd}|dptjddp| }|||
|||d	S )u   Löst SMTP-Zugangsdaten auf (Priorität: Config → smtp_config.json → Env-Vars).

    Gibt ein Dict mit Keys: mode, server, port, user, password, from_address.
    SMTP_Server 	SMTP_Mode	SMTP_User	SMTP_PassstarttlsiK  i  )modeserverportuserpasswordfrom_addressz..zsmtp_config.jsonutf-8encodingr   EEG_SMTP_MODEsslr   EEG_SMTP_SERVERr   EEG_SMTP_PORTusernameEEG_SMTP_USERNAMEr   EEG_SMTP_PASSWORDr   EEG_SMTP_FROM)strconfiggetstriplowerospathjoindirname__file__existsjsonloadsopenread	Exceptionenvironint)system_session_server_session_mode_session_user_session_passr   _smtp_cfg_path
_smtp_filer   	_port_rawr   r   r   	from_addr r;   g/sessions/vibrant-dreamy-cray/mnt/energie-durchdacht/EEG-Abrechnung/v1.07b_upload/core/email_handler.py_resolve_smtp   s>   
  r=   smtpc                 C   s   | d r| d st d| d dkrLtj| d | d dd$}|  |  |  || d | d	  || W d
   d
S 1 sEw   Y  d
S tj| d | d dd}|| d | d	  || W d
   d
S 1 ssw   Y  d
S )z8Stellt die SMTP-Verbindung her und sendet die Nachricht.r   r   uC   SMTP-Konfiguration unvollständig (Server oder Benutzername fehlt).r   r   r   
   )timeoutr   N)
ValueErrorsmtplibSMTPehlor   loginsend_messageSMTP_SSL)r>   msgr   r;   r;   r<   
_smtp_send>   s   ""rI   mitglied
test_emailc              
   C   s
  t | }t| jdd}| jdd pd}t }tj||d f|d< |r+|n|j	}||d< |r8||d	< tj
 |d
< tj |d< tj| jdd}zt|dd}	t|	}
W d   n1 sfw   Y  W n ty}   dddddd}
Y nw |jtkr|
ddn|jtkr|
ddn|
dd}|jdkrdnd}||jt| jddt| jt|jddd| jd|d }|
d!| jd"d#}|
d$d}| D ]\}}|||}|||}q|}|rd%| d&|j }||d'< |}|r
|d(|j	 d)7 }|t |d* tj| j!d+|j" d,|j# d-}t|d.!}t$|% d/d0}|j&d1d2tj'|d3 || W d   n	1 sMw   Y  zt(|| W n t)j*t+fyw } zt,-d4|d  d5|   d}~ww t,.d6|d  d7 dS )8zVersendet die Rechnung (PDF) per E-Mail an das Mitglied.

    test_email: falls angegeben, wird die Mail an diese Adresse gesendet (Test-Modus).
    VereinsnameEEGMail_ReplyTor
   Nr   FromTozReply-To
Message-IDDateConfigzemail_vorlage.jsonr   r   u$   Rechnung {Periode} – {Vereinsname}LieberLiebezLiebe/ru   {Anrede} {Name},

im Anhang befindet sich Ihre Rechnung von {Vereinsname}.
Der Betrag von {Betrag} € wird am {Datum} {Aktion}.

Freundliche Grüße,
{Vereinsname})betreffanrede_manrede_wanrede_defaultbodyrW   rX   rY   r   	abgebuchtgutgeschriebenz.2f.,z%d.%m.%Y)z{Anrede}z{Name}z{Vereinsname}z	{Periode}z{Betrag}z{Datum}z{Aktion}rV   MAIL_BetreffRechnungrZ   z[TEST]     – Subjectu'   

(TEST – ursprüngliche Empfänger: )plain	Rechnung__z.pdfrbpdf_subtypeContent-Disposition
attachmentfilenamezSMTP-Fehler beim Senden an : z
E-Mail an 
 gesendet.)/r=   r    r!   r"   r#   r   emailutils
formataddrMail
make_msgid
formatdater%   r&   r'   	main_pathr-   r+   loadr/   Sexr   r   KostenNameperiodeabsreplacedatum_abbuchungstrftimeitemsattachr   folder_rechnungenRechnungsnummerName4Rechnungr   r.   
add_headerbasenamerI   rB   SMTPExceptionOSErrorloggererrorinfo)r2   rJ   rK   r>   vereinsnamereply_torH   	recipientvorlage_pathvfvorlageanredeaktionreplacementsbetreff_tmpl	body_tmplkvrV   rZ   pdf_pathfrl   er;   r;   r<   
send_emailP   s   




r   r
   to_addrr|   c              
   C   s  t | }tttj| jd}|st	d dS t
| jdd}|p-t
| jdd}t }tj||d f|d	< ||d
< tj |d< tj |d< d| d| d|d< d| d| d| }|t|d |D ]0}	t|	d!}
t|
 dd}|jddtj|	d || W d   n1 sw   Y  qqzt|| W n tjtfy } ztd| d|   d}~ww t dt!| d| d dS ) uE   Sendet alle SEPA-XML-Dateien aus folder_sepa als Anhänge an to_addr.z*.xmlz;send_sepa_email: Keine XML-Dateien in folder_sepa gefunden.NrL   rM   Perioder
   r   rO   rP   rQ   rR   zSEPA-Dateien ra   u    –rb   uT   Sehr geehrte Damen und Herren,

anbei die SEPA-Dateien für den Abrechnungszeitraum z von u   .

Mit freundlichen Grüßen
rd   rg   xmlri   rk   rl   rm   z!SMTP-Fehler beim SEPA-Versand an ro   zSEPA-E-Mail mit u    Anhängen an rp   )"r=   sorted_globglobr%   r&   r'   folder_separ   warningr    r!   r"   r   rq   rr   rs   ru   rv   r#   r   r   r-   r   r.   r   r   rI   rB   r   r   r   r   len)r2   r   r|   r>   	xml_filesr   periode_strrH   rZ   xml_pathr   attr   r;   r;   r<   send_sepa_email   sN   

 r   )N)r
   )__doc__email.utilsrq   r   r   r+   loggingr%   rB   email.mime.applicationr   email.mime.multipartr   email.mime.textr   core.modelsr   r   r   	getLogger__name__r   dictr=   rI   r    r   r   r;   r;   r;   r<   <module>   s     
,W