Giter Site home page Giter Site logo

mailguardian's Introduction

MailGuardian

About

This tool was built with the initial purpose of serving as a quick means of proof testing email templates built with the MJML framework. Eventually it grew to be more than that, and took the shape of a devtool to build, manage and test components (block), email templates and emails. You can send email samples, build and store templates, build components, test for spam score and compile MJML emails into regular HTML or Marketo compatible HTML.

Instalation

MailGuardian was made and tested with TypeScript v5.0.2 and Node v18.12.0. Your mileage may vary depending on the version you have installed.

  1. Install Docker
  2. Create a supabase project and open the API settings page
  3. Run npm install -g mailguardian
  4. Run the install-mailer command and provide the service_role key, project URL and provide a secret key
  5. Run mg login <email> <password>
  6. You are ready to start, just run mg start the CLI.

Style requirements for importing components

For now, the only format supported by the component importer is the one below. Outer styles must come first, followed by a 480px media query and a 280px media query. A different order hasn't been tested, so keep to this one.

<mj-head>
  <mj-style>
    outer-style {
      styles;
    }

    @media (max-width: 480px) {
      480px-mobile-styles;
    }

    @media (max-width: 280px) {
      280px-mobile-styles
    }
  </mj-style>
</mj-head>

Requirements for Marketo MJML

ALL direct child elements of <mjml> (top elements) in the MJML file (<mj-section> or <mj-wrapper>) MUST have a css-class attribute. That is how the Marketo modules are going to be named (can be renamed later). Try using a name descriptive of the function of the section/wrapper.

All inline padding of top elements (<mj-section> or <mj-wrapper>), MUST be fixed. Variables are NOT allowed as values for top elements.

Marketo variables can be used with the MJML, and they will be parsed for Marketo. The required syntax is as follows, and MUST be followed:

Text variable:        ${text: variableName; default: Text with spaces and no quotation marks!}
Number variable: ${number: variableName; default: 10} (ONLY NUMBERS)
Color variable:      ${color: variableName; default: #FFFFFF} (ONLY HEX COLORS)

The name value MUST be a single word. Camel case is not mandatory. Single quotes are optional around name and default values. Double quotes are FORBIDDEN to avoid conflict with the HTML. All following examples are valid Marketo variables and will be correctly parsed by Mailer:

${text: fontWeight; default: bold}</code>
${text: textAlignment; default: 'left'}
${color: 'bgColor'; default: '#F7F7F7'}
${number:  'name'  ; '20'  }
${number:   name    ;  20   }

The last two examples are meant to demonstrate that whitespaces before and after the name and default values or before and after the semi-colon will be trimmed. Whitespace before the name attribute (text, color, number) is not allowed:

${ text: 'someName'; default: 'some text'}

The above variable is invalid. Even though the rest of the variable is valid, the whitespace between '${' and 'text' renders it invalid.

It is preferable that you just follow the regular ${text: coolName; default: someText} with no whitespaces and quotation marks.

<mj-column
  background-color="${color: columnBgColor; default: #F2F2F2}"
  padding="0px ${number: columnHPadding; default: 10}px">
  ***CHILDREN***
</mj-column>

The default field is NOT optional. The default field of a text variable can be filled with any kind of text, whitespace and most special characters. It can be wrapped by single quotes. Whitespace before and after the start of the text will be trimmed.

Remember to follow the template correctly.

Usage

Create and use components to build templates. The steps should be self explanatory. You can create a new template from scratch, without importing components. When you create a template, MailGuardian also takes care of creating remote mirror bucket. This bucket is used for send e-mail proof tests. Images must be hosted for them to load when you open an email.

The steps you must follow to send a proof test are:

  1. create a template
  2. export the template to the server
  3. prepare the template to be sent
  4. send the proof test

You can also use the spam scoring function. To use it, you must have docker installed. First, build the SpamAssassin image. After building it, you can test an email straight away. To improve results, you can also train SpamAssassin. MailGuardian takes care of fetching a spam and ham database that it uses to train SpamAssassin.

Finally, you can generate a report on the email. The report compiles SpamAssassin results as well as checking if the HTML file is too large (Gmail cropping) or if the loaded email weight is too large.

Known bugs

  1. Component sorter doesn't work properly in the native Bash shell:
  • This is a problem with the Enquirer library
  • It DOES work in the Bash shell inside VSCode
  1. I get a ENOENT error after selecting a folder from the folder select window:
  • This is a problem with the win-select-folder library
  • Sometimes it appends a linebreak in the middle of the path, which breaks it
  • Try again and it should work

mailguardian's People

Contributors

docsobral avatar

Watchers

 avatar

mailguardian's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.