Some of our articles:
- Building a Scalable Notification System with gRPC and Microservices
- How to Send Email Notifications using Python? (With Code Examples)
- A Complete Guide on Notification Infrastructure for Modern Applications in 2023
Method 1: Using the Nodemailer Module
1.1 Installation and Setup
npm install nodemailer --save
Create emailSender.js
:
const nodemailer = require('nodemailer');
// Setup Nodemailer transporter
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'your-email@gmail.com',
pass: 'your-email-password'
}
});
// ... rest of the code
1.2 Creating a Nodemailer Transporter
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'your-email@gmail.com',
pass: 'your-email-password'
}
});
1.3 Setting Message Options
const mailOptions = {
to: 'test@example.com',
from: 'your-email@gmail.com',
subject: 'Subject',
text: 'Body'
};
1.4 Sending Emails with Attachments
const mailOptionsWithAttachment = {
// ... other options
attachments: [
{
filename: 'file.txt',
path: '/path/to/file.txt'
}
]
};
1.5 HTML Emails with Dynamic Content
Install email-templates and pug:
npm install email-templates pug --save
Update emailSender.js
as per your template.
1.6 Now, create your email templates.
Let's focus on a common scenario: sending a welcome email for new user registration.
Create subject.pug
:
= `Hi #{firstName} #{lastName}, welcome to My App!`
Create html.pug
:
h1 Hello #{firstName} #{lastName}
p.
Welcome to My App! Now your test emails will be safe.
We just need to make sure your account is real.
a(href='https://example.com/confirmation') Confirm!
Ensure your directory structure looks like this:
├── app.js
├── emails
│ └── welcome
│ ├── html.pug
│ └── subject.pug
1.7 Sending Emails with Dynamic Content
Now, let's modify our Node.js application to use these templates:
// ... (previous code)
// Step 5: Create an email-templates instance
const Email = require('email-templates');
const email = new Email({
message: {
from: 'hi@example.com',
},
send: true,
transport: {
host: 'smtp.mailtrap.io',
port: 2525,
ssl: false,
tls: true,
auth: {
user: 'your-mailtrap-username',
pass: 'your-mailtrap-password',
},
},
});
// Step 6: Define user data
const people = [
{ firstName: 'Diana', lastName: 'One', email: 'diana@example.com' },
{ firstName: 'Alex', lastName: 'Another', email: 'alex@example.com' },
];
// Step 7: Send emails for each user
people.forEach((person) => {
email
.send({
template: 'welcome',
message: {
to: person.email,
},
locals: person,
})
.then(console.log)
.catch(console.error);
});
Replace placeholder values in the code with your actual credentials.
Method 2: Sending Emails with Gmail SMTP
2.1 Gmail SMTP Configuration
npm install nodemailer --save
Create gmailSender.js
:
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'your-email@gmail.com',
pass: 'your-email-password'
}
});
// ... rest of the code
2.2 App Password for Enhanced Security
Follow the steps for generating an App Password.
2.3 Sending an Email with Gmail SMTP
Update gmailSender.js
:
const mailOptions = {
to: 'test@example.com',
from: 'your-email@gmail.com',
subject: 'Subject',
text: 'Body'
};
2.4 Advanced Usage: oAuth2 Authentication
Include oAuth2 authentication in gmailSender.js
:
// oAuth2 authentication
const oauth2Client = new OAuth2(
'YOUR_CLIENT_ID',
'YOUR_CLIENT_SECRET',
'YOUR_REDIRECT_URL'
);
// ... rest of the code
Method 3: Sending Emails using a Transactional Email API (e.g., Postmark)
Step 1: Sign Up for Postmark and Create API Token
- Sign up for Postmark.
- Create an API token in your Postmark account.
Step 2: Install the Postmark JavaScript Client
npm install --save postmark
Step 3: Create postmark.js
Create a file named postmark.js
:
const postmark = require('postmark');
const client = new postmark.ServerClient('YOUR_POSTMARK_API_TOKEN');
const message = {
From: 'your-email@example.com',
To: 'recipient@example.com',
Subject: 'Subject of the Email',
TextBody: 'Text content of the email',
HtmlBody: '<strong>HTML content of the email</strong>',
};
client
.sendEmail(message)
.then((response) => {
console.log('Email sent\n', response);
})
.catch((error) => {
console.error(error);
});
Step 4: Update postmark.js
Replace 'YOUR_POSTMARK_API_TOKEN'
with the API token you obtained from your Postmark account.
Method 4: Using SuprSend - Third-Party Multichannel Notification Infrastructure with Node SDK
Step I: Log in to the SuprSend Account
Visit the SuprSend login page and enter your Email Address and Password. Try SuprSend for free.
Step II: Integrate with Email(s)
Install SuprSend using npm or yarn.
Step III: Create & Load Template
Create templates using the drag & drop editor.
Step IV: Create Smart Flow (Routing)
Define rules and logic for notification flows.
Step V: Trigger a Notification Event via API
Integrate the SuprSend API into your Node application.
npm install @suprsend/node-sdk
# to upgrade to latest SDK version
npm install @suprsend/node-sdk@latest
Installation
const {Suprsend} = require("@suprsend/node-sdk");
// Initialize SDK
const supr_client = new Suprsend("WORKSPACE KEY", "WORKSPACE SECRET");
Step VI: Check Event Analytics And Logs
View granular channel-wise and vendor-wise analytics through the unified dashboard. Explore more about logs.
You may want to check out other SuprSend SDKs too. Consider giving us a star after usage. It's free and open.
suprsend / suprsend-go
SuprSend SDK for go
suprsend-go
SuprSend Go SDK
Installation
go get github.com/suprsend/suprsend-go
Usage
Initialize the SuprSend SDK
import (
"log"
suprsend "github.com/suprsend/suprsend-go"
)
func main() {
opts := []suprsend.ClientOption{
// suprsend.WithDebug(true),
}
suprClient, err := suprsend.NewClient("__api_key__", "__api_secret__", opts...)
if err != nil {
log.Println(err)
}
}
Trigger Workflow
package main
import (
"log"
suprsend "github.com/suprsend/suprsend-go"
)
func main() {
// Instantiate Client
suprClient, err := suprsend.NewClient("__api_key__", "__api_secret__")
if err != nil {
log.Println(err)
return
}
// Create WorkflowTriggerRequest body
wfReqBody := map[string]interface{}{
"workflow": "workflow-slug",
"recipients": []map[string]interface{}{
{
"distinct_id": "0f988f74-6982-41c5-8752-facb6911fb08",
// if $channels is present, communication will be tried on mentioned channels only (for this request).
// "$channels": []string{"email"},
…suprsend / suprsend-py-sdk
SuprSend SDK for python3
suprsend-py-sdk
This package can be included in a python3 project to easily integrate
with SuprSend
platform.
Installation
suprsend-py-sdk
is available on PyPI. You can install using pip.
pip install suprsend-py-sdk
This SDK depends on a system package called libmagic
. You can install it as follows:
# On debian based systems
sudo apt install libmagic
# If you are using macOS
brew install libmagic
Usage
Initialize the SuprSend SDK
from suprsend import Suprsend
# Initialize SDK
supr_client = Suprsend("workspace_key", "workspace_secret")
Following example shows a sample request for triggering a workflow.
It triggers a pre-created workflow purchase-made
to a recipient with id: distinct_id
,
email: user@example.com
& androidpush(fcm-token): __android_push_fcm_token__
from suprsend import WorkflowTriggerRequest
# Prepare Workflow body
wf = WorkflowTriggerRequest(
body={
"workflow": "purchase-made"
"recipients": [
{
"distinct_id": "0f988f74-6982-41c5-8752-facb6911fb08",
# if $channels is present, communication will be tried on mentioned
…suprsend / suprsend-node-sdk
Official SuprSend SDK for Node.js
suprsend-node-sdk
This package can be included in a node project to easily integrate with SuprSend platform.
Installation
npm install @suprsend/node-sdk@latest
Initialization
const { Suprsend } = require("@suprsend/node-sdk");
const supr_client = new Suprsend("workspace_key", "workspace_secret");
It is a unified API to trigger workflow and doesn't require user creation before hand. If you are using our frontend SDK's to configure notifications and passing events and user properties from third-party data platforms like Segment, then event-based trigger would be a better choice.
const { Suprsend, WorkflowTriggerRequest } = require("@suprsend/node-sdk");
const supr_client = new Suprsend("workspace_key", "workspace_secret");
// workflow payload
const body = {
workflow: "_workflow_slug_",
actor: {
distinct_id: "0fxxx8f74-xxxx-41c5-8752-xxxcb6911fb08",
name: "actor_1",
},
recipients: [
{
distinct_id: "0gxxx9f14-xxxx-23c5-1902-xxxcb6912ab09",
$email: ["abc@example.com"
…suprsend / suprsend-react-inbox
SuprSend SDK for integrating inbox functionality in React applications
@suprsend/react-inbox
Integrating SuprSend Inbox channel in React websites can be done in two ways:
- SuprSendInbox component which comes with UI and customizing props.
- SuprSendProvider headless component and hooks, incase you want to totally take control of UI. (example: Full page notifications).
Detailed documentation can be found here: https://docs.suprsend.com/docs/inbox-react
Installation
You can install SuprSend inbox SDK using npm/yarn
npm install @suprsend/react-inbox
SuprSendInbox Integration
After installing, Import the component in your code and use it as given below. Replace the variables with actual values.
import SuprSendInbox from '@suprsend/react-inbox'
import 'react-toastify/dist/ReactToastify.css' // needed for toast notifications, can be ignored if hideToast=true
// add to your react component;
<SuprSendInbox
workspaceKey='<workspace_key>'
subscriberId='<subscriber_id>'
distinctId='<distinct_id>'
/>
interface ISuprSendInbox {
workspaceKey: string
distinctId: string | null
subscriberId: string | null
tenantId?: string
stores?: IStore[]
pageSize?: number
pagination?: boolean
…
Top comments (3)
Thanks, this has answered one of my next question in the coding path.
Good luck with coding.