Designing and testing emails is a pain. HTML tables, inline CSS, various devices and clients to test, and varying support for the latest web standards.
This Grunt task helps simplify things.
You may already have these installed on your system. If not, you'll have to install them.
npm install grunt-cli -g
)If you haven't used Grunt before check out Chris Coyier's post on getting started with Grunt.
Clone this repo, cd to the directory, run npm install
to install the necessary packages.
cd grunt-email-workflow
npm install
The very first installation may take a while. Please wait patiently until completion.
Run grunt build
and check out your /dist
folder to see your compiled and inlined email templates.
Run grunt serve
, a new live-reload browser tab will open. Happy coding :)
If you're using Mailgun and/or Amazon S3 create a secrets.json
file in your project root as outlined below under "Sensitive Information".
If you don't use or need these services it's ok to skip this step.
We encourage you not to store sensitive data in your git repository. If you must, please look into git-encrypt or some other method of encrypting your configuration secrets.
secrets.json
in your project root.secrets.json
and enter the appropriate credentials for the services you want to connect with.{
"mailgun": {
"api_key": "YOUR MG PRIVATE API KEY",
"domain": "YOURDOMAIN.COM",
"sender": "E.G. POSTMASTER@YOURDOMAIN.COM",
"recipient": "WHO YOU WANT TO SEND THE EMAIL TO"
},
"s3": {
"key": "AMAZON S3 KEY",
"secret": "AMAZON S3 SECRET",
"region": "AMAZON S3 REGION",
"bucketname": "AMAZON S3 BUCKET NAME",
"bucketdir": "AMAZON S3 BUCKET SUBDIRECTORY (optional)",
"bucketuri": "AMAZON S3 PATH (ex: https://s3.amazonaws.com/)"
}
}
After this you should be good to go. Run grunt build
and your email templates should appear automagically in a /dist
folder.
This project uses SCSS. You don't need to touch the .css files, these are compiled automatically.
For changes to CSS, modify the .scss
files.
Media queries and responsive styles are in a separate style sheet so that they don't get inlined. Note that only a few clients support media queries e.g. iOS Mail app.
Handlebars and Assemble are used for templating.
/layouts
contains the standard header/footer HTML wrapper markup. You most likely will only need one layout template, but you can have as many as you like.
/emails
is where your email content will go. To start you off I've included example transactional emails based on my simple HTML email template.
/data
contains optional .yml or .json data files that can be used in your templates. It's a good way to store commonly used strings and variables. See /data/default.yml
and /partials/follow_lee.hbs
for an example.
/partials
contains optional .hbs files that can be thought of like includes. To use a partial, for example /partials/follow_lee.hbs
you would use the following code in your emails template:
{{> follow_lee }}
/partials/components
contains optional .hbs files that can help generate your markup. Each component will typically have a corresponding Sass file in src/css/sass/<component_name>.scss
. To use a component, for example /partials/components/button.hbs
you would use the following code in your emails template. (note: You can use single -or- double quotes for attributes)
{{> button type="primary" align="center" url="LINK GOES HERE" title="ANCHOR TEXT GOES HERE" }}
In terminal, run grunt build
. This will:
See the output HTML in the dist
folder. Open them and preview it the browser.
Alternatively run grunt serve
. This will check for any changes you make to your .scss and .hbs templates, automatically run the tasks, and serve you a preview in the browser on http://localhost:4000. Saves you having to run grunt every time you make a change.
In terminal, run grunt serve
.
grunt
+ the watch
task will be initiatedwatch
task is not runningI've added a few templates here to help you get started.