GithubHelp home page GithubHelp logo

socketlabs / socketlabs-nodejs Goto Github PK

View Code? Open in Web Editor NEW
8.0 14.0 6.0 589 KB

SocketLabs Email Delivery Node.js client library

Home Page: https://www.socketlabs.com

License: MIT License

JavaScript 100.00%
email socketlabs deliverability nodejs

socketlabs-nodejs's Introduction

SocketLabs

Twitter Follow MIT licensed PRs Welcome

The SocketLabs Email Delivery Node.js library allows you to easily send email messages via the SocketLabs Injection API. The library makes it easy to build and send any type of message supported by the API, from a simple message to a single recipient all the way to a complex bulk message sent to a group of recipients with unique merge data per recipient.

Table of Contents

Prerequisites and Installation

Prerequisites

  • A supported Node.js version (6.0 or higher)
  • A SocketLabs account. If you don't have one yet, you can sign up for a free account to get started.

Installation

For most uses we recommend installing the SocketLabs Email Delivery package via npm. If you already have a supported version of Node.js, then it should have included npm automatically. To install the package to your current project, simply type the following in your terminal or command prompt:

> npm install --save @socketlabs/email

Alternately, you can simply clone this repository directly to include the source code in your project.

Getting Started

Obtaining your API Key and SocketLabs ServerId number

In order to get started, you'll need to enable the Injection API feature in the SocketLabs Control Panel. Once logged in, navigate to your SocketLabs server's dashboard (if you only have one server on your account you'll be taken here immediately after logging in). Make note of your 4 or 5 digit ServerId number, as you'll need this along with your API key in order to use the Injection API.

To enable the Injection API, click on the "For Developers" dropdown on the top-level navigation, then choose the "Configure HTTP Injection API" option. Once here, you can enable the feature by choosing the "Enabled" option in the dropdown. Enabling the feature will also generate your API key, which you'll need (along with your ServerId) to start using the API. Be sure to click the "Update" button to save your changes once you are finished.

Basic Message

A basic message is an email message like you'd send from a personal email client such as Outlook. A basic message can have many recipients, including multiple To addresses, CC addresses, and even BCC addresses. You can also send a file attachment in a basic message.

const {SocketLabsClient} = require('@socketlabs/email');

const client = new SocketLabsClient(parseInt(process.env.SOCKETLABS_SERVER_ID), process.env.SOCKETLABS_INJECTION_API_KEY);

const message = {
    to: "[email protected]",
    from: "[email protected]",
    subject: "Hello from Node.js",
    textBody: "This message was sent using the SocketLabs Node.js library!",
    htmlBody: "<html>This message was sent using the SocketLabs Node.js library!</html>",
    messageType: 'basic'
}

client.send(message);

A basic message supports up to 50 recipients and supports several different ways to add recipients. We've also provided several helper classes to help you construct your message more easily:

const {SocketLabsClient, BasicMessage, EmailAddress} = require('@socketlabs/email');

const client = new SocketLabsClient(parseInt(process.env.SOCKETLABS_SERVER_ID), process.env.SOCKETLABS_INJECTION_API_KEY);

//Instantiate the BasicMessage class to use built-in properties and helper methods. No need to set the messageType when using
//the helper classes.
let basicMessage = new BasicMessage();

basicMessage.from = "[email protected]";
basicMessage.subject = "Hello from Node.js";
basicMessage.textBody = "This message was sent using the SocketLabs Node.js library!";

//Add a recipient by pushing a string to the To array
basicMessage.to.push("[email protected]");

//Add a recipient by pushing an object literal to the To array
basicMessage.to.push({emailAddress: "[email protected]", friendlyName: "Recipent #2"});

//Add a recipient by pushing an EmailAddress object to the To array
basicMessage.to.push(new EmailAddress("[email protected]", { friendlyName: "Recipient #3" }));

//Use the helper method on the instantiated BasicMessage
basicMessage.addToEmailAddress("[email protected]", "Recipient #4");

//CC and BCC addresses have all of the same options
basicMessage.cc.push("[email protected]");
basicMessage.addBccEmailAddress("[email protected]");

client.send(message);

Bulk Message

A bulk message usually contains a single recipient per message and is generally used to send the same content to many recipients, optionally customizing the message via the use of MergeData. For more information about using Merge data, please see the Injection API documentation.

const {SocketLabsClient, BulkMessage, BulkRecipient} = require('@socketlabs/email');

const client = new SocketLabsClient(parseInt(process.env.SOCKETLABS_SERVER_ID), process.env.SOCKETLABS_INJECTION_API_KEY);

let bulkMessage = new BulkMessage();

bulkMessage.textBody = "Is your favorite color still %%FavoriteColor%%?";
bulkMessage.htmlBody = "<html>Is your favorite color still %%FavoriteColor%%?";
bulkMessage.subject = "Sending a Bulk Message With Merge Fields";
bulkMessage.setFrom("[email protected]");

//Use built-in classes and helper methods
let recipient1 = new BulkRecipient("[email protected]");
recipient1.addMergeData("FavoriteColor", "Green");
bulkMessage.to.push(recipient1);

//Use object literals
const recipient2 = {
    emailAddress: "[email protected]",
    friendlyName: "Recipient #2",
    mergeData: [
        { key: "FavoriteColor", value: "Orange" }
    ]
});

