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

tualo-imap

v0.0.12

Published

An IMAP module for node.js that makes communicating with IMAP servers easy

Downloads

6

Readme

Description

tualo-imap is an IMAP client module for node.js.

This module makes communication with an IMAP server easy. Not all IMAP functions are implement yet.

Requirements

  • node.js -- v0.8.0 or newer
  • An IMAP Account

Installation

npm install tualo-imap

Implemented

Folowing IMAP commands are implemented now.

  • login
  • logout
  • search (search in a mailboxe)
  • list (list mailboxes)
  • fetch (fetch a mail)
  • create (create a mailbox)
  • delete (delete a mailbox)
  • rename (rename a mailbox)
  • subscripe
  • unsubscripe
  • lsub
  • expunge
  • store
  • copy
  • noop

Example

  • Fetch the message number 1 from the inbox, command can be chained and executed at one time. But they can also executed separatly.
var Imap = require('tualo-imap');
var imap = new Imap({
	user: '[email protected]',
	password: 'mygmailpassword',
	host: 'imap.gmail.com',
	port: 143,
	secure: true,
	debug: false
}); 

imap.on('error',function(conn,err){
	console.log('[test] error');
	console.log(err);
})

imap.on('imap error',function(conn,keyName,msg,shortmsg){
	console.log('[test] imap error ('+keyName+'): '+msg+' '+shortmsg);
})

imap.on('error chained',function(conn,keyName,msg,shortmsg){
	console.log('[test] error chained ('+keyName+'): '+msg+' '+shortmsg);
})

imap.on('chained',function(conn){
	console.log('[test] chain finished');
	console.log(imap.get('inbox list')); // show the list result
	console.log(imap.get('search result')); // show the search result
	console.log(imap.get('fetch result')); // show the fetch result
})

imap.chained()
	.connect()
	.login() // login
	.select('inbox') // open the inbox
	.list('inbox','*','inbox list') // list all boxes in inbox, 
	.search('BODY "some text"','','search result') // searches for *some text* in the body text
	.fetch(1,'RFC822','fetch result') // fechtes the full mail number 1
	.logout() // logout
	.execute(); // execute the chain

API

require('tualo-imap') returns one object: Connection.

Connection()

Create a new instance of Connection. This instance inherits all functions of the EventEmitter.

Connection.connect()

Establish a connection to the imap server. Emits connected on success, error on failure.

Connection._initConnect(withinChain:boolean)

Internal connection function, see connect()

Connection._connect()

Internal connection function for unsecured connections, see connect()

Connection._onData()

Helper function for any data received on the socket.

Connection._parseData(the:string)

Helper function for parsing any data received on the socket.

Connection.get(key:string)

Returns the message for the specified key

Connection.chained()

Initiate chained commands, they will be exceuted only if execute will be called. When it's called it will reset the chain. All commands followed will be chained and exceuted when execute. If an error occoured the chain stop at that point and emits the error chained event.

Connection.execute()

Execute chained commands. If an error occoured the chain stop at that point and emits the error chained. The chained chained will be emmited when all commands was executed successfully

Connection.login([key]:string)

Sends the login to the Server. Emits LOGIN (or the key name) on success and imap error on failure

-key is the name for storing the result, it can be read with get @see {Connection}.get()

Connection.capability([key]:string)

Sends the capability-command to the Server. Emits CAPABILITY (or the key name) on success and imap error on failure

-key is the name for storing the result, it can be read with get @see {Connection}.get()

Connection.select(box:string, [key]:string)

Sends the select-command to the Server. Emits SELECT (or the key name) on success and imap error on failure.

-box is the name of the mailbox to be selected (ie. "INBOX") -key is the name for storing the result, it can be read with get @see {Connection}.get()

Connection.examine(box:string, [key]:string)

Sends the examine-command to the Server. Emits EXAMINE (or the key name) on success and imap error on failure.

-box is the name of the mailbox to be selected (ie. "INBOX") -key is the name for storing the result, it can be read with get @see {Connection}.get()

Connection.create(box:string, [key]:string)

Create the given mailbox. Emits CREATE (or the key name) on success and imap error on failure.

-box is the name of the mailbox to be selected (ie. "INBOX") -key is the name for storing the result, it can be read with get @see {Connection}.get()

Connection.delete(box:string, [key]:string)

Delete the given mailbox Emits EXAMINE (or the key name) on success and imap error on failure.

-box is the name of the mailbox to be selected (ie. "INBOX") -key is the name for storing the result, it can be read with get @see {Connection}.get()

Connection.delete(box:string, [key]:string)

Rename the given mailbox (box) to newname. Emits RENAME (or the key name) on success and imap error on failure.

-box is the name of the mailbox to be selected (ie. "INBOX") -key is the name for storing the result, it can be read with get @see {Connection}.get()

