1. 程式人生 > 實用技巧 >EDM響應式郵件框架:MJML

EDM響應式郵件框架:MJML

概述


新課題研究:響應式郵件框架MJML(MJML官網:https://mjml.io/
姐妹篇:EDM響應式郵件框架:Formerly Ink

介紹


MJML是一種標記語言,設計用於輕鬆實現一個響應式郵件。它的語義語法使得它容易和簡單,而其豐富的標準組件庫可以減少你開發時間,並減輕您的郵件程式碼庫。MJML是一個開源的引擎能夠將MJML轉換成響應式佈局的HTML.

安裝


畢竟是js編寫,需要node環境(4.2以上版本)

方法一 npm

npm install -g mjml

方法二 點選下載[https://github.com/mjmlio/mjml/releases]

程式碼部分


命令列操作

  • 編譯檔案

$> mjml -r input.mjml

  • 編譯檔案並輸出到output.html

$> mjml -r input.mjml -o output.html

  • 編譯檔案並實時更新至output.html

$> mjml -w input.mjml -o output.html

自定義元件


$> mjml --init-component <name of your component>
# 元件不包含任何文字
# If your component cannot contain anything 
else than text: $> mjml --init-component <name of you component> -e # 沒有東西 將被mjml引擎解析 # It means nothing inside it will be parsed by the mjml engine.

It will create a basic component template in a .js file. Follow the instructions provided in the file and read more about custom components in the documentation

線上編輯


[https://mjml.io/try-it-live]

標準組件


mj-body


<mj-body>
  <!-- You email goes here -->
</mj-body>

mj-section


<mj-body>
  <mj-section full-width="full-width" background-color="red">

    <!-- Your columns go here -->

  </mj-section>
</mj-body>

mj-column


<mj-section>

  <mj-column>
    <!-- You content -->
  </mj-column>

  <mj-column>
    <!-- Your content -->
  </mj-column>

</mj-section>

mj-text


<mj-section>
  <mj-column>

    <mj-text>
      <h1>Hey Title!</h1>
    </mj-text>

  </mj-column>
</mj-section>

<mj-section>
  <mj-column>

    <mj-text>
      Hey There!
    </mj-text>

  </mj-column>
</mj-section>

mj-image


<mj-body>
<mj-section>
  <mj-column>

    <mj-image width="300" src="http://www.online-image-editor.com//styles/2014/images/example_image.png"></mj-image>

  </mj-column>
</mj-section>
</mj-body>

mj-list


<mj-section>
  <mj-column>

    <mj-text>What can I do today?</mj-text>

    <mj-list>
      <li>Go to the store</li>
      <li>sleep</li>
      <li>eat</li>
      <li>sleep again</li>
    </mj-list>

  </mj-column>
</mj-section>

mj-button


mj-section


 <mj-column>
    <mj-button font-family="Helvetica" background-color="#F45E43" color="white">
      Don't click me!
    </mj-button>
  </mj-column>

mj-social


  <mj-column>
    <mj-social
      mode="vertical"
      display="google facebook"
      google-icon-color="#424242"
      facebook-icon-color="#424242"
      facebook-href="my facebook page"
      google-href="my google+ page"/>
  </mj-column>

mj-table


<mj-body>
  <mj-section>
    <mj-column width="100%">

      <mj-table>
        <tr style="border-bottom:1px solid #ecedee;text-align:left;padding:15px 0;">
          <th style="padding: 0 15px 0 0;">Year</th>
          <th style="padding: 0 15px;">Language</th>
          <th style="padding: 0 0 0 15px;">Inspired from</th>
        </tr>
        <tr>
          <td style="padding: 0 15px 0 0;">1995</td>
          <td style="padding: 0 15px;">PHP</td>
          <td style="padding: 0 0 0 15px;">C, Shell Unix</td>
        </tr>
        <tr>
          <td style="padding: 0 15px 0 0;">1995</td>
          <td style="padding: 0 15px;">JavaScript</td>
          <td style="padding: 0 0 0 15px;">Scheme, Self</td>
        </tr>
      </mj-table>

    </mj-column>
  </mj-section>
</mj-body>

mj-invoice


<mj-body>
  <mj-section>
    <mj-column width="100%">

      <mj-invoice format="0,00.00€" intl="name:Product Name">
        <mj-invoice-item name="TV" price="549€" quantity="1" />
        <mj-invoice-item name="DVD - Iron Man II" price="22.99€" quantity="2" />
      </mj-invoice>

    </mj-column>
  </mj-section>
</mj-body>

MJ-INVOICE-ITEM


Display a row in an mj-invoice component

mj-location


<mj-body>
  <mj-section>
    <mj-column width="50%">

      <mj-location address="37 bis, rue du Sentier – 75002 Paris" />

    </mj-column>
  </mj-section>
</mj-body>

例項


<mj-body>
    <mj-section background-color="#ff5a5f" padding="0">
        <mj-column>
            <mj-image src="logo.png" alt="logo" align="left" border="none" width="160" height="46" vertical-align="middle" background-color="#ffffff" padding-left="40" padding-right="0" padding-bottom="20" padding-top="20"></mj-image>
        </mj-column>
    </mj-section>
    <mj-section padding="0">
        <mj-column>
            <mj-text padding-top="20" padding-bottom="0">Hi,<strong>某某某</strong> 您好!</mj-text>
            <mj-text padding-top="10" padding-bottom="0">這是給您傳送的出票成功的通知郵件。</mj-text>
            <mj-text padding-top="0" padding-bottom="0">恭喜您預定的<strong>某某某</strong>到<strong>某某某</strong>,<strong>某某某</strong>出發的單程航班已成功出票。</mj-text>
            <mj-text padding-top="10" padding-bottom="0">電子行程單將稍後傳送,屆時可憑藉列印下來的電子行程單、有效證件在機場值機櫃臺直接換去登機牌,之後通過安檢,順利登機。異鄉好居溫馨提示您,國際機票至少提前3小時前往機場辦理登機手續。</mj-text>
        </mj-column>
    </mj-section>
    <mj-section padding="0">
        <mj-column>
            <mj-text color="#000" padding-top="15" padding-bottom="0">航班詳情</mj-text>
        </mj-column>
    </mj-section>
    <mj-section padding="0">
        <mj-column>
            <mj-table>
                <tbody>
                    <tr style="border:1px solid #79cdce;padding:15px 0;background:#f3fcfa;">
                        <th style="color:#79cdce;text-align:center;">日期</th>
                        <th style="color:#79cdce;text-align:center;">航線</th>
                        <th style="color:#79cdce;text-align:center;">航班號</th>
                        <th style="color:#79cdce;text-align:center;">訂單號</th>
                    </tr>
                    <tr>
                        <td style="border:1px solid #79cdce;text-align:center;">1995</td>
                        <td style="border:1px solid #79cdce;text-align:center;">1995</td>
                        <td style="border:1px solid #79cdce;text-align:center;">1995</td>
                        <td style="border:1px solid #79cdce;text-align:center;"  rowspan="2">1995</td>
                        <tr>
                        <td style="border:1px solid #79cdce;text-align:center;">1995</td>
                        <td style="border:1px solid #79cdce;text-align:center;">1995</td>
                        <td style="border:1px solid #79cdce;text-align:center;">1995</td>
                    </tr>
                    </tr>
                    <tr>
                        <td style="padding: 0 0 0 100px;border:1px solid #79cdce;position:relative;" colspan="4">
                        <strong style="position:absolute;top:0px;left:20px;padding-top:15px;color:#79cdce;">
                        <span style="display:block;font-size:20px;line-height:1;padding:4px 0px;width:30px;margin:0 auto 10px;font-style:normal;background:#79cdce;color:#fff;text-align:center;border-radius:50%;">!</span>
                        中轉提示
                        </strong>
                        <p style="margin-top: 10px;">1.中轉停留時間過長,請合理安排行程。</p>
                        <p style="margin-top: -12px;">2.需在中轉城市換機場轉機,請合理安排您的時間和行程。</p>
                        <p style="margin-top: -12px;">3.此行程需要韓國過境簽證,您可向當地使館提前確認簽證資訊後再購票。</p>
                        </td>
                    </tr>
                </tbody>
            </mj-table>
        </mj-column>
    </mj-section>
    <mj-section padding="0">
        <mj-column>
            <mj-column  padding="0">
                <mj-text color="#000" padding-top="0" padding-bottom="0">乘客資訊</mj-text>
            </mj-column>
        </mj-column>
    </mj-section>
    <mj-section  padding="0">
        <mj-column>
            <mj-table>
                <tbody>
                    <tr style="border:1px solid #79cdce;padding:15px 0;background:#f3fcfa;">
                        <th style="color:#79cdce;text-align:center;">姓名</th>
                        <th style="color:#79cdce;text-align:center;">生日</th>
                        <th style="color:#79cdce;text-align:center;">國籍</th>
                        <th style="color:#79cdce;text-align:center;">證件號</th>
                        <th style="color:#79cdce;text-align:center;">證件有效期</th>
                        <th style="color:#79cdce;text-align:center;">證件簽發地</th>
                        <th style="color:#79cdce;text-align:center;">票號</th>
                    </tr>
                    <tr>
                        <td style="border:1px solid #79cdce;text-align:center;">1995</td>
                        <td style="border:1px solid #79cdce;text-align:center;">1995</td>
                        <td style="border:1px solid #79cdce;text-align:center;">1995</td>
                        <td style="border:1px solid #79cdce;text-align:center;">1995</td>
                        <td style="border:1px solid #79cdce;text-align:center;">1995</td>
                        <td style="border:1px solid #79cdce;text-align:center;">1995</td>
                        <td style="border:1px solid #79cdce;text-align:center;">1995</td>
                    </tr>
                </tbody>
            </mj-table>
        </mj-column>
    </mj-section>
    <mj-section  padding="0">
        <mj-column>
            <mj-text color="#000" padding-top="0" padding-bottom="0">聯絡人資訊</mj-text>
        </mj-column>
    </mj-section>
    <mj-section  padding="0">
        <mj-column>
            <mj-table>
                <tbody>
                    <tr style="border:1px solid #79cdce;padding:15px 0;background:#f3fcfa;">
                        <th style="color:#79cdce;text-align:center;">姓名</th>
                        <th style="color:#79cdce;text-align:center;">生日</th>
                        <th style="color:#79cdce;text-align:center;">國籍</th>
                    </tr>
                    <tr>
                        <td style="border:1px solid #79cdce;text-align:center;">1995</td>
                        <td style="border:1px solid #79cdce;text-align:center;">1995</td>
                        <td style="border:1px solid #79cdce;text-align:center;">1995</td>
                    </tr>
                </tbody>
            </mj-table>
        </mj-column>
    </mj-section>
    <mj-section  padding="0">
        <mj-column>
            <mj-text padding-top="10" padding-bottom="0"><span style="display:inline-block;font-size:10px;line-height:1;padding:4px 0px;width:20px;margin:0 auto 10px;font-style:normal;background:#79cdce;color:#fff;text-align:center;border-radius:50%;">!</span>
                退改簽規則及乘機提示</mj-text>
            <mj-text padding-top="0" padding-bottom="0">1.退票規則以航空公司規定為標準,如需退改請撥打電話400-991-5791。</mj-text>
            <mj-text padding-top="0" padding-bottom="0">2.改簽規則以航空公司規定為標準,如需退改請撥打電話400-991-5791。</mj-text>
            <mj-text padding-top="0" padding-bottom="0">3.航司行李限制: </mj-text>
          <mj-text padding-top="0" padding-bottom="0" padding-left="50">美國航空: </mj-text>
            <mj-text padding-top="0" padding-bottom="0" padding-left="50">1件x長寬高三邊和115cm(20寸以內登機箱),7kg左右,</mj-text>
            <mj-text padding-top="0" padding-bottom="0" padding-left="50">2件x長寬高三邊和158cm(28寸以內登機箱),23kg左右。</mj-text>
          <mj-text padding-top="0" padding-bottom="0" padding-left="50">加拿大航空: </mj-text>
          <mj-text padding-top="0" padding-bottom="0" padding-left="50">1件x長寬高三邊和115cm(20寸以內登機箱),7kg左右,</mj-text>
            <mj-text padding-top="0" padding-bottom="0" padding-left="50">2件x長寬高三邊和158cm(28寸以內登機箱),23kg左右。</mj-text>
            <mj-text padding-top="0" padding-bottom="20">4.支付成功後24小時內出票,僅提供電子行程單。</mj-text>
        </mj-column>
    </mj-section>
    <mj-section  padding="0">
        <mj-column>
            <mj-text padding-top="0" padding-bottom="0">Thanks,</mj-text>
            <mj-text padding-top="0" padding-bottom="10">The Team</mj-text>
        </mj-column>
        <mj-column>
            <mj-text padding-top="0" padding-bottom="0">我是系統自動傳送的郵件,</mj-text>
            <mj-text padding-top="0" padding-bottom="10">請不要直接回復哦</mj-text>
        </mj-column>
    </mj-section>
    <mj-section background-color="#f7f7f7" padding="0">
        <mj-column>
            <mj-text padding-top="15" padding-bottom="0">郵件顯示有問題? <a href="" style="color: #ff5a5f;">檢視網頁版</a>或把新增到聯絡人</mj-text>
            <mj-text padding-top="0" padding-bottom="0">©2016  All rights reserved  </mj-text>
            <mj-text padding-top="0" padding-bottom="0">天津市</mj-text>
        </mj-column>
    </mj-section>
</mj-body>