bulkMessage.to.push(recipient2);

client.send(bulkMessage);

Managing API Keys

For ease of demonstration, some of our examples may include the ServerId and API key directly in our code sample. Generally it is not considered a good practice to store sensitive information like this directly in your code. In most cases we recommend the use of Environment Variables.

Examples and Use Cases

In order to demonstrate the many possible use cases for the Node.js library, we've provided an assortment of code examples. These examples demonstrate many different features available to the Injection API and Node.js library, including using templates created in the SocketLabs Email Designer, custom email headers, sending attachments, sending content that is stored in an HTML file, advanced bulk merging, and even pulling recipients from a datasource.

This example demonstrates the sending of a piece of content that was created in the SocketLabs Email Designer. This is also known as the API Templates feature.

This example demonstrates how to read in your HTML content from an HTML file rather than passing in a string directly.

This example demonstrates how to add a file attachment to your message.

This example demonstrates how to embed an image in your message.

This example demonstrates sending with a specific character set.

This example demonstrates how to add custom headers to your email message.

This example demonstrates how to use a proxy with your HTTP client.

This example demonstrates how to use the retry logic with your HTTP client.

This example demonstrates many features of the Basic Send, including adding multiple recipients, adding message and mailing id's, and adding an embedded image.

This example demonstrates how to send a basic message with an AMP Html body. For more information about AMP please see AMP Project

This example demonstrates the results of attempting to do a send with an invalid attachment.

This example demonstrates the results of attempting to do a send with an invalid from address.

This example demonstrates the results of attempting to do a send with invalid recipients.

This example demonstrates how to send a bulk message to multiple recipients.

This example demonstrates many features of the BulkMessage(), including adding multiple recipients, merge data, and adding an attachment.

This example uses a mock repository class to demonstrate how you would pull your recipients from a database and create a bulk mailing with merge data.

This example demonstrates how to send a bulk message with a specified character set and special characters.

This example demonstrates how to send a bulk message with an AMP Html body. For more information about AMP please see AMP Project

  • 1.4.4 - Added MetadataOrTagsAreTooLarge error messsage
  • 1.4.0 - Adding Metadata and Tags
  • 1.2.1 - Adding optional retry logic for Http requests. If configured, the request will retry when certain 500 errors occur (500, 502, 503, 504)
  • 1.1.1 - Adding request timeout value on the client for Http requests
  • 1.1.0 - Adds Amp Html Support
  • 1.0.0 - Initial Release

License

The SocketLabs Node.js library and all associated code, including any code samples, are MIT Licensed.

socketlabs-nodejs's People

Contributors

bernardharrison avatar david-schrenker avatar dependabot[bot] avatar mattreibach avatar mboshu avatar mirriamronoh avatar saranyakavuri48 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

socketlabs-nodejs's Issues

Unable to validate replyTo field without using the EmailAddress class

From the documentation examples:

//Many different ways to add recipients
message.to.push("[email protected]");
message.to.push(new EmailAddress("[email protected]"));
message.to.push(new EmailAddress("[email protected]", { friendlyName: "Recipient #3" }));
message.to.push({ emailAddress: "[email protected]" });
message.to.push({ emailAddress: "[email protected]", friendlyName: "Recipient #5" });

i understand that for every email i have these many options to use, but for the given case of the replyTo field if i try to use the object definition directly:
replyTo: { emailAddress: data.replyTo.emailAddress }

it throws the following error:

2022-05-27T09:48:39.363Z	bee95426-8d19-5c27-b788-0f2c2db3636d	ERROR	Invoke Error 	{"errorType":"TypeError","errorMessage":"this.replyTo.toJSON is not a function","stack":["TypeError: this.replyTo.toJSON is not a function","    at e.exports.toJSON (/var/task/src/main/js/index.js:2:18636)","    at /var/task/src/main/js/index.js:2:3417","    at new Promise (<anonymous>)","    at Object.generateRequest (/var/task/src/main/js/index.js:2:2703)","    at /var/task/src/main/js/index.js:2:34672","    at new Promise (<anonymous>)","    at SocketLabsClient.send (/var/task/src/main/js/index.js:2:34552)","    at /var/task/src/main/js/index.js:2:473415","    at processTicksAndRejections (internal/process/task_queues.js:95:5)","    at async Runtime.e.exports.handler (/var/task/src/main/js/index.js:2:471749)"]}

I had to import the EmailAddress class to avoid the error. I believe since the documentation states that the declaration can be done differently there's something to be addressed.

Thanks

PD: i have other emails in the message other than the replyTo declared the same way and they work properly.

toAttachment.convert(element).toJSON()

Hi,
according to the code
toAttachment.convert should return an attachment instance with "toJSON" function, however we got only the second object and it failed on toJSON call, you can see the example below:
line 50 in file toAttachment.js

return new attachment(), {
                name: n,
                content: c,
                contentType: t,
                customHeaders: h,
                filePath: f,
                contentId: i
            };

so if we will change the code to run the constructor properly it works like it should be:

return new attachment( {
                name: n,
                content: c,
                contentType: t,
                customHeaders: h,
                filePath: f,
                contentId: i
            });

Thank you,
Moria

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.