2020-01-05 13:15:02 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								import  smtplib 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								from  datetime  import  datetime 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								from  email . mime . multipart  import  MIMEMultipart 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								from  email . mime . text  import  MIMEText 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								from  email . header  import  Header 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 08:19:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								from  geruecht . logger  import  getDebugLogger 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-26 21:13:44 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:23:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								debug  =  getDebugLogger ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-05 13:15:02 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								class  EmailController ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-26 21:13:44 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  __init__ ( self ,  smtpServer ,  user ,  passwd ,  crypt ,  port = 587 ,  email = " " ) : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:23:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        debug . info ( " init email controller " ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-05 13:15:02 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        self . smtpServer  =  smtpServer 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        self . port  =  port 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        self . user  =  user 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        self . passwd  =  passwd 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-26 21:13:44 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        self . crypt  =  crypt 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-05 13:15:02 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        if  email : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            self . email  =  email 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            self . email  =  user 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:23:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        debug . debug ( " smtpServer is  {{   {}  }}, port is  {{   {}  }}, user is  {{   {}  }}, crypt is  {{   {}  }}, email is  {{   {}  }} " . format ( smtpServer ,  port ,  user ,  crypt ,  self . email ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-05 13:15:02 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    def  __connect__ ( self ) : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:23:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        debug . info ( ' connect to email server ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-26 21:13:44 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        if  self . crypt  ==  ' SSL ' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            self . smtp  =  smtplib . SMTP_SSL ( self . smtpServer ,  self . port ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            log  =  self . smtp . ehlo ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:23:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            debug . debug ( " ehlo is  {{   {}  }} " . format ( log ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-26 21:13:44 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        if  self . crypt  ==  ' STARTTLS ' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            self . smtp  =  smtplib . SMTP ( self . smtpServer ,  self . port ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            log  =  self . smtp . ehlo ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:23:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            debug . debug ( " ehlo is  {{   {}  }} " . format ( log ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-26 21:13:44 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            log  =  self . smtp . starttls ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:23:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            debug . debug ( " starttles is  {{   {}  }} " . format ( log ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-26 21:13:44 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        log  =  self . smtp . login ( self . user ,  self . passwd ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:23:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        debug . debug ( " login is  {{   {}  }} " . format ( log ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-05 13:15:02 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-02-27 14:01:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  jobTransact ( self ,  user ,  jobtransact ) : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:23:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        debug . info ( " create email jobtransact  {{   {}  }}for user  {{   {}  }} " . format ( jobtransact ,  user ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-27 14:01:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        date  =  ' {} . {} . {} ' . format ( jobtransact [ ' date ' ] . day ,  jobtransact [ ' date ' ] . month ,  jobtransact [ ' date ' ] . year ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        from_user  =  ' {}   {} ' . format ( jobtransact [ ' from_user ' ] . firstname ,  jobtransact [ ' from_user ' ] . lastname ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        subject  =  ' Bardienstanfrage am  {} ' . format ( date ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        text  =  MIMEText ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            " Hallo  {}   {} , \n " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            " {}  fragt, ob du am  {}  zum Bardienst teilnehmen willst. Beantworte die Anfrage im Userportal von Flaschengeist. " . format ( user . firstname ,  user . lastname ,  from_user ,  date ) ,  ' utf-8 ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:23:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        debug . debug ( " subject is  {{   {}  }}, text is  {{   {}  }} " . format ( subject ,  text . as_string ( ) ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-27 14:01:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        return  ( subject ,  text ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    def  credit ( self ,  user ) : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:23:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        debug . info ( " create email credit for user  {{   {}  }} " . format ( user ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-27 14:01:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        subject  =  Header ( ' Gerücht, bezahle deine Schulden! ' ,  ' utf-8 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        sum  =  user . getGeruecht ( datetime . now ( ) . year ) . getSchulden ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  sum  <  0 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            type  =  ' Schulden ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            add  =  ' Bezahle diese umgehend an den Finanzer. ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            type  =  ' Guthaben ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            add  =  ' ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        text  =  MIMEText ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            " Hallo  {}   {} , \n Du hast  {}  im Wert von  {:.2f}  €.  {} \n \n Diese Nachricht wurde automatisch erstellt. " . format ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                user . firstname ,  user . lastname ,  type ,  abs ( sum )  /  100 ,  add ) ,  ' plain ' ,  ' utf-8 ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:23:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        debug . debug ( " subject is  {{   {}  }}, text is  {{   {}  }} " . format ( subject ,  text . as_string ( ) ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-27 14:01:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        return  ( subject ,  text ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    def  sendMail ( self ,  user ,  type = ' credit ' ,  jobtransact = None ) : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:23:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        debug . info ( " send email to user  {{   {}  }} " . format ( user ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-05 13:15:02 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        try : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  user . mail  ==  ' None '  or  not  user . mail : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:23:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                debug . warning ( " user  {{   {}  }} has no email-address " . format ( user ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-05 13:15:02 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								                raise  Exception ( " no valid Email " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            msg  =  MIMEMultipart ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            msg [ ' From ' ]  =  self . email 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            msg [ ' To ' ]  =  user . mail 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-27 14:01:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  type  ==  ' credit ' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                subject ,  text  =  self . credit ( user ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            elif  type  ==  ' jobtransact ' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                subject ,  text  =  self . jobTransact ( user ,  jobtransact ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-05 13:15:02 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            else : 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-27 14:01:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                raise  Exception ( " Fail to send Email. No type is set. user= {} , type= {}  , jobtransact= {} " . format ( user ,  type ,  jobtransact ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            msg [ ' Subject ' ]  =  subject 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-05 13:15:02 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            msg . attach ( text ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-27 14:01:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:23:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            debug . debug ( " send email  {{   {}  }} to user  {{   {}  }} " . format ( msg . as_string ( ) ,  user ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-05 13:15:02 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            self . __connect__ ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            self . smtp . sendmail ( self . email ,  user . mail ,  msg . as_string ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            return  { ' error ' :  False ,  ' user ' :  { ' userId ' :  user . uid ,  ' firstname ' :  user . firstname ,  ' lastname ' :  user . lastname } } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        except  Exception : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-10 18:23:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            debug . warning ( " exception in send email " ,  exc_info = True ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-19 20:47:44 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            return  { ' error ' :  True ,  ' user ' :  { ' userId ' :  user . uid ,  ' firstname ' :  user . firstname ,  ' lastname ' :  user . lastname } }