Package PyFoam :: Package Infrastructure :: Package RunHooks :: Module MailToAddress
[hide private]
[frames] | no frames]

Source Code for Module PyFoam.Infrastructure.RunHooks.MailToAddress

 1  """Send an EMail to a specified address""" 
 2   
 3  import sys 
 4   
 5  from PyFoam.Infrastructure.RunHook import RunHook 
 6  from PyFoam.ThirdParty.six import PY3,iteritems,print_ 
 7   
 8  from PyFoam.ThirdParty.six.moves import http_client as httplib 
 9   
10  from PyFoam.Error import error 
11  from PyFoam.Basics.TemplateFile import TemplateFile 
12  from PyFoam.ThirdParty.pyratemp import TemplateRenderError 
13   
14  from email.message import Message 
15  import smtplib 
16   
17 -class MailToAddress(RunHook):
18 """Sends an URL to a Webservice"""
19 - def __init__(self,runner,name):
20 RunHook.__init__(self,runner,name) 21 22 self.server=self.conf().get("smtpserver") 23 self.sendTo=self.conf().get("to") 24 self.sentFrom=self.conf().get("from") 25 self.templates={} 26 self.templates["subject"]=self.conf().get("subject") 27 self.templates["message"]=self.conf().get("message") 28 self.mailFields={} 29 mf="mailfields_" 30 for name,val in list(self.conf().items()): 31 if name.find(mf)==0: 32 self.mailFields[name[len(mf):]]=val
33
34 - def __call__(self):
35 texts={} 36 for n,val in iteritems(self.templates): 37 template=TemplateFile(content=val, 38 expressionDelimiter="|-", 39 encoding="ascii") 40 try: 41 texts[n]=str(template.getString(self.runner.getData())) 42 except TemplateRenderError: 43 e = sys.exc_info()[1] # Needed because python 2.5 does not support 'as e' 44 error("Template error",e,"while rendering",val) 45 46 47 msg=Message() 48 msg["To"]=self.sendTo 49 msg["From"]=self.sentFrom 50 msg["Subject"]=texts["subject"] 51 for n,v in iteritems(self.mailFields): 52 msg[n]=v 53 msg.set_payload(texts["message"]) 54 55 print_("Connecting to SMTP-server",self.server) 56 57 try: 58 s=smtplib.SMTP(self.server) 59 except: 60 e = sys.exc_info()[1] # Needed because python 2.5 does not support 'as e' 61 error("Could not connect to",self.server,":",e) 62 63 print_("Sending mail") 64 r=s.sendmail(self.sentFrom,self.sendTo.split(","),msg.as_string()) 65 print_("\n",self.name,"Sent mail to",self.sendTo," Response:",r)
66 67 # not yet tested with python3 68