From fe597e8ef04b7754ec3beb48ece5accd0da446f8 Mon Sep 17 00:00:00 2001 From: Arturo Ortega Date: Mon, 22 Jul 2019 14:06:18 -0500 Subject: [PATCH] Update README, package and logo, 2.0.0v --- README.md | 207 ++++++++++++++++++++++++++++++++++++++++++++------- index.js | 34 ++++++--- logo.png | Bin 0 -> 8556 bytes package.json | 4 +- 4 files changed, 209 insertions(+), 36 deletions(-) create mode 100644 logo.png diff --git a/README.md b/README.md index 6bb6e84..9c8910f 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@

- + Logo @@ -31,6 +31,7 @@

An easy way to send email templates via SMTP with your Parse Server!
+ (Multi Language Support)
Report Bug · @@ -49,6 +50,9 @@ * [Prerequisites](#prerequisites) * [Installation](#installation) * [Usage](#usage) + * [Simple template](#simple-template) + * [Multi template](#multi-template) + * [Multi language](#multi-languaje) * [Roadmap](#roadmap) * [Contributing](#contributing) * [License](#license) @@ -62,9 +66,11 @@ -This is a module maded it for Parse Server and an easy solution to send emails via SMTP with templates in HTML. +This is a module made it for Parse Server and an easy solution to send emails via SMTP with templates in HTML, also with the posibility of use a multi language support for your templates. -We recomend to use the [Cerberus](https://github.com/TedGoas/Cerberus) for the email templates. +We recomend you to use the [Cerberus](https://github.com/TedGoas/Cerberus) project for the email templates. + +( if you know about other templates you can added ) ### Built With @@ -75,8 +81,7 @@ We recomend to use the [Cerberus](https://github.com/TedGoas/Cerberus) for the e ## Getting Started -This is an example of how you may give instructions on setting up your project locally. -To get a local copy up and running follow these simple example steps. +This module is a very simple solution and because of that you can get it up and running in a few minutes. ### Installation @@ -90,7 +95,7 @@ yarn ```sh yarn add parse-smtp-template ``` -2. In your Parse Server add the configuration of your email account +2. In your Parse Server add the configuration of the emailAdapter and fill the requeriments to connect with your email account ``` var api = new ParseServer({ @@ -102,36 +107,45 @@ var api = new ParseServer({ host: "smtp.mail.com", user: "name@domain.com", password: "SecurePassword", - fromAddress: 'app@domain.com', - - // Optional Parameters - template: true, - templatePath: "views/templates/main.html", - passwordSubject: "A custom password recovery Subject", - confirmSubject: "A custom email confirmation Subject" + fromAddress: 'app@domain.com' } } }) ``` -> Now is ready to use it! +> Now is ready to use! + +-- +
3. (Optional) Config your email template -The templates have access to 4 parameters to send +In this module you can choise to use a simple template (1 template for bouth emails) or multiTemplate (1 template per type of email) +If you want to use the multi Language mode you need to set up the multi languaje mode. +--- + +--- + +## Usage +Use it, it´s very easy 😎😃👌 + +### Simple template + +This template is used to send bouth email (password recovery and email confirmation) + +The templates have access to 6 parameters : * link -* username +* btn +* body +* username * appName * subject -To use it you only need to write ${parameter} to use it on the email +To use it you only need to write `${parameter}` on the template **IMPORTANT** -- **All the HTML file need to use only double quotes to avoid problems** - - -## Usage - -To use a custome template is necessary to select the correct file. -In this example we are gonna use `template.html`` +--- +If you want a custome template is necessary to select the correct file. +In this example we are gonna use `template.html` index.js ``` @@ -140,11 +154,32 @@ emailAdapter: { options: { ... template: true, - templatePath: "views/templates/template.html" + templatePath: "views/templates/template.html", + + // Custome options to your emails + // You can add more options if you need + passwordOptions: { + subject: "Password recovery", + body: "Custome pasword recovery email body", + btn: "Recover your password" + /* --EXTRA PARAMETERS-- + others: { + extraParameter + } + */ + }, + confirmOptions: { + subject: "E-mail confirmation", + body: "Custome email confirmation body", + btn: "confirm your email" + }, } } ``` +> To use the extra parameters please use `${options.extraParameter}` + + directory ``` project @@ -174,8 +209,130 @@ project ... ``` -> You can look up the template is by default in the templates folder to get a better understanding +> You can look up the template by default to get a better understanding + +-- +### Multi template + +This option is a better way to customize your emails because you are able to use a different template per type of email. + +This template have access to 4 parameters: +* user _(all the info of the _User object)_ +* link +* appName +* options + +The __options__ parameter needs to have _subject, body_ and _btn_ like minimun + + +index.js +``` +emailAdapter: { + module: 'parse-smtp-template', + options: { + ... + multiTemplate: true, + confirmTemplatePath: "views/templates/confirmTemplate.html", + passwordTemplatePath: "views/templates/passwordTemplate.html", + + // Custome options to your emails + // You can add as much as you need + passwordOptions: { + subject: "Password recovery", + body: "Custome pasword recovery email body", + btn: "Recover your password" + /* --EXTRA PARAMETERS-- + others: { + extraParameter + } + */ + }, + confirmOptions: { + subject: "E-mail confirmation", + body: "Custome email confirmation body", + btn: "confirm your email" + }, + } +} +``` +> To use the extra parameters please use ${options.extraParameter} + +-- +### Multi language +To be able to use Multi languaje is necesary set true `multiTemplate` and `multiLang`. + +index.js +``` +emailAdapter: { + module: 'parse-smtp-template', + options: { + ... + multiTemplate: true, + confirmTemplatePath: "views/templates/confirmTemplate.html", + passwordTemplatePath: "views/templates/passwordTemplate.html", + multiLang: true, + multiLangPass: { + es: { + subject: "Recuperación de Contraseña", + body: "Cuerpo del correo de recuperación de contrseña", + btn: "recupera tu contraseña" + /* --EXTRA PARAMETERS-- + others: { + extraParameter + } + */ + }, + en: { + subject: "Password recovery", + body: "Password recovery email body", + btn: "Recover your password" + }, + fr: { + subject: "Récupération du mot de passe", + body: "Corps de l'e-mail de récupération de mot de passe", + btn: "récupérer votre mot de passe" + } + }, + + multiLangConfirm: { + es: { + subject: "Confirmación de Correo", + body: "Cuerpo del correo de confirmación de correo", + btn: "confirma tu correo" + }, + en: { + subject: "E-mail confirmation", + body: "Mail confirmation email body", + btn: "confirm your email" + }, + fr: { + subject: "Mail de confirmation", + body: "Courriel de confirmation du corps de l'e-mail", + btn: "confirmez votre email" + } + }, + + // Default options if the lang of the user isn´t in some of the multiLanguage objects + passwordOptions: { + subject: "Password recovery", + body: "Custome pasword recovery email body", + btn: "Recover your password" + /* --EXTRA PARAMETERS-- + others: { + extraParameter + } + */ + }, + confirmOptions: { + subject: "E-mail confirmation", + body: "Custome email confirmation body", + btn: "confirm your email" + }, + } +} +``` +--- ## Roadmap diff --git a/index.js b/index.js index 7b76a30..997c889 100644 --- a/index.js +++ b/index.js @@ -109,6 +109,10 @@ var SmtpMailAdapter = mailOptions => { ? passwordOptions.btn || "Reset Password" : confirmOptions.btn || "Confirm Email"; + let options = mail.subject.indexOf("Password") !=-1 + ? passwordOptions.others || {} + : confirmOptions.others || {}; + if (_templates) { filePath = path.join("./", _templatePath); template = eval('`' + fs.readFileSync(filePath).toString() + '`'); @@ -170,25 +174,31 @@ var SmtpMailAdapter = mailOptions => { throw "You need to add a template for the confirmation emails and pass the options"; } else if(_multiLang && !mailOptions.multiLangConfirm) { throw "To use multiLang in the templates needs to pass the multiLangPass object with the translations"; + } else if(!mailOptions.confirmOptions + || !mailOptions.confirmOptions.subject + || !mailOptions.confirmOptions.body + || !mailOptions.confirmOptions.btn) { + throw "You need to set the 'confirmOptions' object with subject, body and btn" } const user = data.user.attributes; const link = data.link; const appName = data.appName; - const options = mailOptions.confirmOptions; + const defOptions = mailOptions.confirmOptions; + const options = mailOptions.passwordOptions.others || {}; const langOptions = mailOptions.multiLangConfirm[user.lang]; let subject = (_multiLang && typeof langOptions !== 'undefined') ? langOptions.subject - : options.subject + : defOptions.subject let body = (_multiLang && typeof langOptions !== 'undefined') ? langOptions.body - : options.body + : defOptions.body let btn = (_multiLang && typeof langOptions !== 'undefined') ? langOptions.btn - : options.btn + : defOptions.btn let filePath = path.join("./", mailOptions.confirmTemplatePath); let template = eval('`' + fs.readFileSync(filePath).toString() + '`'); @@ -245,25 +255,31 @@ var SmtpMailAdapter = mailOptions => { throw "You need to add a template for the password recovery emails"; } else if(_multiLang && !mailOptions.multiLangPass) { throw "To use multiLang in the templates needs to pass the multiLangPass object with the translations"; - } + } else if(!mailOptions.passwordOptions + || !mailOptions.passwordOptions.subject + || !mailOptions.passwordOptions.body + || !mailOptions.passwordOptions.btn) { + throw "You need to set the 'passwordOptions' object with subject, body and btn" +} const user = data.user.attributes; const link = data.link; const appName = data.appName; - const options = mailOptions.passwordOptions; + const defOptions = mailOptions.passwordOptions; + const options = mailOptions.passwordOptions.others || {}; const langOptions = mailOptions.multiLangPass[user.lang]; let subject = (_multiLang && typeof langOptions !== 'undefined') ? langOptions.subject - : options.subject + : defOptions.subject let body = (_multiLang && typeof langOptions !== 'undefined') ? langOptions.body - : options.body + : defOptions.body let btn = (_multiLang && typeof langOptions !== 'undefined') ? langOptions.btn - : options.btn + : defOptions.btn let filePath = path.join("./", mailOptions.passwordTemplatePath); let template = eval('`' + fs.readFileSync(filePath).toString() + '`'); diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ab1a1bec8cf9e7c59e2cf923f6830b91265891e6 GIT binary patch literal 8556 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 literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 526a625..2020b4a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "parse-smtp-template", - "version": "1.0.0", - "description": "Parse Server Module to easy send emails via SMTP with a customizable template option", + "version": "2.0.0", + "description": "Parse Server Module to send emails via SMTP with a customizable template option and Multi Language", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1"