Free trial *Internet Service Required

How to Send Email Using SendGrid from Node.js

This guide demonstrates how to perform common programming tasks with the SendGrid email service on Windows Azure. The samples are written using the Node.js API. The scenarios covered include constructing email, sending email, adding attachments, using filters, and updating properties. For more information on SendGrid and sending email, see the Next Steps section.

Table of Contents

What is the SendGrid Email Service?

SendGrid is a cloud-based email service that provides reliable email delivery, scalability, and real-time analytics, along with flexible APIs that make custom integration easy. Common SendGrid usage scenarios include:

  • Automatically sending receipts to customers
  • Administering distribution lists for sending customers monthly e-fliers and special offers
  • Collecting real-time metrics for things like blocked e-mail, and customer responsiveness
  • Generating reports to help identify trends
  • Forwarding customer inquiries
  • Email notifications from your application

For more information, see http://sendgrid.com.

Create a SendGrid Account

Windows Azure customers can unlock 25,000 free emails each month. These 25,000 free monthly emails will give you access to advanced reporting and analytics and all APIs (Web, SMTP, Event, Parse, Sub-User). For information about additional services provided by SendGrid, see the SendGrid Features page.

To sign up for a SendGrid account

  1. Log in to the Windows Azure Management Portal.

  2. In the lower pane of the management portal, click New.

    command-bar-new

  3. Click Store.

    sendgrid-store

  4. In the Choose an Add-on dialog, select SendGrid and click the right arrow.

  5. In the Personalize Add-on dialog select the SendGrid plan you want to sign up for.

  6. Enter a name to identify your SendGrid service in your Windows Azure settings, or use the default value of SendGrid. Names must be between 1 and 100 characters in length and contain only alphanumeric characters, dashes, dots, and underscores. The name must be unique in your list of subscribed Windows Azure Store Items.

    store-screen-2

  7. Choose a value for the region; for example, West US.

  8. Click the right arrow.

  9. On the Review Purchase tab, review the plan and pricing information, and review the legal terms. If you agree to the terms, click the check mark. After you click the check mark, your SendGrid account will begin the provisioning process.

    store-screen-3

  10. After confirming your purchase you are redirected to the add-ons dashboard and you will see the message Purchasing SendGrid.

    sendgrid-purchasing-message

Your SendGrid account is provisioned immediately and you will see the message Successfully purchased Add-On SendGrid. Your account and credentials are now created. You are ready to send emails at this point.

To modify your subscription plan or see the SendGrid contact settings, click the name of your SendGrid service to open the SendGrid add-ons dashboard.

sendgrid-add-on-dashboard

To send an email using SendGrid, you must supply your account credentials (username and password).

To find your SendGrid credentials

  1. Click Connection Info.

    sendgrid-connection-info-button

  2. In the Connection info dialog, copy the Password and Username to use later in this tutorial.

    sendgrid-connection-info

To set your email deliverability settings, click the Manage button. This will open the Sendgrid.com web interface where you can login and open your SendGrid Control Panel.

sendgrid-control-panel

For more information on getting started with SendGrid, see SendGrid Getting Started.

Reference the SendGrid Node.js Module

The SendGrid module for Node.js can be installed through the node package manager (npm) by using the following command:

npm install sendgrid-nodejs

After installation, you can require the module in your application by using the following code:

var SendGrid = require('sendgrid-nodejs')

The SendGrid module exports the SendGrid and Email functions. SendGrid is responsible for sending email through either SMTP or Web API, while Email encapsulates an email message.

How to: Create an Email

Creating an email message using the SendGrid module involves first creating an email message using the Email function, and then sending it using the SendGrid function. The following is an example of creating a new message using the Email function:

var mail = new SendGrid.Email({
    to: 'john@contoso.com',
    from: 'anna@contoso.com',
    subject: 'test mail',
    text: 'This is a sample email message.'
});

You can also specify an HTML message for clients that support it by setting the html property. For example:

html: This is a sample <b>HTML<b> email message.