Connection.subscripe(box:string, [key]:string)

Subscripe the given mailbox. Emits SUBSCRIBE (or the key name) on success and imap error on failure.

-box is the name of the mailbox to be selected (ie. "INBOX") -key is the name for storing the result, it can be read with get @see {Connection}.get()

Connection.unsubscripe(box:string, [key]:string)

Unsubscripe the given mailbox. Emits UNSUBSCRIBE (or the key name) on success and imap error on failure.

-box is the name of the mailbox to be selected (ie. "INBOX") -key is the name for storing the result, it can be read with get @see {Connection}.get()

Connection.unsubscripe()

Delete all messages that have the \Deleted flag. Emits EXPUNGE (or the key name) on success and imap error on failure. *

Connection.store(sequence:string, dataitem:string, value:array, [key]:string)

Alters data associated with a message in the mailbox. @link http://www.faqs.org/rfcs/rfc3501.html (section 6.4.6)

Connection.copy(sequence:string, box:string, [key]:string)

Copies the given message(s) to the end of the mailbox. @link http://www.faqs.org/rfcs/rfc3501.html (section 6.4.7)

Connection.lsub(reference:string, name:string, [key]:string)

List all subscriped mailboxes. Emits LSUB (or the key name) on success and imap error on failure.

-reference the box from where the listing starts (ie. "INBOX") -name of the mailboxes to be listet (wildcards "*" are possible) {@link http://www.faqs.org/rfcs/rfc3501.html} (section 6.3.9) -key is the name for storing the result, it can be read with get @see {Connection}.get()

Connection.list(reference:string, name:string, [key]:string)

List all mailboxes that matches to the given name within the reference. Emits LIST (or the key name) on success and imap error on failure.

-reference the box from where the listing starts (ie. "INBOX") -name of the mailboxes to be listet (wildcards "*" are possible) {@link http://www.faqs.org/rfcs/rfc3501.html} (section 6.3.8) -key is the name for storing the result, it can be read with get @see {Connection}.get()

Connection.search(criteria:string, charset:string, [key]:string)

Searches the mailbox for messages that match the given searching criteria. Emits SEARCH (or the key name) on success and imap error on failure

-criteria you are seaching for. Have a look at {@link http://www.faqs.org/rfcs/rfc3501.html} (section 6.4.4) -charset the charset for searching -key is the name for storing the result, it can be read with get @see {Connection}.get()

Connection.fetch(number:number, item:string, [key]:string)

Fetches the message with the given number. Emits FETCH (or the key name) on success and imap error on failure

-number the number of the message to be fechted (ie. Numbers received by SEARCH) -item the message item {@link http://www.faqs.org/rfcs/rfc3501.html} (section 6.4.5) -key is the name for storing the result, it can be read with get @see {Connection}.get()

Connection.starttls([key]:string)

Send the startls command. Emits STARTTLS (or the key name) on success and imap error on failure !!!! UNTESTET !!!! -key is the name for storing the result, it can be read with get @see {Connection}.get()

Connection.starttls([key]:string)

Send the noop command. Emits NOOP (or the key name) on success and imap error on failure

-key is the name for storing the result, it can be read with get @see {Connection}.get()

Connection.logout([key]:string)

Send the logout command. Emits LOGOUT (or the key name) on success and imap error on failure

-key is the name for storing the result, it can be read with get @see {Connection}.get()

Connection.sendRawCommand(command:string, key:string)

Send a command to the server.

-command the raw IMAP command -key is the name for storing the result, it can be read with get @see {Connection}.get()

Connection._send()

Internal helper for sending commands to the server. This method set the prefix counter for each command.

Connection._resetChainCommands()

Internal helper for cleaning/ initialization of the command-chain.

Connection._appendChainCommand(command:mixed)

Internal helper for appending a command to the chain.

Connection._executeNextCommand()

Internal helper for executing the command-chain.

Message()

Create a new instance of Message. Message parses a messages of th IMAP server.

-rawText of the message recieved from th IMAP server.

Message.toString()

Returns the raw message text.

Message.getList()

Return all parsed list entries. Return a list of all List entries. (ie. [{text: 'INBOX',children: true},{text: 'BOX2',children: true}]

Message.getSearchList()

Return all parsed search numbers. ie. ['9','11','12',...]

Message.getFetched()

Return the parsed Fetch-Object.

Message._parse()

Parses the message.

Message._parseLine()

Parses a single line.

Message._parseFetch()

Parses a fetch line.

Message._adressStruct()

Parses an address struct.

Message._listEntry(str:string)

Parses an list entry, check if it's set to NIL and removes double qoutes at the begining and at the end of the entry.

Message._parenthesizedList(str:string)

Parses an parenthesized list entry.

Message._fetchParam(startPos:number, line:string, countFor:string, waitFor:string)

Parses an String and return the first string between countFor and waitFor.