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-pop3

v0.9.0

Published

POP3 client for node

Downloads

5,409

Readme

node-pop3

pop3 command support for node. Supports Promise and stream.

CLI

e.g. Test the API about TOP

pop -u [email protected] -p pwd -h example.pop.com -m TOP 100 10

or pass in some or all of the config in a designated config file (JSON or JS):

pop -c pop.config.js -m TOP 100 10

For more detail, please input

pop --help

Usage

In CommonJS, you can get the Pop3Command as follows:

const Pop3Command = require('node-pop3');

The examples below, however, use the ESM Modules format instead (i.e., import).

Example

  • Fetch mail by msgNum:
import Pop3Command from 'node-pop3';

const pop3 = new Pop3Command({
  user: '[email protected]',
  password: 'example',
  host: 'pop3.example.com'
});

const msgNum = 1;

const str = await pop3.RETR(msgNum);
// deal with mail string
await pop3.QUIT();
  • List msgNum to uid in Server
const list = await pop3.UIDL();
console.dir(list);
/*
 * [
 *  ['1', 'ZC0113-H8wi_YChVab4F0QTbwP4B6i'],
 *  ['2', 'ZC0114-3A9gAn8M2Sp1RhVCGTIII6i'],
 *  ...
 * ]
*/

API

  • constructor(options)

params|optional|comment ---|---|--- options.user|no|String options.password|no|String options.host|no|String options.port|yes|Number. Defaults to 110 options.servername|yes|String. Defaults to host value. Same as servername for Node TLS option. options.tls|yes|Boolean. Defaults to false options.timeout|yes|Number. Defaults to undefined options.tlsOptions|yes|Defaults to {}

tlsOptions takes the options documented for your Node version and tls.connect function.

  • basic

method|params|return ---|---|--- connect||{Promise} resolve to undefined command|{String*} command messages to Server|{Promise} resolve to {Array[String, Stream]}, which are messages of response and stream of response (if the response has multiple lines) from Server listify|Splits lines by CRLF, filters out empty lines, and converts each line to a an array based on splitting by spaces

const pop3 = new Pop3Command({host: 'pop3.example.com'});

// These must be in order
await pop3.connect();
await pop3.command('USER', '[email protected]');
await pop3.command('PASS', 'example');

const [statInfo] = await pop3.command('STAT');
const [retrInfo, retrStream] = await pop3.command('RETR', 1);

console.log(statInfo); // 100 102400
console.log(retrInfo); // 1024 octets

const [quitInfo] = await pop3.command('QUIT');
console.log(quitInfo); // Logging out.

const streamString = await Pop3Command.stream2String(retrStream);
console.log(streamString); // <message details...>

console.log(
  await Pop3Command.listify(streamString)
); // [ ['Return-Path:', 'brett@...'], ...]
  • common

method|params|return|comment ---|---|---|--- UIDL|{String\|Number} msgNum|{Promise} resolve to {Array} list of responsed|msgNum is optional RETR|{String\|Number} msgNum|{Promise} resolve to {String} of mail stream| TOP|{String\|Number} msgNum, {Number} n|{Promise} resolve to {String} message of responsed|n is default to 0 QUIT||{Promise} resolve to {String} message of response message|

ERROR

pop3 will throw new Error's with an error message from Server. Beyond that, Error may have two properties attached by pop3.

property|comment ---|--- err.eventName|event name comes from socket.on. Includes error, close, timeout, end, and bad-server-response. command may also throw no-socket. err.command|which command causes the error. For example, PASS example

To-dos

  1. Testing:
    1. Set up CI with hidden pop.config.json credentials
    2. Avoid skipping some tests
  2. Edge cases
    1. After timeout, ensure any stream is ended (so other commands can continue)
    2. Ensure command will reject if socket is ended.
    3. Ensure in fixing the above that can QUIT and reuse same instance