Setting both the text and html properties provides graceful fallback to text content for clients that cannot support HTML messages.

For more information on all properties supported by the Email function, see sendgrid-nodejs.

How to: Send an Email

After creating an email message using the Email function, you can send it using either SMTP or the Web API provided by SendGrid. For details about the benefits and differences of each API, see SMTP vs. Web API in the SendGrid documentation.

Using either the SMTP API or Web API requires that you first initialize the SendGrid function using the user and key of your SendGrid account as follows:

var sender = new SendGrid.SendGrid('user','key');

The message can now be sent using either SMTP or the Web API. The calls are virtually identical, passing the email message and an optional callback function; The callback is used to determine the success or failure of the operation. The following examples show how to send a message using both SMTP and the Web API.

SMTP

sender.smtp(mail, function(success, err){
    if(success) console.log('Email sent');
    else console.log(err);
)});

Web API

sender.send(mail, function(success, err){
    if(success) console.log('Email sent');
    else console.log(err);
)});
Note

While the above examples show passing in an email object and callback function, you can also directly invoke the send and smtp functions by directly specifying email properties. For example:

sender.send({
    to: 'john@contoso.com',
    from: 'anna@contoso.com',
    subject: 'test mail',
    text: 'This is a sample email message.'
});

How to: Add an Attachment

Attachments can be added to a message by specifying the file name(s) and path(s) in the files property. The following example demonstrates sending an attachment:

sender.send({
    to: 'john@contoso.com',
    from: 'anna@contoso.com',
    subject: 'test mail',
    text: 'This is a sample email message.',
    files: {
        'file1.txt': __dirname + '/file1.txt',
        'image.jpg': __dirname + '/image.jpg'
    }
});
Note

When using the files property, the file must be accessible through fs.readFile. If the file you wish to attach is hosted in Windows Azure Storage, such as in a Blob container, you must first copy the file to local storage or to a Windows Azure drive before it can be sent as an attachment using the files property.

How to: Use Filters to Enable Footers, Tracking, and Twitter

SendGrid provides additional email functionality through the use of filters. These are settings that can be added to an email message to enable specific functionality such as enabling click tracking, Google analytics, subscription tracking, and so on. For a full list of filters, see Filter Settings.

Filters can be applied to a message by using the filters property. Each filter is specified by a hash containing filter-specific settings. The following examples demonstrate the footer, click tracking, and Twitter filters:

Footer

sender.send({
    to: 'john@contoso.com',
    from: 'anna@contoso.com',
    subject: 'test mail',
    text: 'This is a sample email message.',
    filters: {
        'footer': {
            'settings': {
                'enable': 1,
                'text/plain': 'This is a text footer.'
            }
        }
    }
});

Click Tracking

sender.send({
    to: 'john@contoso.com',
    from: 'anna@contoso.com',
    subject: 'test mail',
    text: 'This is a sample email message.',
    filters: {
        'clicktrack': {
            'settings': {
                'enable': 1
            }
        }
    }
});

Twitter

sender.send({
    to: 'john@contoso.com',
    from: 'anna@contoso.com',
    subject: 'test mail',
    text: 'This is a sample email message.',
    filters: {
        'twitter': {
            'settings': {
                'enable': 1,
                'username': 'twitter_username',
                'password': 'twitter_password'
            }
        }
    }
});

How to: Update Email Properties

Some email properties can be overwritten using setProperty or appended using addProperty. For example, you can add additional recipients by using

email.addTo('jeff@contoso.com');

or set a filter by using

email.setFilterSetting({
  'footer': {
    'setting': {
      'enable': 1,
      'text/plain': 'This is a footer.'
    }
  }
});

For more information, see sendgrid-nodejs.

How to: Use Additional SendGrid Services

SendGrid offers web-based APIs that you can use to leverage additional SendGrid functionality from your Windows Azure application. For full details, see the SendGrid API documentation.

Next Steps

Now that you’ve learned the basics of the SendGrid Email service, follow these links to learn more.

Rss Newsletter