smtp-server
Advanced tools
Comparing version 1.14.2 to 1.15.0
# Changelog | ||
## v1.15.0 2016-09-23 | ||
* Added new connection property `remotePort` | ||
* Emit 'connect' event when all handshakes (including PROXY) have been completed | ||
## v1.14.2 2016-09-02 | ||
@@ -4,0 +9,0 @@ |
@@ -69,2 +69,3 @@ 'use strict'; | ||
this.remoteAddress = (this._socket.remoteAddress || '').replace(/^::ffff:/, ''); | ||
this.remotePort = Number(this._socket.remotePort) || 0; | ||
@@ -100,2 +101,5 @@ // normalize IPv6 addresses | ||
// if true then can emit connection info | ||
this._canEmitConnection = true; | ||
// increment connection count | ||
@@ -148,2 +152,7 @@ this._closing = false; | ||
this._ready = true; // Start accepting data from input | ||
if (!this._server.options.useXClient && !this._server.options.useXForward) { | ||
this.emitConnection(); | ||
} | ||
this._server.logger.info('[%s] Connection from %s', this._id, this.clientHostname); | ||
@@ -305,2 +314,6 @@ this.send(220, this.name + ' ' + (this._server.options.lmtp ? 'LMTP' : 'ESMTP') + (this._server.options.banner ? ' ' + this._server.options.banner : '')); | ||
this.remoteAddress = params[1].trim().toLowerCase(); | ||
if (params[3]) { | ||
this.remotePort = Number(params[3].trim()) || this.remotePort; | ||
} | ||
this.emitConnection(); | ||
} | ||
@@ -476,2 +489,3 @@ | ||
session.remoteAddress = this.remoteAddress; | ||
session.remotePort = this.remotePort; | ||
session.clientHostname = this.clientHostname; | ||
@@ -518,2 +532,15 @@ session.openingCommand = this.openingCommand; | ||
SMTPConnection.prototype.emitConnection = function () { | ||
if (!this._canEmitConnection) { | ||
return; | ||
} | ||
this._canEmitConnection = false; | ||
this.emit('connect', { | ||
remoteAddress: this.remoteAddress, | ||
remotePort: this.remotePort, | ||
hostNameAppearsAs: this.hostNameAppearsAs, | ||
clientHostname: this.clientHostname | ||
}); | ||
}; | ||
// COMMAND HANDLERS | ||
@@ -734,2 +761,13 @@ | ||
break; | ||
case 'PORT': | ||
value = Number(value) || ''; | ||
this._server.logger.info('[%s] XCLIENT remote port resolved as "%s"', this._id, value); | ||
// store original value for reference as NAME:DEFAULT | ||
if (!this._xClient.has('PORT:DEFAULT')) { | ||
this._xClient.set('PORT:DEFAULT', this.remotePort || ''); | ||
} | ||
this.remotePort = value; | ||
break; | ||
default: | ||
@@ -746,2 +784,6 @@ // other values are not relevant | ||
if (data.has('ADDR')) { | ||
this.emitConnection(); | ||
} | ||
// success | ||
@@ -775,2 +817,3 @@ this.send(220, this.name + ' ' + (this._server.options.lmtp ? 'LMTP' : 'ESMTP') + (this._server.options.banner ? ' ' + this._server.options.banner : '')); | ||
var data = new Map(); | ||
var hasAddr = false; | ||
parts.shift(); // remove XFORWARD prefix | ||
@@ -823,2 +866,10 @@ | ||
this._server.logger.info('[%s] XFORWARD from %s through %s', this._id, value, this.remoteAddress); | ||
// store original value for reference as ADDR:DEFAULT | ||
if (!this._xClient.has('ADDR:DEFAULT')) { | ||
this._xClient.set('ADDR:DEFAULT', this.remoteAddress); | ||
} | ||
hasAddr = true; | ||
this.remoteAddress = value; | ||
} | ||
@@ -829,3 +880,14 @@ break; | ||
this._server.logger.info('[%s] XFORWARD hostname resolved as "%s"', this._id, value); | ||
this.clientHostname = value.toLowerCase(); | ||
break; | ||
case 'PORT': | ||
value = Number(value) || 0; | ||
this._server.logger.info('[%s] XFORWARD port resolved as "%s"', this._id, value); | ||
this.remotePort = value; | ||
break; | ||
case 'HELO': | ||
value = Number(value) || 0; | ||
this._server.logger.info('[%s] XFORWARD HELO name resolved as "%s"', this._id, value); | ||
this.hostNameAppearsAs = value; | ||
break; | ||
default: | ||
@@ -837,2 +899,7 @@ // other values are not relevant | ||
if (hasAddr) { | ||
this._canEmitConnection = true; | ||
this.emitConnection(); | ||
} | ||
// success | ||
@@ -937,2 +1004,5 @@ this.send(250, 'OK'); | ||
// in case we still haven't informed about the new connection emit it | ||
this.emitConnection(); | ||
// sender address can be empty, so we only check if parsing failed or not | ||
@@ -967,3 +1037,2 @@ if (!parsed) { | ||
/** | ||
@@ -970,0 +1039,0 @@ * Processes RCPT TO command, parses address and extra arguments |
@@ -87,2 +87,3 @@ 'use strict'; | ||
connection.on('error', this._onError.bind(this)); | ||
connection.on('connect', this._onClientConnect.bind(this)); | ||
connection.init(); | ||
@@ -235,1 +236,10 @@ }.bind(this)); | ||
}; | ||
/** | ||
* Called when a new connection is established. This might not be the same time the socket is opened | ||
* | ||
* @event | ||
*/ | ||
SMTPServer.prototype._onClientConnect = function (data) { | ||
this.emit('connect', data); | ||
}; |
{ | ||
"name": "smtp-server", | ||
"version": "1.14.2", | ||
"version": "1.15.0", | ||
"description": "Create custom SMTP servers on the fly", | ||
@@ -13,3 +13,3 @@ "main": "lib/smtp-server.js", | ||
"ipv6-normalize": "^1.0.1", | ||
"nodemailer-shared": "^1.0.5" | ||
"nodemailer-shared": "^1.1.0" | ||
}, | ||
@@ -21,5 +21,5 @@ "devDependencies": { | ||
"grunt-eslint": "^19.0.0", | ||
"grunt-mocha-test": "^0.12.7", | ||
"grunt-mocha-test": "^0.13.2", | ||
"mocha": "^3.0.2", | ||
"smtp-connection": "^2.11.0" | ||
"smtp-connection": "^2.12.0" | ||
}, | ||
@@ -26,0 +26,0 @@ "engines": { |
@@ -5,2 +5,4 @@ # smtp-server | ||
> **NB!** this module does not make any email deliveries by itself. smtp-server allows you to listen on ports 25/24/465/587/etc using SMTP protocol and that's it. Your own application is responsible of accepting and delivering the message to destination. | ||
[![Build Status](https://secure.travis-ci.org/andris9/smtp-server.svg)](http://travis-ci.org/andris9/Nodemailer) | ||
@@ -11,2 +13,9 @@ [![npm version](https://badge.fury.io/js/smtp-server.svg)](http://badge.fury.io/js/smtp-server) | ||
## Other similar packages you might be interested in | ||
* **[nodemailer](https://github.com/nodemailer/nodemailer)** – all in one package to send email from Node.js | ||
* **[smtp-server](https://github.com/andris9/smtp-server)** – add SMTP server interface to your application | ||
* **[smtp-server](https://github.com/nodemailer/smtp-connection)** – connect to SMTP servers from your application | ||
* **[zone-mta](https://github.com/zone-eu/zone-mta)** – full featured outbound MTA built using smtp-connection and smtp-server modules | ||
## Support smtp-server development | ||
@@ -13,0 +22,0 @@ |
@@ -1163,2 +1163,3 @@ /* eslint no-unused-expressions:0 */ | ||
expect(conn.remoteAddress).to.equal('198.51.100.22'); | ||
expect(conn.remotePort).to.equal(35646); | ||
connection.quit(); | ||
@@ -1165,0 +1166,0 @@ }); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
145593
3046
471
Updatednodemailer-shared@^1.1.0