Git Product home page Git Product logo

wal33d / gmail-node-mailer Goto Github PK

View Code? Open in Web Editor NEW
2.0 2.0 0.0 660 KB

gmail-node-mailer is a Node.js library for easy email sending via the Gmail API, featuring quick setup, HTML/plain text support, and dynamic configuration for streamlined email integration.

Home Page: https://www.npmjs.com/package/gmail-node-mailer

License: GNU Lesser General Public License v3.0

TypeScript 99.74% JavaScript 0.26%
email-sending email-validation gmail-api nodejs nodejs-library npm-package service-account email gmail nodemailer npm package typescript opensource

gmail-node-mailer's Introduction

Gmail Node Mailer

Simplify your email sending process within Node.js applications with gmail-node-mailer. This lightweight package harnesses the power of the Gmail API to send emails effortlessly. Whether you're sending a quick notification or a detailed newsletter, gmail-node-mailer makes it straightforward.

GitHub Repository: gmail-node-mailer on GitHub

npm Package: gmail-node-mailer on npm

Quick Features

  • ๐Ÿš€ Quick setup with service account credentials.
  • ๐Ÿ“ง Validate and send emails with ease.
  • ๐ŸŽจ Supports both plain text and HTML content.
  • ๐Ÿ”ง Easy configuration for service accounts and sender emails.
  • ๐Ÿ“Ž New Functionality: Attachment Support - Send attachments with your emails effortlessly.

Get Started in Seconds

1. Install with NPM

Run the following in your project directory:

npm install gmail-node-mailer

2. Streamline Email Notifications with Your Server Workflow

gmail-node-mailer is designed to seamlessly integrate into your server setup, enabling you to send emails for various events such as server start/stop notifications, error alerts, and to manage subscription events like new subscriptions or renewals.

Detailed Usage Guide

Sending Emails with Attachments

With the new attachment support, gmail-node-mailer allows you to include files in your emails. Here's how you can attach a PDF file to an email:

import { GmailMailer } from 'gmail-node-mailer';

async function sendEmailWithAttachment() {
  const mailer = new GmailMailer();
  await mailer.initializeClient({
    gmailSenderEmail:'[email protected]',
    gmailServiceAccountPath: './path/to/your-service-account.json',
  });
    const attachments = [{
        filename: 'Invoice.pdf',
        mimeType: 'application/pdf',
        content: 'base64_encoded_content_here'
    }];

    await mailer.sendEmail({
        recipientEmail: '[email protected]',
        subject: 'Your Invoice',
        message: 'Please find attached your invoice.',
        attachments: attachments
    });
}

sendEmailWithAttachment().catch(console.error);

Server Start/Stop Notifications

Seamlessly notify about server start or stop events using gmail-node-mailer. Here's an example on how to set up and send these notifications:

import { GmailMailer } from 'gmail-node-mailer';

async function initializeMailer() {
  const mailer = new GmailMailer();
  await mailer.initializeClient({
    gmailSenderEmail:'[email protected]',
    gmailServiceAccountPath: './path/to/your-service-account.json',
  });
  // Setting the initialized mailer to a global variable
  global.gmailClient = mailer;
}

async function notifyServerStatus(status: 'start' | 'stop') {
  const message = status === 'start' ? 'Server is up and running.' : 'Server has been shut down.';
  try {
    await global.gmailClient.sendEmail({
      recipientEmail: '[email protected]',
      subject: `Server ${status} Notification`,
      message,
    });
  } catch (error) {
    console.error('Error sending email:', error);
  }
}

// Initialize the GmailMailer client and then notify server status
initializeMailer().then(() => {
  notifyServerStatus('start').catch(console.error);
});

// Further down in your server code, you can use global.gmailClient for other email sending purposes

Use Case Examples

New Subscription Welcome Emails

When a new customer subscribes, sending a welcome email is a great way to start your relationship. Here's how you can set this up:

import { GmailMailer } from 'gmail-node-mailer';

export async function handleNewSubscription(customerEmail, subscriptionDetails) {
    const mailer = new GmailMailer();
    
    await mailer.initializeClient({
        gmailServiceAccountPath: './path/to/your-service-account.json',
    });

    const htmlMessage = `
        <!DOCTYPE html>
        <html>
        <head>
            <style>
                body { font-family: Arial, sans-serif; margin: 0; padding: 20px; background-color: #f0f0f0; }
                .content { background-color: #fff; padding: 20px; }
                h1 { color: #007bff; }
            </style>
        </head>
        <body>
            <div class="content">
                <h1>Welcome to Your New Adventure!</h1>
                <p>Dear Adventurer, thank you for joining us. Your journey starts now!</p>
                <!-- Add more personalized content here -->
            </div>
        </body>
        </html>
    `;

    await mailer.sendEmail({
        senderEmail: process.env.GMAIL_MAILER_SENDER_EMAIL,
        recipientEmail: customerEmail,
        subject: '๐ŸŽ‰ Welcome to Your New Adventure!',
        message: htmlMessage,
    });
}

Subscription Renewal Confirmations

Similarly, for subscription renewals, sending a confirmation email reaffirms the customer's value to your service. Here's a sample approach:

// Assuming the GmailMailer is initialized similarly as in the new subscription example

