UNPKG

ts-mailer

Version:

This lib provide a class and function as singleton instance to compile a hbs template adding data and send it as an email using aws-ses. ## Send email using hbs template and aws-ses

191 lines (136 loc) 4.76 kB
# ts-mailer This lib provide a class and function as singleton instance to compile a hbs template adding data and send it as an email using aws-ses. ## Send email using hbs template and aws-ses <a href="https://www.npmjs.com/package/ts-mailer" rel="nofollow" class="keychainify-checked"> <img src="https://badgen.net/github/checks/4lessandrodev/ts-mailer/main" alt="checks" style="max-width: 100%;"> </a> <a href="https://www.npmjs.com/package/ts-mailer" rel="nofollow" class="keychainify-checked"> <img src="https://badgen.net/github/stars/4lessandrodev/ts-mailer" alt="stars" style="max-width: 100%;"> </a> <a href="https://www.npmjs.com/package/ts-mailer" rel="nofollow" class="keychainify-checked"> <img src="https://badgen.net/github/commits/4lessandrodev/ts-mailer/main" alt="commits" style="max-width: 100%;"> </a> <a href="https://www.npmjs.com/package/ts-mailer" rel="nofollow" class="keychainify-checked"> <img src="https://badgen.net/github/last-commit/4lessandrodev/ts-mailer/main" alt="last commit" style="max-width: 100%;"> </a> <a href="https://www.npmjs.com/package/ts-mailer" rel="nofollow" class="keychainify-checked"> <img src="https://badgen.net/github/license/4lessandrodev/ts-mailer" alt="license" style="max-width: 100%;"> </a> <a href="https://www.npmjs.com/package/ts-mailer" rel="nofollow" class="keychainify-checked"> <img src="https://badgen.net/github/dependabot/4lessandrodev/ts-mailer" alt="dependabot" style="max-width: 100%;"> </a> <a href="https://www.npmjs.com/package/ts-mailer" rel="nofollow" class="keychainify-checked"> <img src="https://badgen.net/github/tag/4lessandrodev/ts-mailer" alt="tags" style="max-width: 100%;"> </a> <a href="https://www.npmjs.com/package/ts-mailer" rel="nofollow" class="keychainify-checked"> <img src="https://badgen.net/github/closed-issues/4lessandrodev/ts-mailer" alt="issues" style="max-width: 100%;"> </a> ### Remember to configure your aws-ses Access you aws account and set your [aws-ses](https://aws.amazon.com/ses/?nc2=type_a) Tutorial step by step [Here](https://www.replyup.com/blog/amazon-ses-tutorial/) ### Installation ```sh $ npm install ts-mailer # OR $ yarn add ts-mailer ``` ### Variables on your .env ```env AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_MAILER_REGION= ``` ### Create your hbs template You can define attributes using double key as example below. [Documentation](https://handlebarsjs.com/guide/) You can preview your template using vscode extension [Here](https://marketplace.visualstudio.com/items?itemName=greenbyte.handlebars-preview) ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>my-template</title> </head> <body> <!-- data will apply this attribute ---> <h1>{{ userName }}</h1> </body> </html> ``` ### Import lib The lib provide a singleton instance fo all your application as function or class Example how to import it as Class ```ts import { SESMailer } from 'ts-mailer'; const sesMailer = new SESMailer(); const result = await sesMailer.sendEmail({ ... }); ``` Example how to import it as function ```ts import { mailer } from 'ts-mailer'; ``` ### Sending an email The mailer imported already is a singleton instance. you do not need to instantiate it. ```ts import { resolve } from 'path'; const result = await mailer.sendEmail({ fromEmail: 'my-email@domain.com', subject: 'some subject', templatePath: resolve(__dirname, 'templates', 'my-template.hbs'), toEmails: ['destination@domain.com'], data: { userName: 'John Doe' }, bcc: ['financial@domain.com'], cc: ['my-email@domain.com'] }); ``` ### Payload ```ts console.log(result); ` "$metadata": { "httpStatusCode": 200, "requestId": "e6c808b4-4246-43a5-908d-bfb2d42b5de0", "attempts": 1, "totalRetryDelay": 0 } "MessageId": "0100017fa29f0e77-d32250df-e245-4bbc-b7f3-9d56a0a214ae-000000" ` ``` ### Summary - `fromEmail`: email address origin (email you set on your aws-ses) - `subject`: email subject - `templatePath`: the dir path to get your hbs template - `toEmails`: emails recipients - `data`: attributes value to handled and apply on your hbs template - `bcc`: emails recipients to receive as blind carbon copy - `cc`: emails recipients to send a visible copy ### Generic Types You can define interfaces to your template data. Generic types. ```ts interface TemplateData { userName: string url: string } ``` So you can provide your interface on call `sendEmail` function. Now the data attributes will be typed ```ts await mailer.sendEmail<TemplateData>({ ...params, data: { url, userName } }); ```