npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

node-red-contrib-email

v0.3.0

Published

SMTP email node for Node-RED

Downloads

683

Readme

node-red-contrib-email

SMTP email node for Node-RED

npm version install size npm downloads

node-email-send

Installation

You can install by using the Menu - Manage Palette option, or running the following command in your Node-RED user directory - typically ~/.node-red

cd ~/.node-red
npm install --save node-red-contrib-email

Requirements

NodeJS version >= 6.0.0
Node-RED >= 2.0.0

SMTP (Transport) Config Node

  • host - is the hostname or ip address to connect to
  • port - is the port to connect to
  • secure – if true the connection will use TLS when connecting to server. If false (the default) then TLS is used if server supports the STARTTLS extension. In most cases set this value to true if you are connecting to port 465. For port 587 or 25 keep it false
  • auth - authentication 'none' or 'login'
  • proxy - is a proxy URL, for example 'http://proxy-host:1234'

Send Mail Node Input

  • from - The email address of the sender. All email addresses can be plain ‘[email protected]’ or formatted '“Sender Name” [email protected]', see Address object for details
  • to - Comma separated list or an array of recipients email addresses that will appear on the To: field
  • cc - Comma separated list or an array of recipients email addresses that will appear on the Cc: field
  • bcc - Comma separated list or an array of recipients email addresses that will appear on the Bcc: field
  • subject - The subject of the email

Message Payload

msg.payload can be used for one of the following message versions. Set the node property payload type to set the version of your msg.payload.

  • text - The plaintext version of the message as an Unicode string, Buffer, Stream or an attachment-like object ({path: ‘/var/data/…'}). If you're sending a msg.payload of type number or boolean, then it is converted to string.
  • html - The HTML version of the message as an Unicode string, Buffer, Stream or an attachment-like object ({path: ‘http://…'})
  • amp - AMP4EMAIL specific HTML version of the message, same usage as with text and html. See AMP example below for usage or this blogpost for sending and rendering.

Attachments

Set msg.email.attachments as an array of attachment objects (see Using attachments for details). Attachments can be used for embedding images as well.

msg.email = {
    attachments: [
        {
            // utf-8 string as an attachment
            filename: "text1.txt",
            content: "hello world!",
        },
        {
            // binary buffer as an attachment
            filename: "text2.txt",
            content: new Buffer("hello world!", "utf-8"),
        },
        {
            // file on disk as an attachment
            filename: "text3.txt",
            path: "/path/to/file.txt", // stream this file
        },
        {
            // filename and content type is derived from path
            path: "/path/to/file.txt",
        },
        {
            // stream as an attachment
            filename: "text4.txt",
            content: fs.createReadStream("file.txt"),
        },
        {
            // define custom content type for the attachment
            filename: "text.bin",
            content: "hello world!",
            contentType: "text/plain",
        },
        {
            // use URL as an attachment
            filename: "license.txt",
            path: "https://raw.github.com/nodemailer/nodemailer/master/LICENSE",
        },
        {
            // encoded string as an attachment
            filename: "text1.txt",
            content: "aGVsbG8gd29ybGQh",
            encoding: "base64",
        },
        {
            // data uri as an attachment
            path: "data:text/plain;base64,aGVsbG8gd29ybGQ=",
        },
        {
            // use pregenerated MIME node
            raw:
                "Content-Type: text/plain\r\n" +
                "Content-Disposition: attachment;\r\n" +
                "\r\n" +
                "Hello world!",
        },
    ],
};

Overwrite Node Properties

Use the node editor to define the email fields or overwrite this properties with a flow msg:

msg.email = {
    from: "[email protected]",
    to: "[email protected]",
    subject: "Test",
    text: "This is the plain text version.",
    html: "<h1>This is the html version</h1>",
    attachments: [
        {
            // utf-8 string as an attachment
            filename: "text1.txt",
            content: "hello world!",
        }
    ],
};

Only overwrite email.to:

msg.email = {
    to: "[email protected]"
};

Example for amp message:

msg.email = {
    from: "Nodemailer <[email protected]>",
    to: "Nodemailer <[email protected]>",
    subject: "AMP4EMAIL message",
    text: "For clients with plaintext support only",
    html: "<p>For clients that do not support AMP4EMAIL or amp content is not valid</p>",
    amp: `<!doctype html>
    <html ⚡4email>
      <head>
        <meta charset="utf-8">
        <style amp4email-boilerplate>body{visibility:hidden}</style>
        <script async src="https://cdn.ampproject.org/v0.js"></script>
        <script async custom-element="amp-anim" src="https://cdn.ampproject.org/v0/amp-anim-0.1.js"></script>
      </head>
      <body>
        <p>Image: <amp-img src="https://cldup.com/P0b1bUmEet.png" width="16" height="16"/></p>
        <p>GIF (requires "amp-anim" script in header):<br/>
          <amp-anim src="https://cldup.com/D72zpdwI-i.gif" width="500" height="350"/></p>
      </body>
    </html>`,
};

Send Mail Node Output

output msg.payload includes the result, the exact format depends on the transport mechanism used

  • msg.payload.messageId - most transports should return the final Message-Id value used with this property
  • msg.payload.envelope includes the envelope object for the message
  • msg.payload.accepted is an array returned by SMTP transports (includes recipient addresses that were accepted by the server)
  • msg.payload.rejected is an array returned by SMTP transports (includes recipient addresses that were rejected by the server)
  • msg.payload.pending is an array returned by Direct SMTP transport. Includes recipient addresses that were temporarily rejected together with the server response response is a string returned by SMTP transports and includes the last SMTP response from the server

Connection Test

SMTP connection is verified at node startup and displayed as node status. Be aware though that this call only tests connection and authentication but it does not check if the service allows you to use a specific envelope From address or not.

More Information

This node is based on nodemailer. Read their documentation for a deeper understanding:

Feature Requests

Feel free to contact me for any feature request.

Features not implemented yet:

  • OAuth2 authentication
  • Pooled SMTP
  • Delivery status notification
  • Calendar events