Your Name hace 3 años
padre
commit
edfd2b6238

+ 3 - 0
docker/Dockerfile

@@ -0,0 +1,3 @@
+FROM python:3.9.5-slim-buster
+
+CMD ["python3"]

BIN
hhh/__pycache__/browser_common.cpython-39.pyc


+ 5 - 4
hhh/auto_clicks.py

@@ -34,11 +34,11 @@ def get_designer_statistics(designer_list):
 
     details=[]
     masters=[]
-    specials=[' hhh',' 幸福空間',' 幸福', ' 居家台', ' 0809', ' glory', ' 觀眾最愛', ' 亞洲設計獎', ' 幸福經紀人', ' 退休好幸福',' 設計師影音']
+#    specials=[' hhh',' 幸福空間',' 幸福', ' 居家台', ' 0809', ' glory', ' 觀眾最愛', ' 亞洲設計獎', ' 幸福經紀人', ' 退休好幸福',' 設計師影音']
 #    for q in qlist:
     for q in designer_list:
-        elmt=random.choice(specials)
-        q+=elmt
+#        elmt=random.choice(specials)
+#        q+=elmt
 #        q+=' 幸福空間'
 #        q+=' hhh'
 
@@ -102,9 +102,10 @@ def find_master_by_designer(masters,designer):
 
 #設計
 #qlist=['三宅一秀','萬寶隆空間設計','含仰空間設計','元均制作','承炫裝修']
-qlist=['上築空間設計','豐聚室內裝修','富億空間設計','浩室設計','京璽國際','IS國際設計','優尼客','摩登雅舍','亞維空間設計','比沙列','富億設計','豐聚設計']
+#qlist=['上築空間設計','豐聚室內裝修','富億空間設計','浩室設計','京璽國際','IS國際設計','優尼客','摩登雅舍','亞維空間設計','比沙列','富億設計','豐聚設計']
 #qlist=['春雨時尚空間','萬寶隆空間設計','含仰空間設計','綵韻室內設計','雅典設計','境庭國際設計','張馨室內設計','尚藝室內裝修','豐聚室內裝修','阿曼空間設計','尚藝室內裝修','富億空間設計','齊舍設計','大琚空間設計','將作空間','昱承室內裝修','YHS DESIGN','德本迪室內設計','森境王俊宏設計','綵韻室內設計','寓子設計','東風室內設計','陶璽空間設計','惹雅國際設計','藝谷空間設計']
 
+qlist=['富億空間','幸福空間節目 富億','幸福空間設計師 富億','幸福空間 富億','幸福空間 fe設計','老屋 富億','老屋翻新 富億','天井設計案例 富億']
 while True:
     q=random.choice(qlist)
     print(q)

+ 14 - 6
hhh/gspace_keywords.py

@@ -44,7 +44,10 @@ jb.set_profile_path("Profile 7")
 #kw='系統櫃樣式'
 #kw='系統櫃品牌'
 #kw='系統櫃衣櫃尺寸'
-kw='系統櫃板材'
+#kw='系統櫃板材'
+#kw='合砌設計'
+#kw='富億空間'
+kw='空間 設計'
 
 googleurl='https://www.google.com/search?q='+kw
 jb.get(googleurl)
@@ -86,9 +89,9 @@ for i in range(3):
 #    time.sleep(2)
 
 
-from jinja2 import Environment, FileSystemLoader
-THIS_DIR = os.path.dirname(os.path.abspath(__file__))
-j2_env = Environment(loader=FileSystemLoader('c:/tmp'))
+#from jinja2 import Environment, FileSystemLoader
+#THIS_DIR = os.path.dirname(os.path.abspath(__file__))
+#j2_env = Environment(loader=FileSystemLoader('c:/tmp'))
 
 
 #'http://icons-for-free.com/free-icons/png/128/1312099.png'
@@ -100,7 +103,7 @@ data=[]
 
 df = pd.DataFrame(columns=('keywords','cnt'))
 
-cursor=db.query('select kw as kw,count(*) as cnt from tmp group by kw having count(*)>1 order by count(*) desc')
+cursor=db.query('select kw as kw,count(*) as cnt from tmp group by kw having count(*)>=1 order by count(*) desc')
 for c in cursor:
     print(c['kw'])
     print(c['cnt'])
@@ -108,7 +111,12 @@ for c in cursor:
     df.loc[idx]=[c['kw'],c['cnt']]
     idx+=1
 
-df2sheet.save_sheet(df,'May-Event',kw,startpos='A1')
+content=df.to_csv(index=False)
+fw=codecs.open('c:/tmp/exp.csv','w','utf-8')
+fw.write(content)
+fw.close()
+
+#df2sheet.save_sheet(df,'May-Event',kw,startpos='A1')
 
 
 #output=j2_env.get_template('hhh_kw.tmpl').render(data=data)

+ 60 - 0
hhh/static/bk2_designer.tmpl

@@ -0,0 +1,60 @@
+<html>
+    <head>
+        <link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css'>
+<style>
+body {
+  background-color: #bdc3c7;
+}
+
+.table {
+  width: 100%;
+  background-color: #f3f3f3;
+}
+.table-fixed tbody {
+  height: 600px;
+  overflow-y: auto;
+  width: 100%;
+}
+.table-fixed thead, .table-fixed tbody, .table-fixed tr, .table-fixed td, .table-fixed th {
+  display: block;
+}
+.table-fixed tbody td {
+  float: left;
+}
+.table-fixed thead tr th {
+  float: left;
+  background-color: 	#8600FF;
+  border-color: 	#8600FF;
+}
+</style>
+    </head>
+<body>
+    <img src="http://ai.choozmo.com/img/logo_choozmo.webp" style="display: block; margin-left: auto;   margin-right: auto;  width: 150px;" >
+  <h2 style="text-align:center;">幸福空間設計師SEO報告</h2>
+    <div class="container">
+        <table class="table">
+          <thead>
+            <tr style="background-color: 	#8600FF;">
+              <th style="color: #eeeeee ;">設計師</th>
+              <th style="color: #eeeeee ;">優先</th>
+              <th style="color: #eeeeee ;">次之</th>
+              <th style="color: #eeeeee ;">資料時間</th>
+            </tr>
+          </thead>
+          <tbody>
+      {% for item in displaydata %}
+      <tr>
+      <td>{{ item.designer |safe}}</td>
+      <td>{{ item.first |safe  }}</td>
+      <td>{{ item.second |safe }}</td>
+      <td>{{ item.dt |safe }}</td>
+      </tr>
+
+              {% endfor %}
+
+      
+          </tbody>
+        </table>
+      </div>
+</body>
+</html>

+ 113 - 0
hhh/static/designer.tmpl

