@@ -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
800804var mailer = new Mailer ( ) ;
801- module . exports = mailer ;
805+ module . exports = mailer ;
0 commit comments