infinity.pop3¶
Module: infinity.pop3
The infinity.pop3 namespace contains classes for accessing POP3 email servers as a client as well as building your own POP3 server.
client¶
Properties:
- allowUnsafeLegacyRenegotiation
- authMode
- encryptMode
- host
- password
- port
- timeout
- useLegacyServerConnect
- username
- verifyServerCertificate
Methods:
You can use the infinity.pop3.client object to access a POP3 server and retrieve messages from it. The first thing you need to do is set the host, port and encryptMode properties to specify how to connect to the server. Then you'll usually need to set the authMode, username and password properties to specify how to authenticate yourself towards the server. You can also set the timeout to limit the time that the client will try to connect to the server.
After setting the properties, you can use the connect() method to establish a connection to the POP3 server, followed by calls to the other methods to list or retrieve messages. Make sure to call the free() nethod when finished, to release the memory allocated by the client object.
Example:
infinity.loadModule('infinity.pop3');
let myClient = new infinity.pop3.client();
try {
myClient.host = 'pop.gmail.com';
myClient.port = 995;
myClient.encryptMode = infinity.pop3.client.encryptMode.sslTls;
myClient.authMode = infinity.pop3.client.authMode.userPass;
myClient.username = 'youraccount@gmail.com';
myClient.password = 'yourpassword';
myClient.connect();
console.debug(myClient.list());
console.debug(myClient.retrieve(1));
myClient.disconnect();
} finally {
myClient.free();
}
Properties
allowUnsafeLegacyRenegotiation¶
Type: boolean
Allows the deprecated ssl unsafe legacy renegotiation. This should be avoided and the server's ssl version should be fixed, instead. If that is not possible, then this option can be used to let the POP3 client establish a connection nonetheless.
authMode¶
Type: infinity.pop3.client.authMode
Gets and sets the authorization mode for the POP3 client to use, according to infinity.pop3.client.authMode
encryptMode¶
Type: infinity.pop3.client.encryptMode
Gets and sets the encryption mode for the POP3 client to use according to infinity.pop3.client.encryptMode
host¶
Type: string
Gets and sets the POP3 server address to connect to.
password¶
Type: string
Gets and sets the password for authorization.
port¶
Type: number
Gets and sets the communication port of the POP3 server.
timeout¶
Type: number
Gets and sets the connection timeout in milliseconds.
useLegacyServerConnect¶
Type: boolean
Allows deprecated, unsafe ssl connections. This should be avoided and the server's ssl version should be fixed, instead. If that is not possible, then this option can be used to let the POP3 client establish a connection nonetheless.
useLegacyServerConnect¶
Type: boolean
Allows deprecated, unsafe ssl connections. This should be avoided and the server's ssl version should be fixed, instead. If that is not possible, then this option can be used to let the POP3 client establish a connection nonetheless.
username¶
Type: string
Gets and sets the username for authorization.
verifyServerCertificate¶
Type: boolean
This option will turn on ssl certificate validation, which will result in a connection error if the server's ssl certificate is not valid (e.g. self-signed).
Methods
constructor()¶
Lets you create an INFINITY.JS POP3 client object instance. Doesn't accept parameters.
Signature:
constructor()
Example:
infinity.loadModule('infinity.pop3');
let myClient = new infinity.pop3.client();
connect()¶
Connects to the POP3 server. The initial properties should be set by the time connect() is called.
Signature:
connect(): void
Example:
myClient.connect();
count()¶
Returns the number of new messages on the POP3 server.
Signature:
count(): number
Return type: number
Example:
let newMessagesCount = myClient.count();
delete()¶
Deletes a message from the POP3 server.
Signature:
delete( msgNum: number ): boolean
Parameters:
- msgNum: ``
The number of the message to delete.
Return type: boolean
Example:
myClient.delete(1);
disconnect()¶
Disconnects from the server.
Signature:
disconnect(): void
Example:
myClient.disconnect();
free()¶
Frees the memory previously occupied by the POP3 client object instance.
Signature:
free(): void
Example:
myClient.free();
list()¶
Returns a infinity.pop3.listArray of new messages on the POP3 server.
Signature:
list( msgNum?: number ): infinity.pop3.listArray
Parameters:
- msgNum:
number, optionalThe number of the message for which to return list info. If unspecified, a list of all messages will be returned.
Return type: infinity.pop3.listArray
Example:
let messageList = myClient.list();
console.debug(messageList[0]['size']);
retrieve()¶
Retrieves a message from the server.
Signature:
retrieve( msgNum: number, fileName?: string ): string
Parameters:
-
msgNum:
numberThe number of the message to retrieve.
-
fileName:
string, optionalIf a filename is specified, then the message will be saved to that file. The filename can be relative (location relative to the folder with the used INFINITY.JS executable file) or an absolute path.
Return type: string
Example:
let messageText = myClient.retrieve(1);
myClient.retrieve(msgNum, fileName);
size()¶
Returns the size of the specified message in bytes.
Signature:
size( msgNum?: number ): number
Parameters:
- msgNum:
number, optionalThe number of the message to examine.
Return type: number
Example:
myClient.size();
top()¶
Retrieves the headers of the specified message.
Signature:
top( msgNum: number, maxLines?: number, fileName?: string ): string
Parameters:
-
msgNum:
numberThe number of the message to retrieve.
-
maxLines:
numberThe number of content lines of the message to retrieve (in addition to the message headers).
-
fileName:
string, optionalIf a filename is specified, then the message headers will be saved to that file. The filename can be relative (location relative to the folder with the used INFINITY.JS executable file) or an absolute path.
Return type: string
Example:
myClient.top(msgNum);
myClient.top(msgNum, fileName);
uidl()¶
Returns a infinity.pop3.uidlArray with unique numbers for each new message, or for the specified message.
Signature:
uidl( msgNum?: number ): infinity.pop3.uidlArray
Parameters:
- msgNum:
number, optionalThe number of the message.
Return type: infinity.pop3.uidlArray
Example:
let uidlList = myClient.uidl();
server¶
Properties:
Methods:
To run a POP3 server using infinity.pop3.server you need to set script filenames in the server's onConnect, onLogin, etc. properties. These script filenames have to be relative to your main script and these scripts will be called when the POP3 server receives the corresponding POP3 command from a client.
Within these scripts, you can access the infinity.pop3.session object, which will be filled with the parameters of the client's POP3 command. You will also use this POP3 session object to pass back your reply to the client. You can find the specifics per command in the documentation of each on... property.
Example:
infinity.loadModule('infinity.pop3');
let myServer = new infinity.pop3.server(...);
myServer.onLogin = 'pop3/login.js';
myServer.onTop = 'pop3/top.js';
myServer.onRetrieve = 'pop3/retrieve.js';
myServer.onDelete = 'pop3/delete.js';
myServer.onQuit = 'pop3/quit.js';
myServer.start();
Properties
onConnect¶
Type: string
Script filename (relative to the main script) that will handle POP3 connection requests. Within that script, you can access the infinity.pop3.session object, which will contain the following properties:
id: POP3 session idip: IP address of the connecting POP3 clientport: port of the POP3 client connectiondisconnect: this is a function that you can call to disconnect the connection.
These properties will remain valid throughout the POP3 session, so you can access these in the other POP3 command handlers, as well. The only exception is the id property, which will become invalid in the onDisconnect handler.
onDelete¶
Type: string
Script filename (relative to the main script) that will handle POP3 delete requests. Within that script, you can access the infinity.pop3.session object, which will contain the same properties described in the onConnect handler, plus the following:
item: an object containing information about the message to be deleted, with the following properties:deleted:false, set this totrueto mark the item as deleted and thus signal success to the delete request. Note that the delete request should not directly delete the message, but rather mark it for deletion (as specified in the POP3 protocol). The message will remain marked as deleted throughout the POP3 session (unless the client resets the delete flag) and you need to handle theonQuitrequest later to actually delete all the messages marked for deletion (as specified in the POP3 protocol).id: the message's idsize: the messages size (in bytes)uid: the message's uid
Deleting messages from POP3 works as follows: the client issues a delete request to the server, which will mark the message as deleted. The client can ask the server to reset all delete flags (which the infinity.pop3.server will automatically handle for you - you don't have to write your own command handler for that). When the client sends a quit command to the server, then the server is expected to delete all messages that have been marked as deleted. If the client disconnects without sending a quit command, then no messages should be deleted.
onDisconnect¶
Type: string
Script filename (relative to the main script) that will handle POP3 disconnects. Within that script, you can access the infinity.pop3.session object, which will contain the same properties described in the onConnect handler (except for the id property no longer being valid, because the connection is being disconnected), plus the following:
items: an array containing message items with the following properties:deleted:trueif the message has been marked as deleted,falseotherwiseid: the message's idsize: the messages size (in bytes)uid: the message's uid
Note: do not delete messages that have been marked as deleted in the onDisconnect handler. Messages should only be deleted in the onQuit handler (as specified in the POP3 protocol).
onLogin¶
Type: string
Script filename (relative to the main script) that will handle POP3 login requests. Within that script, you can access the infinity.pop3.session object, which will contain the same properties described in the onConnect handler, plus the following:
username: the username for authenticationpassword: the password for authenticationauthenticated: set this totrueif the credentials are valid and tofalseto signal invalid credentialsitems: an array that you need to fill with information about the messages available:deleted:trueif the message is marked as deleted,falseotherwiseid: the message's idsize: the messages size (in bytes)uid: the message's uid
The username and password properties will remain valid throughout the rest of the POP3 session, in addition to the properties described in the onConnect command handler. You should validate these credentials and set the authenticated property accordingly. If authentication is successful, you will also need to fill the items array and provide information about all the messages that can be retrieved. You can use arbitrary values for the id and uid properties - the POP3 client will use these values when sending commands to your server, so you will get these values in POP3 session data in the other command handlers.
onQuit¶
Type: string
Script filename (relative to the main script) that will handle POP3 quit requests. Within that script, you can access the infinity.pop3.session object, which will contain the same properties described in the onConnect handler, plus the following:
items: an array containing message items with the following properties:deleted:trueif the message should now be deleted,falseif the message should not be deletedid: the message's idsize: the messages size (in bytes)uid: the message's uid
As specified in the POP3 protocol, all messages that have been marked as deleted should actually be deleted when the client sends the quit command. So you need to iterate through the infinity.pop3.session.items array and delete all messages from your storage that are marked as deleted.
onRetrieve¶
Type: string
Script filename (relative to the main script) that will handle POP3 retrieve requests. Within that script, you can access the infinity.pop3.session object, which will contain the same properties described in the onConnect handler, plus the following:
item: an object containing information about the message to be retrieved, with the following properties:deleted: will betrueorfalse, depending on whether the message has been marked for deletionid: the message's idsize: the messages size (in bytes)uid: the message's uidlines: set this property to the number of lines the message hasmsg: set this to the message data (as a string)
The message data (the infinity.pop3.session.item.msg property) should be a message according to the RFC822 standard. You can use infinity.mail to conveniently create RFC822 messages.
onTop¶
Type: string
Script filename (relative to the main script) that will handle POP3 top requests (requesting the headers and a certain number of lines from the top of the message content). Within that script, you can access the infinity.pop3.session object, which will contain the same properties described in the onConnect handler, plus the following:
item: an object containing information about the message to be retrieved, with the following properties:deleted: will betrueorfalse, depending on whether the message has been marked for deletionid: the message's idsize: the messages size (in bytes)uid: the message's uidlines: the number of lines of the message that you should be returning (in addition to the message headers)msg: set this to the message data (as a string)
The message data (the infinity.pop3.session.item.msg property) should be a message according to the RFC822 standard. You can use infinity.mail to conveniently create RFC822 messages. In contrast to the retrieve command handled in onRetrieve, the top command asks the server to return only the message headers and a specified number of lines from the top of the message (hence the name of the command). Make sure to return only the message headers plus the top infinity.pop3.session.lines lines of the message content in the infinity.pop3.session.msg session property.
Methods
constructor()¶
Creates a POP3 server object.
Signature:
constructor( ssl?: boolean, verifyCertificate?: boolean, port?: number, maxConnections?: number, poolSize?: number, minProtocol?: infinity.pop3.server.protocol, maxProtocol?: infinity.pop3.server.protocol )
Parameters:
-
ssl:
boolean, optionaltrueto accept encrypted connections (using TLS/SSL),falseto only accept unencrypted connections (not recommended). -
verifyCertificate:
boolean, optionaltrueto validate the SSL certificate,falseto ignore certificate problems (e.g. when using self-signed certificates). -
port:
number, optionalThe port on which to listen for POP3 client connections. If this is set to
995, then the server will use implicit SSL, otherwise it will accept unencrypted connections and handle STARTTLS requests by the client to switch to an encrypted connection automatically. -
maxConnections:
number, optionalMaximum number of simultaneous connections.
-
poolSize:
number, optionalPool size. The server will maintain a pool of connections that will be reused for better performance.
-
minProtocol:
infinity.pop3.server.protocol, optionalMinimal encryption protocol accepted. You can use this to refuse client connections that are using old (possibly obsolete) encryption protocols.
-
maxProtocol:
infinity.pop3.server.protocol, optionalMaximum encryption protocl accepted.
Example:
infinity.loadModule('infinity.pop3');
let myServer = new infinity.pop3.server();
setCertificate()¶
Sets the SSL certificate for the current server instance using the corresponding files provided in the function parameters.
Signature:
setCertificate(certFile: string, keyFile: string, rootCertFile?: string, verify?: boolean): void;
Parameters:
-
certFile:
stringThe path to the certificate file to be used.
-
keyFile:
stringThe path to the the key file to be used.
-
rootCertFile:
string, optionalThe path to the the root certificate file to be used.
-
verify:
boolean, optionalWhether to verify the validity of the certificate.
Example:
myServer.setCertificate('certFile.crt', 'keyFile.key', 'rootCertFile.crt', true);
start()¶
Starts the POP3 server. The server will run as a separate thread, listening to incoming POP3 client connections and running the scripts specified in the on... command handlers.
Signature:
start(): void
Example:
myServer.start();
stop()¶
Stops the POP3 server. The server will close its port and stop listening for POP3 connections.
Signature:
stop(): void
Example:
myServer.stop();
infinity.pop3.client¶
infinity.pop3.client.authMode¶
Values:
-
userPass:
0Authenticate using username and password.
-
apop:
1Authenticate using APOP (Authenticated Post Office Protocol).
-
sasl:
2Authenticate using SASL (Simple Authentication and Security Layer).
Example:
infinity.loadModule('infinity.pop3');
let authMode = infinity.pop3.client.authMode.userPass;
infinity.pop3.client.encryptMode¶
Values:
-
none:
0Unencrypted connection.
-
sslTls:
1SSL/TLS encrypted connection.
Example:
infinity.loadModule('infinity.pop3');
let encryptMode = infinity.pop3.client.encryptMode.sslTls;
infinity.pop3.server¶
infinity.pop3.server.protocol¶
Values:
-
tls1_0:
2TLS 1 encrypted connection.
-
tls1_1:
3TLS 1.1 encrypted connection.
-
tls1_2:
4TLS 1.2 encrypted connection.
-
tls1_3:
5TLS 1.3 encrypted connection.
Example:
infinity.loadModule('infinity.pop3.server');
let protocol = infinity.pop3.server.protocol.tls1_2;
infinity.pop3.session¶
The infinity.pop3.session object will be available in the command handler scripts run by the infinity.pop3.server. The properties will be filled depending on the command handler and some of the properties are used to provide results of the handler to be returned back to the client.
authenticated¶
Type: boolean
In the onLogin command handler, you need to set this property to true or false depending on whether the provided credentials (username and password) are valid.
item¶
Type: {id: number, uid: string, size: number, deleted: boolean, msg: string, lines: number}
This property will be partly filled for command handlers dealing with a specific message item. The properties of this object are:
id: the message iduid: the message uidsize: the size of the message (in bytes/octets)deleted:trueif the message has been marked to be deleted,falseotherwisemsg: you need to set this property in theonRetrieveandonTopcommand handlers. This needs to be a string containing a message in the RFC822 format. You can useinfinity.mailto create messages and convert them to a RFC822 string.lines: provided in theonTopcommand handler. This is the requested number of lines from the message's content requested by the client.
items¶
Type: infinity.pop3.itemArray
This is the current list of messages available in this POP3 session.
id¶
Type: number
The POP3 session id. This will remain constant throughout a single POP3 session and will turn invalid on disconnect.
ip¶
Type: string
The IP address from which the POP3 client connected.
password¶
Type: string
The password used to authenticate the POP3 session.
port¶
Type: number
The port used by the POP3 connection with the client.
username¶
Type: string
The username used to authenticate the POP3 session.
disconnect()¶
Disconnnects the current POP3 connection.
Signature:
disconnect(): void
itemArray¶
Extends: Array<{id: number, uid: string, size: number, deleted: boolean}>
An array of POP3 message items.
listArray¶
Extends: Array<{msgNum: number, size: number}>
An array of POP3 message item id and size information.
uidlArray¶
Extends: Array<{msgNum: number, id: string}>
An array of POP3 message id and uid information.