@@ -0,0 +1,113 @@
+<html>
+    <head>
+<style>
+/*! CSS Used from: https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css */
+body{margin:0;}
+a{background-color:transparent;}
+a:active,a:hover{outline:0;}
+img{border:0;}
+button{margin:0;font:inherit;color:inherit;}
+button{overflow:visible;}
+button{text-transform:none;}
+button{-webkit-appearance:button;cursor:pointer;}
+button::-moz-focus-inner{padding:0;border:0;}
+table{border-spacing:0;border-collapse:collapse;}
+td,th{padding:0;}
+@media print{
+*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important;}
+a,a:visited{text-decoration:underline;}
+a[href]:after{content:" (" attr(href) ")";}
+thead{display:table-header-group;}
+img,tr{page-break-inside:avoid;}
+img{max-width:100%!important;}
+h2{orphans:3;widows:3;}
+h2{page-break-after:avoid;}
+.table{border-collapse:collapse!important;}
+.table td,.table th{background-color:#fff!important;}
+}
+*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}
+:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}
+body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff;}
+button{font-family:inherit;font-size:inherit;line-height:inherit;}
+a{color:#337ab7;text-decoration:none;}
+a:focus,a:hover{color:#23527c;text-decoration:underline;}
+a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
+img{vertical-align:middle;}
+h2{font-family:inherit;font-weight:500;line-height:1.1;color:inherit;}
+h2{margin-top:20px;margin-bottom:10px;}
+h2{font-size:30px;}
+.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto;}
+@media (min-width:768px){
+.container{width:750px;}
+}
+@media (min-width:992px){
+.container{width:970px;}
+}
+@media (min-width:1200px){
+.container{width:1170px;}
+}
+table{background-color:transparent;}
+th{text-align:left;}
+.table{width:100%;max-width:100%;margin-bottom:20px;}
+.table>tbody>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd;}
+.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd;}
+.table>thead:first-child>tr:first-child>th{border-top:0;}
+.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px;}
+.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
+.btn:focus,.btn:hover{color:#333;text-decoration:none;}
+.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125);}
+.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4;}
+.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40;}
+.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74;}
+.btn-primary:active{color:#fff;background-color:#286090;border-color:#204d74;}
+.btn-primary:active:focus,.btn-primary:active:hover{color:#fff;background-color:#204d74;border-color:#122b40;}
+.btn-primary:active{background-image:none;}
+.btn-primary .badge{color:#337ab7;background-color:#fff;}
+.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a;}
+.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19;}
+.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925;}
+.btn-danger:active{color:#fff;background-color:#c9302c;border-color:#ac2925;}
+.btn-danger:active:focus,.btn-danger:active:hover{color:#fff;background-color:#ac2925;border-color:#761c19;}
+.btn-danger:active{background-image:none;}
+.btn-danger .badge{color:#d9534f;background-color:#fff;}
+.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px;}
+.badge:empty{display:none;}
+.btn .badge{position:relative;top:-1px;}
+.container:after,.container:before{display:table;content:" ";}
+.container:after{clear:both;}
+/*! CSS Used from: Embedded */
+body{background-color:#bdc3c7;}
+.table{width:100%;background-color:#f3f3f3;}
+
+</style>
+    </head>
+<body>
+    <img src="http://ai.choozmo.com/img/logo_choozmo.webp" style="display: block; margin-left: auto;   margin-right: auto;  width: 150px;" >
+  <h2 style="text-align:center;">幸福空間設計師SEO報告</h2>
+    <div class="container">
+        <table class="table">
+          <thead>
+            <tr style="background-color: 	#8600FF;">
+              <th style="color: #eeeeee ;">設計師</th>
+              <th style="color: #eeeeee ;">優先</th>
+              <th style="color: #eeeeee ;">次之</th>
+              <th style="color: #eeeeee ;">資料時間</th>
+            </tr>
+          </thead>
+          <tbody>
+      {% for item in displaydata %}
+      <tr>
+      <td>{{ item.designer |safe}}</td>
+      <td>{{ item.first |safe  }}</td>
+      <td>{{ item.second |safe }}</td>
+      <td>{{ item.dt |safe }}</td>
+      </tr>
+
+              {% endfor %}
+
+      
+          </tbody>
+        </table>
+      </div>
+</body>
+</html>

+ 1 - 0
hhh/tests/db.bat

@@ -0,0 +1 @@
+ssh -L 13306:hhh-v57.cmab1ctkglka.ap-northeast-2.rds.amazonaws.com:3306 root@139.162.121.30

+ 2 - 1
hhh/tests/phantomtest.py

@@ -40,7 +40,8 @@ def process_query(q):
 
 
 #qlist=['上築空間設計','豐聚室內裝修','富億空間設計','浩室設計','京璽國際','IS國際設計','優尼客','摩登雅舍','亞維空間設計','比沙列','富億設計','豐聚設計']
-qlist=['IS國際設計']
+#qlist=['IS國際設計']
+qlist=['富億空間','幸福空間節目 富億','幸福空間設計師 富億','幸福空間 富億','幸福空間 fe設計','老屋 富億','老屋翻新 富億','天井設計案例 富億']
 
 driver = webdriver.Remote(
 #    command_executor='http://127.0.0.1:4444/wd/hub',

BIN
rest-server/__pycache__/bhouse_lib.cpython-39.pyc


BIN
rest-server/__pycache__/main.cpython-39.pyc


BIN
similar_server/__pycache__/main.cpython-39.pyc


BIN
similar_server/similar.db


+ 103 - 0
tests/send_edm.py

@@ -0,0 +1,103 @@
+import smtplib
+import traceback
+import os
+from email.mime.text import MIMEText
+from email.mime.image import MIMEImage
+from email.mime.multipart import MIMEMultipart
+from email.message import EmailMessage
+import codecs
+import jinja2
+import codecs
+import os
+import dataset
+import time
+
+def gen_email(email,clientid,campaign):
+    db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/yodb?charset=utf8mb4')
+
+    fname=os.path.abspath(__file__)
+    elmts=fname.split(os.path.sep)
+    path2=os.path.sep.join(elmts[0:-1])
+    keysdir=path2+os.path.sep
+    print(keysdir)
+
+
+    templateLoader = jinja2.FileSystemLoader(searchpath=keysdir)
+    templateEnv = jinja2.Environment(loader=templateLoader)
+    TEMPLATE_FILE = 'test.tmpl'
+    template = templateEnv.get_template(TEMPLATE_FILE)
+
+
+    #SELECT distinct ts_word FROM trending_searches ORDER BY ts_date DESC limit 21;
+    cursor=db.query('SELECT distinct ts_word FROM trending_searches ORDER BY ts_date DESC limit 21;')
+    display={}
+    idx=1
+    for c in cursor:
+        display['a'+str(idx)]=c['ts_word']
+        idx+=1
+    display['client']=clientid
+    display['email']=email
+    display['campaign']=campaign
+
+    outputText = template.render(display=display) 
+
+    fw=codecs.open('c:/tmp/final.html','w','utf-8')
+    fw.write(outputText)
+    fw.close()
+
+
+
+def send_email(campaign,email):
+    gmail_user = 'edm@choozmo.com'
+    gmail_password='wqdsyqwvppmubitv'
+
+    sent_from = gmail_user
+    #to = ['jared@choozmo.com','nina.huang@choozmo.com','ana@choozmo.com','ming@choozmo.com','mike@choozmo.com','andy@choozmo.com','hana@choozmo.com','stacy@choozmo.com','wen@choozmo.com','yukyo@choozmo.com','fxp87257@gmail.com','noodlesloves@gmail.com']
+    to = [email]
+
+    msg = MIMEMultipart()
+    msg['Subject'] = '['+campaign+'] 趨勢日報 | ChoozMo '
+    msg['From'] = 'edm@choozmo.com'
+    msg['To'] = email
+
+    msgAlternative = MIMEMultipart('alternative')
+    msg.attach(msgAlternative)
+
+    fr=codecs.open('c:/tmp/final.html','r','utf-8')
+    content=fr.read()
+    fr.close()
+
+    text = MIMEText(content,'html','utf-8')
+
+    msgAlternative.attach(text)
+    try:
+        server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
+        server.ehlo()
+        server.login(gmail_user, gmail_password)
+        server.sendmail(sent_from, to,  msg.as_string())
+        server.close()
+        print ('Email sent!')
+    except:
+        traceback.print_exc()
+        print ('Something went wrong...')
+
+
+db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/cmm_test?charset=utf8mb4')
+#cursor=db.query("SELECT id,email FROM cmm_test.edm_list where ugroup='test';")
+#cursor=db.query("SELECT id,email FROM cmm_test.edm_list where ugroup='choozmo';")
+#cursor=db.query("SELECT id,email FROM cmm_test.edm_list where ugroup='g2';")
+#cursor=db.query("SELECT id,email FROM cmm_test.edm_list where ugroup='zec';")
+#cursor=db.query("SELECT id,email FROM cmm_test.edm_list where ugroup='core_cust';")
+cursor=db.query("SELECT id,email FROM cmm_test.edm_list where ugroup='g4';")
+
+
+for c in cursor:
+    clientid=c['id']
+    email=c['email']
+    campaign='2021-06-12'
+    gen_email(email,clientid,campaign)
+    send_email(campaign,email)
+    time.sleep(6)
+
+#clientid='1'
+#email='jeweiliang@gmail.com'

+ 454 - 0
tests/test copy.tmpl

@@ -0,0 +1,454 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
+<head>
+<!--[if gte mso 9]>
+<xml>
+  <o:OfficeDocumentSettings>
+    <o:AllowPNG/>
+    <o:PixelsPerInch>96</o:PixelsPerInch>
+  </o:OfficeDocumentSettings>
+</xml>
+<![endif]-->
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <meta name="x-apple-disable-message-reformatting">
+  <!--[if !mso]><!--><meta http-equiv="X-UA-Compatible" content="IE=edge"><!--<![endif]-->
+  <title></title>
+  
+    <style type="text/css">
+      table, td { color: #000000; } a { color: #0000ee; text-decoration: underline; } @media (max-width: 480px) { #u_content_button_4 .v-padding { padding: 20px 50px !important; } #u_content_image_3 .v-src-width { width: auto !important; } #u_content_image_3 .v-src-max-width { max-width: 37% !important; } #u_content_text_8 .v-text-align { text-align: center !important; } #u_content_image_2 .v-src-width { width: auto !important; } #u_content_image_2 .v-src-max-width { max-width: 30% !important; } #u_content_text_6 .v-text-align { text-align: center !important; } #u_content_button_3 .v-padding { padding: 20px 50px !important; } }
+@media only screen and (min-width: 620px) {
+  .u-row {
+    width: 600px !important;
+  }
+  .u-row .u-col {
+    vertical-align: top;
+  }
+
+  .u-row .u-col-48p67 {
+    width: 292.02px !important;
+  }
+
+  .u-row .u-col-51p33 {
+    width: 307.98px !important;
+  }
+
+  .u-row .u-col-100 {
+    width: 600px !important;
+  }
+
+}
+
+@media (max-width: 620px) {
+  .u-row-container {
+    max-width: 100% !important;
+    padding-left: 0px !important;
+    padding-right: 0px !important;
+  }
+  .u-row .u-col {
+    min-width: 320px !important;
+    max-width: 100% !important;
+    display: block !important;
+  }
+  .u-row {
+    width: calc(100% - 40px) !important;
+  }
+  .u-col {
+    width: 100% !important;
+  }
+  .u-col > div {
+    margin: 0 auto;
+  }
+}
+body {
+  margin: 0;
+  padding: 0;
+}
+
+table,
+tr,
+td {
+  vertical-align: top;
+  border-collapse: collapse;
+}
+
+p {
+  margin: 0;
+}
+
+.ie-container table,
+.mso-container table {
+  table-layout: fixed;
+}
+
+* {
+  line-height: inherit;
+}
+
+a[x-apple-data-detectors='true'] {
+  color: inherit !important;
+  text-decoration: none !important;
+}
+
+@media (max-width: 480px) {
+  .hide-mobile {
+    display: none !important;
+    max-height: 0px;
+    overflow: hidden;
+  }
+
+}
+    </style>
+  
+  
+
+<!--[if !mso]><!--><link href="https://fonts.googleapis.com/css?family=Lato:400,700&display=swap" rel="stylesheet" type="text/css"><link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700&display=swap" rel="stylesheet" type="text/css"><link href="https://fonts.googleapis.com/css?family=Raleway:400,700&display=swap" rel="stylesheet" type="text/css"><!--<![endif]-->
+
+</head>
+
+<body class="clean-body" style="margin: 0;padding: 0;-webkit-text-size-adjust: 100%;color: #000000;background-image: url('http://edm.cmm.ai/images/%E8%83%8C%E6%99%AF.jpg');background-repeat: no-repeat;background-position: center top;background-color: transparent;"">
+  <!--[if IE]><div class="ie-container"><![endif]-->
+  <!--[if mso]><div class="mso-container"><![endif]-->
+  <table style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;min-width: 320px;Margin: 0 auto;background-color: #efefef;width:100%" cellpadding="0" cellspacing="0">
+  <tbody>
+  <tr style="vertical-align: top">
+    <td style="word-break: break-word;border-collapse: collapse !important;vertical-align: top">
+    <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td align="center" style="background-color: #efefef;"><![endif]-->
+    
+
+
+
+<div class="u-row-container" style="padding: 0px;background-color: transparent">
+  <div class="u-row" style="Margin: 0 auto;min-width: 320px;max-width: 600px;overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;background: linear-gradient(30deg, #ea5413 , #920783);">
+    <div style="border-collapse: collapse;display: table;width: 100%;background-image: url('http://edm.cmm.ai/images/%E8%B6%A8%E5%8B%A2%E6%97%A5%E5%A0%B1BANNER.jpg');background-repeat: no-repeat;background-position: center top;background-color: transparent;">
+      <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding: 0px;background-color: transparent;" align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px;"><tr style="background-image: url('images/image-4.png');background-repeat: no-repeat;background-position: center top;background-color: #0000ff;"><![endif]-->
+      
+<!--[if (mso)|(IE)]><td align="center" width="600" style="width: 600px;padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;" valign="top"><![endif]-->
+<div class="u-col u-col-100" style="max-width: 320px;min-width: 600px;display: table-cell;vertical-align: top;">
+  <div style="width: 100% !important;">
+  <!--[if (!mso)&(!IE)]><!--><div style="padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;"><!--<![endif]-->
+  
+
+
+<table class="hide-mobile" style="font-family:'Open Sans',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
+  <tbody>
+    <tr>
+      <td style="overflow-wrap:break-word;word-break:break-word;padding:100px;font-family:'Open Sans',sans-serif;" align="left">
+        
+  <table height="0px" align="center" border="0" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;border-top: 0px solid #BBBBBB;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%">
+    <tbody>
+      <tr style="vertical-align: top">
+        <td style="word-break: break-word;border-collapse: collapse !important;vertical-align: top;font-size: 0px;line-height: 0px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%">
+          <span>&#160;</span>
+        </td>
+      </tr>
+    </tbody>
+  </table>
+
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+<table style="font-family:'Open Sans',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
+  <tbody>
+    <tr>
+      <td style="overflow-wrap:break-word;word-break:break-word;padding:40px;font-family:'Open Sans',sans-serif;" align="left">
+        
+  <table height="0px" align="center" border="0" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;border-top: 0px solid #BBBBBB;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%">
+    <tbody>
+      <tr style="vertical-align: top">
+        <td style="word-break: break-word;border-collapse: collapse !important;vertical-align: top;font-size: 0px;line-height: 0px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%">
+          <span>&#160;</span>
+        </td>
+      </tr>
+    </tbody>
+  </table>
+
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+  <!--[if (!mso)&(!IE)]><!--></div><!--<![endif]-->
+  </div>
+</div>
+<!--[if (mso)|(IE)]></td><![endif]-->
+      <!--[if (mso)|(IE)]></tr></table></td></tr></table><![endif]-->
+    </div>
+  </div>
+</div>
+
+
+
+<div class="u-row-container" style="padding: 0px;background-color: transparent">
+  <div class="u-row" style="Margin: 0 auto;min-width: 320px;max-width: 600px;overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;background: linear-gradient(200deg, #ea5413 , #920783);">
+    <div style="border-collapse: collapse;display: table;width: 100%;background-color: transparent;">
+      <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding: 0px;background-color: transparent;" align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px;"><tr style="background-color: #ffffff;"><![endif]-->
+      
+<!--[if (mso)|(IE)]><td align="center" width="600" style="width: 600px;padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;" valign="top"><![endif]-->
+<div class="u-col u-col-100" style="max-width: 320px;min-width: 600px;display: table-cell;vertical-align: top;">
+  <div style="width: 100% !important;">
+  <!--[if (!mso)&(!IE)]><!--><div style="padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;"><!--<![endif]-->
+  
+<table style="font-family:'Open Sans',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
+  <tbody>
+    <tr>
+      <td style="overflow-wrap:break-word;word-break:break-word;padding:10px;font-family:'Open Sans',sans-serif;" align="left">
+        
+        <table height="0px" align="center" border="0" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;border-top: 0px solid #BBBBBB;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%">
+            <tbody>
+            <tr style="vertical-align: top">
+                <td style="word-break: break-word;border-collapse: collapse !important;vertical-align: top;font-size: 0px;line-height: 0px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%">
+                <span>&#160;</span>
+                </td>
+            </tr>
+            </tbody>
+        </table>
+
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+<table style="font-family:'Open Sans',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
+  <tbody>
+    <tr>
+      <td style="overflow-wrap:break-word;word-break:break-word;padding:0px 25px 10px;font-family:'Open Sans',sans-serif;" align="left">
+        <div style="background-color: white; border-radius: 2rem; padding-bottom: .5rem; margin-left: 3%; margin-right: 3%;">
+            <div style="display: flex; justify-content: stretch; align-items: center;">
+              <div style="padding: 1rem 1rem; width: 50%;">
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第2名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;" data-no="21">{{ display.a2 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第4名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;" data-no="19">{{ display.a4 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第6名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a6 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第8名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a8 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第10名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a10 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第12名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a12 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第14名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a14 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第16名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a16 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第18名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a18 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第20名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a20 }}</span>
+                </div>
+              </div>
+              <div style="padding: 1rem 1rem; width: 50%;">
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第3名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a3 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第5名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a5 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第7名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a7 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第9名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a9 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第11名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a11 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第13名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a13 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第15名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a15 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第17名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a17 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第19名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a19 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第21名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a21 }}</span>
+                </div>
+              </div>
+            </div>
+            <div style="width: 90%;height: 80px; background-image: url('http://edm.cmm.ai/images/NO1.png'); background-repeat: no-repeat; background-size:100%; margin-right: auto; margin-left: auto; position: relative;">
+              <div style="display: flex; margin: auto; padding: 28px 95px;">
+                <span style="color: #aa6dbc; display: inline-block; font-size: 1.1rem; margin-right: 1.5rem;">第01名.</span> 
+                <span style="display: inline-block; font-size: 1.2rem;">{{ display.a1 }}</span>
+              </div>
+            </div>
+          </div>
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+
+
+
+
+
+<!--立即聯繫-->
+<div class="u-row-container" style="padding: 0px;background-color: transparent">
+  <div class="u-row" style="Margin: 0 auto;min-width: 320px;max-width: 600px;overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;background: linear-gradient(210deg, #ea5413 , #920783);">
+    <div style="border-collapse: collapse;display: table;width: 100%;background-image: url('http://edm.cmm.ai/images/%E7%AB%8B%E5%8D%B3%E9%80%A3%E7%B9%AB.png');background-repeat: no-repeat;background-position: center top;background-color: transparent;">
+      <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding: 0px;background-color: transparent;" align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px;"><tr style="background-color: #ffffff;"><![endif]-->
+      
+<!--[if (mso)|(IE)]><td align="center" width="600" style="width: 600px;padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;" valign="top"><![endif]-->
+<div class="u-col u-col-100" style="max-width: 320px;min-width: 600px;display: table-cell;vertical-align: top;">
+  <div style="width: 100% !important;">
+  <!--[if (!mso)&(!IE)]><!--><div style="padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;"><!--<![endif]-->
+  
+<table style="font-family:'Open Sans',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
+  <tbody>
+    <tr>
+      <td style="overflow-wrap:break-word;word-break:break-word;padding:80px;font-family:'Open Sans',sans-serif;" align="left">
+
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+  <!--[if (!mso)&(!IE)]><!--></div><!--<![endif]-->
+  </div>
+</div>
+<!--[if (mso)|(IE)]></td><![endif]-->
+      <!--[if (mso)|(IE)]></tr></table></td></tr></table><![endif]-->
+    </div>
+  </div>
+</div>
+
+
+
+<div class="u-row-container" style="padding: 0px;background-color: transparent">
+  <div class="u-row" style="Margin: 0 auto;min-width: 320px;max-width: 600px;overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;">
+    <div style="border-collapse: collapse;display: table;width: 100%;background-color: transparent;">
+      <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding: 0px;background-color: transparent;" align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px;"><tr style="background-color: #ffffff;"><![endif]-->
+      
+<!--[if (mso)|(IE)]><td align="center" width="600" style="width: 600px;padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;" valign="top"><![endif]-->
+<div class="u-col u-col-100" style="max-width: 320px;min-width: 600px;display: table-cell;vertical-align: top;">
+  <div style="width: 100% !important;">
+  <!--[if (!mso)&(!IE)]><!--><div style="padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;"><!--<![endif]-->
+
+<table style="font-family:'Open Sans',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
+  <tbody>
+    <tr>
+      <td style="overflow-wrap:break-word;word-break:break-word;padding:10px;font-family:'Open Sans',sans-serif;" align="left">
+        
+<div align="center">
+  <div style="display: table; max-width:300px;">
+  <!--[if (mso)|(IE)]><table width="207" cellpadding="0" cellspacing="0" border="0"><tr><td style="border-collapse:collapse;" align="center"><table width="100%" cellpadding="0" cellspacing="0" border="0" style="border-collapse:collapse; mso-table-lspace: 0pt;mso-table-rspace: 0pt; width:207px;"><tr><![endif]-->
+  
+    
+    <!--[if (mso)|(IE)]><td width="32" style="width:32px; padding-right: 20px;" valign="top"><![endif]-->
+    <table align="left" border="0" cellspacing="0" cellpadding="0" width="32" height="32" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;margin-right: 30px">
+      <tbody><tr style="vertical-align: top"><td align="left" valign="middle" style="word-break: break-word;border-collapse: collapse !important;vertical-align: top">
+        <a href="https://facebook.com/" title="Facebook" target="_blank">
+          <img src="http://edm.cmm.ai/images/linkedin.png" alt="Facebook" title="Facebook" width="32" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;clear: both;display: block !important;border: none;height: auto;float: none;max-width: 32px !important">
+        </a>
+      </td></tr>
+    </tbody></table>
+    <!--[if (mso)|(IE)]></td><![endif]-->
+    
+    <!--[if (mso)|(IE)]><td width="32" style="width:32px; padding-right: 20px;" valign="top"><![endif]-->
+    <table align="left" border="0" cellspacing="0" cellpadding="0" width="32" height="32" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;margin-right: 30px">
+      <tbody><tr style="vertical-align: top"><td align="left" valign="middle" style="word-break: break-word;border-collapse: collapse !important;vertical-align: top">
+        <a href="https://twitter.com/" title="Twitter" target="_blank">
+          <img src="http://edm.cmm.ai/images/facebook.png" alt="Twitter" title="Twitter" width="32" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;clear: both;display: block !important;border: none;height: auto;float: none;max-width: 32px !important">
+        </a>
+      </td></tr>
+    </tbody></table>
+    <!--[if (mso)|(IE)]></td><![endif]-->
+    
+    <!--[if (mso)|(IE)]><td width="32" style="width:32px; padding-right: 20px;" valign="top"><![endif]-->
+    <table align="left" border="0" cellspacing="0" cellpadding="0" width="32" height="32" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;margin-right: 30px">
+      <tbody><tr style="vertical-align: top"><td align="left" valign="middle" style="word-break: break-word;border-collapse: collapse !important;vertical-align: top">
+        <a href="https://youtube.com/" title="YouTube" target="_blank">
+          <img src="http://edm.cmm.ai/images/line.png" alt="YouTube" title="YouTube" width="32" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;clear: both;display: block !important;border: none;height: auto;float: none;max-width: 32px !important">
+        </a>
+      </td></tr>
+    </tbody></table>
+    <!--[if (mso)|(IE)]></td><![endif]-->
+    
+    <!--[if (mso)|(IE)]><td width="32" style="width:32px; padding-right: 0px;" valign="top"><![endif]-->
+    <table align="left" border="0" cellspacing="0" cellpadding="0" width="32" height="32" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;margin-right: 0px">
+      <tbody><tr style="vertical-align: top"><td align="left" valign="middle" style="word-break: break-word;border-collapse: collapse !important;vertical-align: top">
+        <a href="https://skype.com/" title="Skype" target="_blank">
+          <img src="http://edm.cmm.ai/images/youtube-new-flat-logo-1.png" alt="Skype" title="Skype" width="32" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;clear: both;display: block !important;border: none;height: auto;float: none;max-width: 32px !important">
+        </a>
+      </td></tr>
+    </tbody></table>
+    <!--[if (mso)|(IE)]></td><![endif]-->
+    
+    
+    <!--[if (mso)|(IE)]></tr></table></td></tr></table><![endif]-->
+  </div>
+</div>
+
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+
+<table style="font-family:'Open Sans',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
+  <tbody>
+    <tr>
+      <td style="overflow-wrap:break-word;word-break:break-word;padding:20px;font-family:'Open Sans',sans-serif;" align="left">
+
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+  <!--[if (!mso)&(!IE)]><!--></div><!--<![endif]-->
+  </div>
+</div>
+<!--[if (mso)|(IE)]></td><![endif]-->
+      <!--[if (mso)|(IE)]></tr></table></td></tr></table><![endif]-->
+    </div>
+  </div>
+</div>
+
+
+    <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
+    </td>
+  </tr>
+  </tbody>
+  </table>
+  <!--[if mso]></div><![endif]-->
+  <!--[if IE]></div><![endif]-->
+</body>
+
+</html>

+ 496 - 0
tests/test.tmpl

@@ -0,0 +1,496 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
+<head>
+<!--[if gte mso 9]>
+<xml>
+  <o:OfficeDocumentSettings>
+    <o:AllowPNG/>
+    <o:PixelsPerInch>96</o:PixelsPerInch>
+  </o:OfficeDocumentSettings>
+</xml>
+<![endif]-->
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <meta name="x-apple-disable-message-reformatting">
+  <!--[if !mso]><!--><meta http-equiv="X-UA-Compatible" content="IE=edge"><!--<![endif]-->
+  <title></title>
+  
+    <style type="text/css">
+      table, td { color: #000000; } a { color: #0000ee; text-decoration: underline; } @media (max-width: 480px) { #u_content_button_4 .v-padding { padding: 20px 50px !important; } #u_content_image_3 .v-src-width { width: auto !important; } #u_content_image_3 .v-src-max-width { max-width: 37% !important; } #u_content_text_8 .v-text-align { text-align: center !important; } #u_content_image_2 .v-src-width { width: auto !important; } #u_content_image_2 .v-src-max-width { max-width: 30% !important; } #u_content_text_6 .v-text-align { text-align: center !important; } #u_content_button_3 .v-padding { padding: 20px 50px !important; } }
+@media only screen and (min-width: 620px) {
+  .u-row {
+    width: 600px !important;
+  }
+  .u-row .u-col {
+    vertical-align: top;
+  }
+
+  .u-row .u-col-48p67 {
+    width: 292.02px !important;
+  }
+
+  .u-row .u-col-51p33 {
+    width: 307.98px !important;
+  }
+
+  .u-row .u-col-100 {
+    width: 600px !important;
+  }
+
+}
+
+@media (max-width: 620px) {
+  .u-row-container {
+    max-width: 100% !important;
+    padding-left: 0px !important;
+    padding-right: 0px !important;
+  }
+  .u-row .u-col {
+    min-width: 320px !important;
+    max-width: 100% !important;
+    display: block !important;
+  }
+  .u-row {
+    width: calc(100% - 40px) !important;
+  }
+  .u-col {
+    width: 100% !important;
+  }
+  .u-col > div {
+    margin: 0 auto;
+  }
+}
+body {
+  margin: 0;
+  padding: 0;
+  font-size: .8rem;
+}
+
+table,
+tr,
+td {
+  vertical-align: top;
+  border-collapse: collapse;
+}
+
+p {
+  margin: 0;
+}
+
+.ie-container table,
+.mso-container table {
+  table-layout: fixed;
+}
+
+* {
+  line-height: inherit;
+}
+
+a[x-apple-data-detectors='true'] {
+  color: inherit !important;
+  text-decoration: none !important;
+}
+
+.p-40 {
+  padding: 40px;
+}
+
+.p-80 {
+  padding: 80px;
+}
+
+.row-p {
+  padding: 1rem 1rem;
+}
+
+.p-no1 {
+  padding: 28px 95px;
+}
+
+@media (max-width: 480px) {
+  .hide-mobile {
+    display: none !important;
+    max-height: 0px;
+    overflow: hidden;
+  }
+  .p-40 {
+    padding: 90px;
+  }
+  .row-p {
+  padding: 1rem .5rem;
+
+  }
+  .p-80 {
+  padding: 40px;
+  }
+  .p-no1 {
+  padding: 15px 0 15px 55px;
+  }
+}
+
+@media (max-width: 576px) {
+  
+
+}
+    </style>
+  
+  
+
+<!--[if !mso]><!--><link href="https://fonts.googleapis.com/css?family=Lato:400,700&display=swap" rel="stylesheet" type="text/css"><link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700&display=swap" rel="stylesheet" type="text/css"><link href="https://fonts.googleapis.com/css?family=Raleway:400,700&display=swap" rel="stylesheet" type="text/css"><!--<![endif]-->
+
+</head>
+
+<body class="clean-body" style="margin: 0;padding: 0;-webkit-text-size-adjust: 100%;color: #000000;background-image: url('http://edm.cmm.ai/images/%E8%83%8C%E6%99%AF.jpg');background-repeat: no-repeat;background-position: center top;background-color: transparent;"">
+
+<img src="http://www.google-analytics.com/collect?v=1&tid=UA-153100602-5&cid={{display.client}}&t=event&ec=email&ea=open&el={{display.email}}&cs=newsletter&cm=email&cn={{display.campaign}}">
+
+  <!--[if IE]><div class="ie-container"><![endif]-->
+  <!--[if mso]><div class="mso-container"><![endif]-->
+  <p>如您無法閱讀此信,請點選<a href='http://ai.choozmo.com/'>此處</a></p>
+  <table style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;min-width: 320px;Margin: 0 auto;background-color: #efefef;width:100%" cellpadding="0" cellspacing="0">
+  <tbody>
+  <tr style="vertical-align: top">
+    <td style="word-break: break-word;border-collapse: collapse !important;vertical-align: top">
+    <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td align="center" style="background-color: #efefef;"><![endif]-->
+    
+
+
+
+<div class="u-row-container" style="padding: 0px;background-color: transparent">
+  <div class="u-row" style="Margin: 0 auto;min-width: 320px;max-width: 600px;overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;background: linear-gradient(0deg, #ea5413 , #920783);">
+    <div classs="bg-cover" style="border-collapse: collapse;display: table;width: 100%;background-image: url('http://edm.cmm.ai/images/%E8%B6%A8%E5%8B%A2%E6%97%A5%E5%A0%B1BANNER.jpg');background-repeat: no-repeat;background-position: center top;background-color: transparent;background-size: contain;">
+      <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding: 0px;background-color: transparent;" align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px;"><tr style="background-image: url('images/image-4.png');background-repeat: no-repeat;background-position: center top;background-color: #0000ff;"><![endif]-->
+      
+<!--[if (mso)|(IE)]><td align="center" width="600" style="width: 600px;padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;" valign="top"><![endif]-->
+<div class="u-col u-col-100" style="max-width: 320px;min-width: 600px;display: table-cell;vertical-align: top;">
+  <a href="http://ai.choozmo.com/" target="_blank">
+  <div style="width: 100% !important;">
+  <!--[if (!mso)&(!IE)]><!--><div style="padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;"><!--<![endif]-->
+  
+
+
+<table class="" style="font-family:'Open Sans',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
+  <tbody>
+    <tr>
+      <td style="overflow-wrap:break-word;word-break:break-word;padding:25%;font-family:'Open Sans',sans-serif;" align="left">
+        
+        <table height="0px" align="center" border="0" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;border-top: 0px solid #BBBBBB;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%">
+          <tbody>
+            <tr style="vertical-align: top">
+              <td style="word-break: break-word;border-collapse: collapse !important;vertical-align: top;font-size: 0px;line-height: 0px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%">
+                <span>&#160;</span>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+      
+            </td>
+          </tr>
+        </tbody>
+      </table>
+      
+      <table style="font-family:'Open Sans',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
+        <tbody>
+          <tr>
+            <td style="overflow-wrap:break-word;word-break:break-word;padding:0px;font-family:'Open Sans',sans-serif;" align="left">
+              
+        <table height="0px" align="center" border="0" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;border-top: 0px solid #BBBBBB;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%">
+          <tbody>
+            <tr style="vertical-align: top">
+              <td style="word-break: break-word;border-collapse: collapse !important;vertical-align: top;font-size: 0px;line-height: 0px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%">
+                <span>&#160;</span>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+
+
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+  <!--[if (!mso)&(!IE)]><!--></div><!--<![endif]-->
+  </div>
+  </a>
+</div>
+<!--[if (mso)|(IE)]></td><![endif]-->
+      <!--[if (mso)|(IE)]></tr></table></td></tr></table><![endif]-->
+    </div>
+  </div>
+</div>
+
+
+
+<div class="u-row-container" style="padding: 0px;background-color: transparent">
+  <div class="u-row" style="Margin: 0 auto;min-width: 320px;max-width: 600px;overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;background: linear-gradient(200deg, #ea5413 , #920783);">
+    <div style="border-collapse: collapse;display: table;width: 100%;background-color: transparent;">
+      <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding: 0px;background-color: transparent;" align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px;"><tr style="background-color: #ffffff;"><![endif]-->
+      
+<!--[if (mso)|(IE)]><td align="center" width="600" style="width: 600px;padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;" valign="top"><![endif]-->
+<div class="u-col u-col-100" style="max-width: 320px;min-width: 600px;display: table-cell;vertical-align: top;">
+  <div style="width: 100% !important;">
+  <!--[if (!mso)&(!IE)]><!--><div style="padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;"><!--<![endif]-->
+  
+<table style="font-family:'Open Sans',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
+  <tbody>
+    <tr>
+      <td style="overflow-wrap:break-word;word-break:break-word;padding:10px;font-family:'Open Sans',sans-serif;" align="left">
+        
+        <table height="0px" align="center" border="0" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;border-top: 0px solid #BBBBBB;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%">
+            <tbody>
+            <tr style="vertical-align: top">
+                <td style="word-break: break-word;border-collapse: collapse !important;vertical-align: top;font-size: 0px;line-height: 0px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%">
+                <span>&#160;</span>
+                </td>
+            </tr>
+            </tbody>
+        </table>
+
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+<table style="font-family:'Open Sans',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
+  <tbody>
+    <tr>
+      <td style="overflow-wrap:break-word;word-break:break-word;padding:0px 10px 10px;font-family:'Open Sans',sans-serif;" align="left">
+        <div style="background-color: white; border-radius: 2rem; padding-bottom: .5rem; margin-left: 3%; margin-right: 3%;">
+            <div style="display: flex; justify-content: stretch; align-items: center;">
+              <div class="" style="width: 50%;padding: 1.2rem .8rem;">
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第02名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;" data-no="21">{{ display.a2 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第04名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;" data-no="19">{{ display.a4 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第06名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a6 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第08名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a8 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第10名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a10 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第12名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a12 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第14名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a14 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第116名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a16 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第18名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a18 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第20名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a20 }}</span>
+                </div>
+              </div>
+              <div style="width: 50%;padding: 1.2rem .8rem;">
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第03名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a3 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第05名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a5 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第07名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a7 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第09名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a9 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第11名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a11 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第13名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a13 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第15名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a15 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第17名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a17 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第19名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a19 }}</span>
+                </div>
+                <div style="display: flex; border-bottom: 1px dotted grey; margin-bottom: 7px;">
+                  <span style="color: #aa6dbc; display: inline-block; flex: 2;">第21名.</span> 
+                  <span style="color: #aa6dbc; display: inline-block; flex: 3;">{{ display.a21 }}</span>
+                </div>
+              </div>
+            </div>
+            <button style="display: block;width: 90%;height:50px; background-image: url('https://i.ibb.co/Y8W3QD2/no1ba.png'); background-repeat: no-repeat; background-size:cover; margin-right: auto; margin-left: auto; border: none;border: none;text-align: center; vertical-align: middle;border-radius: 25px;padding-bottom: 0px;">
+                <span style="color: #aa6dbc; display: inline-block; font-size: 1rem; margin-right: .6rem;">第01名.</span> 
+                <span style="display: inline-block; font-size: 1.1rem;">{{ display.a1 }}</span>
+            </button>
+          </div>
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+
+
+
+
+
+<!--立即聯繫-->
+<div class="u-row-container" style="padding: 0px;background-color: transparent">
+  <div class="u-row" style="Margin: 0 auto;min-width: 320px;max-width: 600px;overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;background: linear-gradient(210deg, #ea5413 , #920783);">
+    <div style="border-collapse: collapse;display: table;width: 100%;background-image: url('http://edm.cmm.ai/images/%E7%AB%8B%E5%8D%B3%E9%80%A3%E7%B9%AB.png');background-repeat: no-repeat;background-position: center top;background-color: transparent;background-size: contain;">
+      <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding: 0px;background-color: transparent;" align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px;"><tr style="background-color: #ffffff;"><![endif]-->
+      
+<!--[if (mso)|(IE)]><td align="center" width="600" style="width: 600px;padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;" valign="top"><![endif]-->
+<div class="u-col u-col-100" style="max-width: 320px;min-width: 600px;display: table-cell;vertical-align: top;">
+  <a href="https://line.me/R/ti/p/@choozmo?from=page" title="Line" target="_blank">
+  <div style="width: 100% !important;">
+
+  <!--[if (!mso)&(!IE)]><!--><div style="padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;"><!--<![endif]-->
+  
+<table style="font-family:'Open Sans',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
+  <tbody>
+    <tr>
+      <td class="p-80" style="overflow-wrap:break-word;word-break:break-word;padding: 14%;font-family:'Open Sans',sans-serif;" align="left">
+        
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+  <!--[if (!mso)&(!IE)]><!--></div><!--<![endif]-->
+  </div>
+  </a>
+</div>
+<!--[if (mso)|(IE)]></td><![endif]-->
+      <!--[if (mso)|(IE)]></tr></table></td></tr></table><![endif]-->
+    </div>
+  </div>
+</div>
+
+
+
+<div class="u-row-container" style="padding: 0px;background-color: transparent">
+  <div class="u-row" style="Margin: 0 auto;min-width: 320px;max-width: 600px;overflow-wrap: break-word;word-wrap: break-word;word-break: break-word;">
+    <div style="border-collapse: collapse;display: table;width: 100%;background-color: transparent;">
+      <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding: 0px;background-color: transparent;" align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px;"><tr style="background-color: #ffffff;"><![endif]-->
+      
+<!--[if (mso)|(IE)]><td align="center" width="600" style="width: 600px;padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;" valign="top"><![endif]-->
+<div class="u-col u-col-100" style="max-width: 320px;min-width: 600px;display: table-cell;vertical-align: top;">
+  <div style="width: 100% !important;">
+  <!--[if (!mso)&(!IE)]><!--><div style="padding: 0px;border-top: 0px solid transparent;border-left: 0px solid transparent;border-right: 0px solid transparent;border-bottom: 0px solid transparent;"><!--<![endif]-->
+
+<table style="font-family:'Open Sans',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
+  <tbody>
+    <tr>
+      <td style="overflow-wrap:break-word;word-break:break-word;padding:10px;font-family:'Open Sans',sans-serif;" align="left">
+        
+<div align="center">
+  <div style="display: table; max-width:300px;">
+  <!--[if (mso)|(IE)]><table width="207" cellpadding="0" cellspacing="0" border="0"><tr><td style="border-collapse:collapse;" align="center"><table width="100%" cellpadding="0" cellspacing="0" border="0" style="border-collapse:collapse; mso-table-lspace: 0pt;mso-table-rspace: 0pt; width:207px;"><tr><![endif]-->
+  
+    
+    <!--[if (mso)|(IE)]><td width="32" style="width:32px; padding-right: 20px;" valign="top"><![endif]-->
+    <table align="left" border="0" cellspacing="0" cellpadding="0" width="32" height="32" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;margin-right: 30px">
+      <tbody><tr style="vertical-align: top"><td align="left" valign="middle" style="word-break: break-word;border-collapse: collapse !important;vertical-align: top">
+        <a href="https://www.linkedin.com/company/choozmo/" title="Linkedin" target="_blank">
+          <img src="https://i.imgur.com/u2MFY3U.png" alt="Linkedin" title="Linkedin" width="32" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;clear: both;display: block !important;border: none;height: auto;float: none;max-width: 32px !important">
+        </a>
+      </td></tr>
+    </tbody></table>
+    <!--[if (mso)|(IE)]></td><![endif]-->
+    
+    <!--[if (mso)|(IE)]><td width="32" style="width:32px; padding-right: 20px;" valign="top"><![endif]-->
+    <table align="left" border="0" cellspacing="0" cellpadding="0" width="32" height="32" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;margin-right: 30px">
+      <tbody><tr style="vertical-align: top"><td align="left" valign="middle" style="word-break: break-word;border-collapse: collapse !important;vertical-align: top">
+        <a href="https://www.facebook.com/choozmo/" title="Facebook" target="_blank">
+          <img src="http://edm.cmm.ai/images/facebook.png" alt="Facebook" title="Facebook" width="32" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;clear: both;display: block !important;border: none;height: auto;float: none;max-width: 32px !important">
+        </a>
+      </td></tr>
+    </tbody></table>
+    <!--[if (mso)|(IE)]></td><![endif]-->
+    
+    <!--[if (mso)|(IE)]><td width="32" style="width:32px; padding-right: 20px;" valign="top"><![endif]-->
+    <table align="left" border="0" cellspacing="0" cellpadding="0" width="32" height="32" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;margin-right: 30px">
+      <tbody><tr style="vertical-align: top"><td align="left" valign="middle" style="word-break: break-word;border-collapse: collapse !important;vertical-align: top">
+        <a href="https://line.me/R/ti/p/@choozmo?from=page" title="Line" target="_blank">
+          <img src="http://edm.cmm.ai/images/line.png" alt="Line" title="Line" width="32" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;clear: both;display: block !important;border: none;height: auto;float: none;max-width: 32px !important">
+        </a>
+      </td></tr>
+    </tbody></table>
+    <!--[if (mso)|(IE)]></td><![endif]-->
+    
+    <!--[if (mso)|(IE)]><td width="32" style="width:32px; padding-right: 0px;" valign="top"><![endif]-->
+    <table align="left" border="0" cellspacing="0" cellpadding="0" width="32" height="32" style="border-collapse: collapse;table-layout: fixed;border-spacing: 0;mso-table-lspace: 0pt;mso-table-rspace: 0pt;vertical-align: top;margin-right: 0px">
+      <tbody><tr style="vertical-align: top"><td align="left" valign="middle" style="word-break: break-word;border-collapse: collapse !important;vertical-align: top">
+        <a href="https://www.youtube.com/channel/UCi3jHOCCmx0Zyl2ZvoHzHQg" title="YouTube" target="_blank">
+          <img src="http://edm.cmm.ai/images/youtube-new-flat-logo-1.png" alt="YouTube" title="YouTube" width="32" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;clear: both;display: block !important;border: none;height: auto;float: none;max-width: 32px !important">
+        </a>
+      </td></tr>
+    </tbody></table>
+    <!--[if (mso)|(IE)]></td><![endif]-->
+    
+    
+    <!--[if (mso)|(IE)]></tr></table></td></tr></table><![endif]-->
+  </div>
+</div>
+
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+
+<table style="font-family:'Open Sans',sans-serif;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
+  <tbody>
+    <tr>
+      <td style="overflow-wrap:break-word;word-break:break-word;padding:20px;font-family:'Open Sans',sans-serif;" align="left">
+
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+  <!--[if (!mso)&(!IE)]><!--></div><!--<![endif]-->
+  </div>
+</div>
+<!--[if (mso)|(IE)]></td><![endif]-->
+      <!--[if (mso)|(IE)]></tr></table></td></tr></table><![endif]-->
+    </div>
+  </div>
+</div>
+
+
+    <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
+    </td>
+  </tr>
+  </tbody>
+  </table>
+  <!--[if mso]></div><![endif]-->
+  <!--[if IE]></div><![endif]-->
+</body>
+
+</html>

+ 3 - 1
tests/testtmpl.py

@@ -5,7 +5,6 @@ import dataset
 
 db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/yodb?charset=utf8mb4')
 
-
 fname=os.path.abspath(__file__)
 elmts=fname.split(os.path.sep)
 path2=os.path.sep.join(elmts[0:-1])
@@ -26,6 +25,9 @@ idx=1
 for c in cursor:
     display['a'+str(idx)]=c['ts_word']
     idx+=1
+display['client']='1'
+display['email']='jeweiliang@gmail.com'
+
 
 outputText = template.render(display=display) 
 

BIN
web/__pycache__/browser_common.cpython-39.pyc