diff --git a/README.md b/README.md index c8137a3..46c0077 100644 --- a/README.md +++ b/README.md @@ -1,54 +1,60 @@ # Responsive HTML email signature(s) + [![npm](https://img.shields.io/npm/v/responsive-html-email-signature.svg)](https://www.npmjs.com/package/responsive-html-email-signature) [![license](https://img.shields.io/github/license/danmindru/responsive-html-email-signature.svg)](/LICENSE) [![test action status](https://github.com/danmindru/responsive-html-email-signature/workflows/Test%20template%20output/badge.svg)](https://github.com/danmindru/responsive-html-email-signature/actions) - ### Let's punch email clients in the stomach 👊 + When you need some basic responsive email signatures that work on mobile.
...and your colleagues need them too.
...but you don't want to deal with tables and inline styles. [Read the docs in other languages](/i18n) ↗️ - ## Preview + Here are some examples: ![responsive emails-01](https://cloud.githubusercontent.com/assets/1515742/10591900/13889d32-76b9-11e5-8dc0-b89d80189e93.png) ![responsive emails-02](https://cloud.githubusercontent.com/assets/1515742/10591901/139c4954-76b9-11e5-80f7-5b0ccaf5af81.png) ## Getting started + - Clone repo `git clone https://github.com/danmindru/responsive-html-email-signature.git` - Run `npm install` - Run `npm start` to generate templates from configuration. This will continue to watch your files and re-make the template until you exit. ### Customizing templates -- Edit files in */templates* + +- Edit files in _/templates_ - Open files from `./dist` in your fav browser to check them out > When you're done, check out [how to add them to your email client of choice](#usage-with-different-email-clients) if in doubt. - ## Motivation + Writing HTML emails & email signatures sucks. Let's make it easier. We can't fix all email clients, but we can surely make our lives easier with some automation.
## What does this pile of code do + - [x] generates email templates from your config - [x] allows generating multiple templates at once (for your colleagues too!) - [x] transforms linked (``) CSS into inline styles -- [x] embeds local `img[src]` into the template (base64).* +- [x] embeds local `img[src]` into the template (base64).\* - [x] minifies the template - [x] ads some basic media queries for mail clients that support them - [x] can build templates from multiple sources - [x] watches HTML / CSS files for changes and re-builds - [x] supports LESS / SASS / PostCSS - [x] autoprefixer, so you don't have to worry about your `-moz-`s or `-webkit-`s +- [x] linting, checks for used template config parameters and more! -**Some mail clients might have [hard limits](https://support.google.com/a/answer/176652?hl=en) regarding the email size, so don't include large images if possible. If you need to, use a URL instead and host the image somewhere else.* - +\*_Some mail clients might have [hard limits](https://support.google.com/a/answer/176652?hl=en) regarding the email size, so don't include large images if possible. If you need to, use a URL instead and host the image somewhere else._ ## Docs + ### Installing + ```bash $ npm install $ npm start # By default, templates will be created in `./dist` and HTML & CSS files in './templates' will be watched for changes. @@ -57,9 +63,11 @@ $ npm start # By default, templates will be created in `./dist` and HTML & CSS f > Note: works well with node v10+. Earlier and later versions might also work. ### Configuring + To make a basic email from existing templates, you only have to edit the `conf.json` file in each template. For example, the dark template accepts the following: + ```json { "id": "", @@ -75,15 +83,15 @@ For example, the dark template accepts the following: ``` ### Generating multiple emails from the same config (for your colleagues too!) + To generate multiple templates, use an array instead of an object in `conf.json`, like so: + ```json -[ - {...conf1}, - {...conf2} -] +[{ ...conf1 }, { ...conf2 }] ``` ### Using config values in HTML + Config variables are made available in all HTML files.
Add any variable to the configuration file and use it in HTML like so: @@ -95,23 +103,23 @@ Where the configuration contains: ```json { - yourCustomVariable: "Custom!" + "yourCustomVariable": "Custom!" } ``` > NB: config variables also accept HTML. That's useful for including links. - ### Adding CSS & pre-processing + Any number of CSS, SASS or LESS files in a template directory & they will be automatically processed & inlined into the files outputed in `./dist`. - ### Multiple emails in the same template + Templates can contain multiple HTML files from which to build emails. For example, the dark template has `signature.html` and `signature-reply.html`, which is a simpler version. Each HTML file will be treated as an email template, except for `*.inc.html`. See below ⬇️ +### Using partials (\*.inc.html) -### Using partials (*.inc.html) By naming files with `*.inc.html`, they become partials. Partials will not be treated as templates (ignored), but they can be included in any HTML template using the `@include` HTML comment. ```html @@ -122,12 +130,17 @@ By naming files with `*.inc.html`, they become partials. Partials will not be tr Partials are useful if you have bits of HTML that repeat, like headers, footers, etc. +### Advanced templating + +Inside HTML files, any [preprocess directive](https://github.com/jsoverson/preprocess#all-directives) is supported, such as `@if`, `@extend`, `@exec`, etc. ## Template structure (examples) + There are no rules regarding how to structure templates, but it's a good idea to create directories for a template group.
There are 2 examples of template structures, one for the `light` email template and one for the `dark` one. Here's how the dark one is structured: + ```bash ./templates ├── dark @@ -142,6 +155,7 @@ Here's how the dark one is structured: ``` Here's how the light one is structured: + ```bash ./templates ├── light @@ -160,62 +174,70 @@ There's one convention you have to keep in mind: `all files that you wish to inc You are of course encouraged to change the default structure for your use case. - ## Overview of the build process + The diagram below shows what happens to your email templates. Each folder in 'templates' is considered a `template group`. A template file will be generated for each of the configuration objects you add have in the template group -> `conf.js`. ![Responsive HTML email template/signatures diagram](https://user-images.githubusercontent.com/1515742/45000195-35268300-afc3-11e8-82b4-7507430c48a0.png) - ## CSS Support + Remember, it's HTML mails, so you need to check a big-ass table to find out nothing's gonna work. See [this](https://www.campaignmonitor.com/css/) for more info. [Gulp-inline-css](https://www.npmjs.com/package/gulp-inline-css) is being used to convert whatever CSS you throw at it to inline styles, but it probably won't handle everything. Some bonuses of using `gulp-inline-css`: many css props will be converted to attributes. For example, the 'background-color' prop will be added as 'bgcolor' attribute to table elements. For more details take a look at the [inline-css mappings](https://github.com/jonkemp/inline-css/blob/master/lib/setTableAttrs.js). - ## Usage with different email clients + ### Thunderbird + There are several Thunderbird plugins which can automatically insert signatures when composing e-mails. We recommend [SmartTemplate4](https://addons.mozilla.org/en-us/thunderbird/addon/smarttemplate4) as one of the options. It can use different templates for new e-mails, replies and forwarded e-mails. ### Gmail + Go to your mailbox settings & paste the generated signature. + > **NB**: Gmail doesn't seem to support inlined (base64) images. You have to use absolute `http(s)//...` from them to load up. ### Office 365 / outlook.live.com + It's a bit hacky to set up, but possible. See [this issue](https://github.com/danmindru/responsive-html-email-signature/issues/52). ### Apple Mail / OS X (oh boy) #### Solution 1 + - Open Mail.app and go to `Mail` -> `Preferences` -> `Signatures` - Create a new signature and write some placeholder text (doesn't matter what it is, but you have to identify it later). - Close Mail.app. - Open terminal, then open the signature files using TextEdit (might be different for iCloud drive check the article below). + ``` $ open -a TextEdit ~/Library/Mobile\ Documents/com~apple~mail/Data/V3/MailData/Signatures/ubiquitous_*.mailsignature ``` + - Keep the file with the placeholder open, close the other ones. -- Replace the `...` and it's contents with the template of your choice. *Don't remove the meta information at the top!* +- Replace the `...` and it's contents with the template of your choice. _Don't remove the meta information at the top!_ - Open Mail.app and compose a new mail. Select the signature from the list to test it out. > **NB**: Images won't appear in the signature preview, but will work fine when you compose a message. - #### Solution 2 -You can also open the HTML files in `/dist` in a browser, CMD + A, CMD + C and then paste into the signature box. This won't copy the `` part or the `
\ No newline at end of file +
diff --git a/tests/sample/dark/signature-reply-dark.html b/tests/sample/dark/signature-reply-dark.html index 3df3ba9..849e02f 100644 --- a/tests/sample/dark/signature-reply-dark.html +++ b/tests/sample/dark/signature-reply-dark.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/tests/sample/light/full-mail-light.html b/tests/sample/light/full-mail-light.html index ea9094e..bace661 100644 --- a/tests/sample/light/full-mail-light.html +++ b/tests/sample/light/full-mail-light.html @@ -1 +1 @@ -
Hi there,
Thanks for writing up this email.
We are delighted to reply with a responsive template.
\ No newline at end of file +
Hi there,
Thanks for writing up this email.
We are delighted to reply with a responsive template.
\ No newline at end of file diff --git a/tests/sample/light/signature-light.html b/tests/sample/light/signature-light.html index 974835c..446215b 100644 --- a/tests/sample/light/signature-light.html +++ b/tests/sample/light/signature-light.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/tests/sample/light/signature-reply-light.html b/tests/sample/light/signature-reply-light.html index 39ea863..6995b98 100644 --- a/tests/sample/light/signature-reply-light.html +++ b/tests/sample/light/signature-reply-light.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file