197 lines
5.3 KiB
Python
197 lines
5.3 KiB
Python
#!/usr/bin/python
|
|
|
|
import smtplib
|
|
import urllib
|
|
import urllib2
|
|
from email.MIMEMultipart import MIMEMultipart
|
|
from email.MIMEBase import MIMEBase
|
|
from email.MIMEText import MIMEText
|
|
from email import Encoders
|
|
from PyPDF2 import PdfFileWriter, PdfFileReader
|
|
import StringIO
|
|
import json
|
|
import pdb
|
|
import time
|
|
|
|
#defined variable
|
|
g_url ="http://localhost/smartlab_demo/su/emailresult/get"
|
|
g_url_config ="http://localhost/smartlab_demo/su/emailresult/config"
|
|
g_url_update ="http://localhost/smartlab_demo/su/emailresult/update"
|
|
|
|
#email client
|
|
ge_url="http://localhost/smartlab_demo/su/emailclient/get"
|
|
ge_url_config="http://localhost/smartlab_demo/su/emailclient/config"
|
|
ge_url_update="http://localhost/smartlab_demo/su/emailclient/update"
|
|
|
|
subject = "SmartLab Laboratory Result"
|
|
|
|
def sendEmailClient(rec,subject,i_msg,i_att,support):
|
|
server = ge_server
|
|
r_addrs = [rec]
|
|
a_support = support.split(",")
|
|
to_addrs = r_addrs + a_support
|
|
|
|
xfrom = ge_from
|
|
msg = MIMEMultipart()
|
|
msg['From'] = g_from
|
|
msg['To'] = rec
|
|
msg['Cc'] = support
|
|
msg['Subject'] = "Smartlab L-Series Client Email"
|
|
msg.attach(MIMEText(i_msg))
|
|
a_att=i_att.split(",")
|
|
for att in a_att :
|
|
pdb.set_trace()
|
|
if (att != "" ) :
|
|
try :
|
|
part = MIMEBase('application', "octet-stream")
|
|
fn = att.encode('ascii')
|
|
part.set_payload( open(fn,"rb").read() )
|
|
Encoders.encode_base64(part)
|
|
part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(fn))
|
|
msg.attach(part)
|
|
except:
|
|
noop
|
|
|
|
rst = True
|
|
try :
|
|
s = smtplib.SMTP(server,587)
|
|
s.set_debuglevel(7)
|
|
s.starttls()
|
|
s.login(ge_login,ge_password)
|
|
s.sendmail(xfrom, to_addrs, msg.as_string())
|
|
s.close()
|
|
except:
|
|
rst =False
|
|
return rst
|
|
|
|
|
|
|
|
def sendEmail(rec,subject,i_msg,url,fname, pdf_pwd):
|
|
server = g_server
|
|
to_addrs = [rec]
|
|
xfrom = g_from
|
|
msg = MIMEMultipart()
|
|
msg['From'] = g_from
|
|
msg['To'] = rec
|
|
msg['Subject'] = "Smartlab L-Series Result Report"
|
|
msg.attach(MIMEText(i_msg))
|
|
u = urllib2.urlopen(url)
|
|
|
|
inStr = StringIO.StringIO(u.read())
|
|
outstr = StringIO.StringIO()
|
|
inp_pdf = PdfFileReader(inStr)
|
|
output = PdfFileWriter()
|
|
for i in range(0,inp_pdf.getNumPages()) :
|
|
output.addPage(inp_pdf.getPage(i))
|
|
output.encrypt(pdf_pwd)
|
|
output.write(outstr)
|
|
buff = outstr.getvalue()
|
|
inStr.close()
|
|
outstr.close()
|
|
|
|
part = MIMEBase('application', 'pdf')
|
|
part.set_payload(buff)
|
|
Encoders.encode_base64(part)
|
|
part.add_header('Content-Disposition',
|
|
'attachment; filename="%s"' % fname )
|
|
msg.attach(part)
|
|
|
|
rst = True
|
|
try :
|
|
s = smtplib.SMTP(server,587)
|
|
#s.set_debuglevel(7)
|
|
s.starttls()
|
|
s.login(g_login,g_password)
|
|
s.sendmail(xfrom, to_addrs, msg.as_string())
|
|
s.close()
|
|
except:
|
|
rst =False
|
|
return rst
|
|
|
|
|
|
def get_config():
|
|
u = urllib2.urlopen(g_url_config)
|
|
rst = json.load(u)
|
|
return rst
|
|
|
|
def get_ec_config():
|
|
u = urllib2.urlopen(ge_url_config)
|
|
rst = json.load(u)
|
|
return rst
|
|
|
|
def update_status(xid,status,log) :
|
|
data={'Mi_ResultEmailID':xid,'Mi_ResultEmailSendStatus' : status , 'Mi_ResultEmailLog' : log}
|
|
data = urllib.urlencode(data)
|
|
u = urllib2.urlopen(g_url_update,data)
|
|
|
|
def update_ge_status(xid,status,log) :
|
|
data={'M_EmailClientID':xid,'M_EmailClientStatus' : status, 'M_EmailClientLog' : log}
|
|
data = urllib.urlencode(data)
|
|
u = urllib2.urlopen(g_url_update,data)
|
|
|
|
|
|
while True :
|
|
conf = get_config()
|
|
g_server = conf["M_EmailConfigServer"]
|
|
g_from = conf["M_EmailConfigSender"]
|
|
g_login = conf["M_EmailConfigUsername"]
|
|
g_password = conf["M_EmailConfigPassword"]
|
|
g_msg_format = conf["M_EmailConfigMessageFormat"]
|
|
|
|
#email client
|
|
ge_conf = get_ec_config()
|
|
ge_server = conf["M_EmailConfigServer"]
|
|
ge_from = conf["M_EmailConfigSender"]
|
|
ge_login = conf["M_EmailConfigUsername"]
|
|
ge_password = conf["M_EmailConfigPassword"]
|
|
ge_msg_format = conf["M_EmailConfigMessageFormat"]
|
|
|
|
|
|
u_email= urllib2.urlopen(g_url)
|
|
dt = json.load(u_email)
|
|
|
|
|
|
if dt :
|
|
for d in dt :
|
|
url = d["url_report"]
|
|
url_report="http://localhost" + url
|
|
xid = d["Mi_ResultEmailID"]
|
|
name = d["M_TitleName"] + ' ' + d["M_PatientName"]
|
|
email = d["Mi_ResultEmailEmail"]
|
|
nomorlab = d["T_OrderHeaderLabNumber"]
|
|
tgl = d["T_OrderHeaderDate"]
|
|
passwd = d["Mi_ResultEmailPassword"].encode('ascii','ignore')
|
|
message = g_msg_format
|
|
|
|
message= message.replace("{NAME}",name)
|
|
message= message.replace("{NOLAB}",nomorlab)
|
|
message= message.replace("{DATE}",tgl)
|
|
fname = nomorlab + ".pdf"
|
|
if sendEmail(email,subject,message,url_report,fname,passwd) :
|
|
update_status(xid,'Y','Send Email : OK')
|
|
else :
|
|
update_status(xid,'C','Send Email : Error')
|
|
|
|
|
|
#email client
|
|
u_email =urllib2.urlopen(ge_url)
|
|
dt = json.load(u_email)
|
|
pdb.set_trace()
|
|
if dt :
|
|
for d in dt :
|
|
xid = d['M_EmailClientID']
|
|
att = d['attachment']
|
|
email= d['S_SystemsEmailRND']
|
|
tgl = d['M_EmailClientLastUpdate']
|
|
message = "Title\t: %s\r\nMenu\t: %s\r\nCategory\t: %s\r\n\r\n%s" % (d['M_EmailClientTitle'],d['M_EmailClientMenu'],d['M_EmailClientCategory'],
|
|
d['M_EmailClientMessage'])
|
|
subject = "[smartlab LSeries] " + d['M_EmailClientTitle']
|
|
support = d['S_SystemsEmailSupport']
|
|
if sendEmailClient(email,subject,message,att,support) :
|
|
update_ge_status(xid,'Y')
|
|
else :
|
|
update_ge_status(xid,'C')
|
|
|
|
time.sleep(20)
|
|
|