export async function handleSubscriptionRenewal(customerEmail, renewalDetails) {
    const htmlMessage = `
        <!DOCTYPE html>
        <html>
        <head>
            <style>
                body { font-family: Arial, sans-serif; margin: 0; padding: 20px; background-color: #f0f0f0; }
                .content { background-color: #fff; padding: 20px; }
                h1 { color: #007bff; }
            </style>
        </head>
        <body>
            <div class="content">
                <h1>Your Adventure Continues!</h1>
                <p>Dear Adventurer, we're thrilled to have you with us for another year. Here's to more adventures together!</p>
                <!-- Add renewal-specific content here -->
            </div>
        </body>
        </html>
    `;

    // Use the initialized GmailMailer instance to send the email
    await mailer.sendEmail({
        senderEmail: process.env.GMAIL_MAILER_SENDER_EMAIL,
        recipientEmail: customerEmail,
        subject: '๐ŸŽ‰ Thank You for Renewing Your Adventure!',
        message: htmlMessage,
    });
}

Check the examples directory for more samples.

Advanced Initialization and Configuration

gmail-node-mailer offers a flexible and powerful way to initialize and configure your email sending capabilities. Here's a deep dive into customizing the initialization:

Initializing with Service Account Credentials

Authenticate using a Gmail service account for secure email sending. To do this, you need to initialize the GmailMailer with your service account details. This can be done by either directly providing the service account details or specifying a file path to a JSON file containing these credentials. Here's how you can accomplish this:

import { GmailMailer } from 'gmail-node-mailer';

const mailer = new GmailMailer();

// Initialize using direct service account details or a file path
await mailer.initializeClient({
  gmailServiceAccount: {
    client_email: '[email protected]',
    private_key: '-----BEGIN PRIVATE KEY-----\n...your-private-key...\n-----END PRIVATE KEY-----\n'
  },
  // OR
  gmailServiceAccountPath: './path/to/your-service-account.json',
});

Configuring Sender Email

Specify and validate a default sender email address:

import { emailConfig } from 'gmail-node-mailer/utils/emailConfig';

// Set and validate the Gmail sender's email, or optionally declare the the GMAIL_MAILER_SENDER_EMAIL in your .env file 
emailConfig.setGmailSenderEmail('[email protected]');

if (!emailConfig.validateEmailFormat('[email protected]')) {
    console.error('Email format is invalid. Please use a valid Gmail address.');
} else {
    console.log('Sender email configured successfully.');
}

example sendEmail function response -->

{
  sendMailResult: {
    sent: true,
    status: 200,
    statusText: 'OK',
    responseUrl: 'https://gmail.googleapis.com/gmail/v1/users/me/messages/send',
    message: 'Email successfully sent to [email protected].',
    gmailResponse: {
      config: [Object],
      data: [Object],
      headers: [Object],
      status: 200,
      statusText: 'OK',
      request: [Object]
    }
  }
}

HTML or Plain Text Auto-Detection

Automatically encodes the subject line ensuring compatibility across all email clients. Write your message in either format, and gmail-node-mailer will handle the rest, ensuring it's correctly formatted. To enhance clarity and consistency in the readme section for environment configuration, consider the revised version below:


Environment Configuration for gmail-node-mailer

To ensure smooth integration of gmail-node-mailer into your Node.js project, it's crucial to configure the environment variables detailed below. These variables can be set directly in your environment or passed during the instantiation of gmail-node-mailer.

Optional Environment Variables for Service Account Configuration

Configure the following optional environment variables for detailed control over service account usage:

  • GMAIL_MAILER_SENDER_EMAIL: Defines the email address from which emails will be sent.

  • GMAIL_MAILER_SERVICE_ACCOUNT: In scenarios such as production environments or instances where direct file access is not feasible, this variable allows you to input your service account credentials as a JSON string within an environment variable.

    Example usage:

    GMAIL_MAILER_SERVICE_ACCOUNT={"type":"service_account","project_id":"...","private_key_id":"...","private_key":"-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----\\n","client_email":"....iam.gserviceaccount.com","client_id":"...","auth_uri":"...","token_uri":"...","auth_provider_x509_cert_url":"...","client_x509_cert_url":"..."}
    

    Note: Ensure that special characters within the JSON (e.g., newlines in the private key) are properly escaped. While this example aims for readability, real-world usage might require meticulous JSON formatting or escaping.

  • GMAIL_MAILER_SERVICE_ACCOUNT_PATH: Primarily for development environments, this variable designates the path to the local JSON file containing your service account credentials.

    Example usage:

    GMAIL_MAILER_SERVICE_ACCOUNT_PATH=./private/somnus_gmail_service_account.json
    

    Note: Verify that the specified path is accurate, relative to your project's root directory.

Additional Information and Examples

For more detailed information on configuring gmail-node-mailer, including setting up environment variables, sample code, please refer to the following documents in the /info directory:

  • Environment Variables Setup: A guide on setting up and using the GMAIL_MAILER_SERVICE_ACCOUNT_PATH and GMAIL_MAILER_SERVICE_ACCOUNT variables for development and production environments.

  • Handling New Subscriptions Example: An example script showing how to integrate gmail-node-mailer for handling new subscription notifications.

  • sendEmail Function Types: Documentation on the sendEmail function, including parameters and expected results.

  • Server Notifications Example: A detailed example on setting up server start/stop notifications using gmail-node-mailer.

  • Service Account Setup: Step-by-step instructions on setting up a Gmail service account for use with gmail-node-mailer.

gmail-node-mailer's People

Contributors

wal33d avatar

Stargazers

 avatar AquaticSurge avatar

Watchers

 avatar AquaticSurge avatar

gmail-node-mailer's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.