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
18 """Sends an URL to a Webservice"""
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
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]
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]
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
68