Skip to content

Commit cb4bdbb

Browse files
committed
Merge pull request totaljs#303 from asessa/patch-9
Fixed error handling on ECONNRESET
2 parents 4f8092f + 8319ae5 commit cb4bdbb

1 file changed

Lines changed: 14 additions & 10 deletions

File tree

mail.js

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,8 @@ Message.prototype.send = function(smtp, options, fnCallback) {
299299
options = tmp;
300300
}
301301

302+
self.isSent = false;
303+
302304
self.callback = fnCallback;
303305

304306
if (options.secure && !options.port)
@@ -314,7 +316,7 @@ Message.prototype.send = function(smtp, options, fnCallback) {
314316
if (err) {
315317
mailer.emit('error', err, self);
316318

317-
if (fnCallback)
319+
if (!self.isSent && fnCallback)
318320
fnCallback(err);
319321

320322
return;
@@ -323,7 +325,7 @@ Message.prototype.send = function(smtp, options, fnCallback) {
323325
socket.on('error', function(err) {
324326
mailer.emit('error', err, self);
325327

326-
if (fnCallback)
328+
if (!self.isSent && fnCallback)
327329
fnCallback(err);
328330

329331
});
@@ -348,15 +350,15 @@ Message.prototype.send = function(smtp, options, fnCallback) {
348350
socket.on('error', function(err) {
349351
socket.destroy();
350352
self.closed = true;
351-
if (self.callback)
353+
if (!self.isSent && self.callback)
352354
self.callback(err);
353355
if (err.stack.indexOf('ECONNRESET') === -1)
354356
mailer.emit('error', err, self);
355357
});
356358

357359
socket.on('clientError', function(err) {
358360
mailer.emit('error', err, self);
359-
if (self.callback)
361+
if (!self.isSent && self.callback)
360362
self.callback(err);
361363
});
362364

@@ -382,15 +384,15 @@ Message.prototype.switchToTLS = function(socket, options) {
382384
sock.on('error', function(err) {
383385
sock.destroy();
384386
self.closed = true;
385-
if (self.callback)
387+
if (!self.isSent && self.callback)
386388
self.callback(err);
387389
if (err.stack.indexOf('ECONNRESET') === -1)
388390
mailer.emit('error', err, self);
389391
});
390392

391393
sock.on('clientError', function(err) {
392394
mailer.emit('error', err, self);
393-
if (self.callback)
395+
if (!self.isSent && self.callback)
394396
self.callback(err);
395397
});
396398

@@ -442,7 +444,7 @@ Message.prototype._send = function(socket, options, autosend) {
442444
if (socket !== null)
443445
socket.destroy();
444446
socket = null;
445-
if (self.callback)
447+
if (!self.isSent && self.callback)
446448
self.callback(err);
447449
});
448450

@@ -595,6 +597,8 @@ Message.prototype._send = function(socket, options, autosend) {
595597
write(buffer.shift());
596598

597599
if (buffer.length === 0) {
600+
self.isSent = true;
601+
598602
mailer.emit('success', self);
599603

600604
if (self.callback)
@@ -623,7 +627,7 @@ Message.prototype._send = function(socket, options, autosend) {
623627
err = new Error('Forbidden.');
624628
mailer.emit('error', err, self);
625629

626-
if (self.callback)
630+
if (!self.isSent && self.callback)
627631
self.callback(err);
628632

629633
if (socket !== null)
@@ -664,7 +668,7 @@ Message.prototype._send = function(socket, options, autosend) {
664668
socket = null;
665669
mailer.emit('error', err, self);
666670

667-
if (self.callback)
671+
if (!self.isSent && self.callback)
668672
self.callback(err);
669673

670674
break;
@@ -798,4 +802,4 @@ function unicode_encode(val) {
798802
// ======================================================
799803

800804
var mailer = new Mailer();
801-
module.exports = mailer;
805+
module.exports = mailer;

0 commit comments

Comments
 (0)