@@ -426,82 +426,90 @@ module.exports = (db, server, messageHandler, userHandler, settingsHandler) => {
426426 return ;
427427 }
428428
429- messageHandler . counters . ttlcounter (
430- 'wdr:' + userData . _id . toString ( ) ,
431- compiledEnvelope . to . length ,
432- maxRecipients ,
433- false ,
434- ( err , result ) => {
435- if ( err ) {
436- err . responseCode = 500 ;
437- err . code = 'InternalDatabaseError' ;
438- return callback ( err ) ;
439- }
429+ messageHandler . counters . ttlcounter ( 'wdr:' + userData . _id . toString ( ) , 0 , maxRecipients , false , ( err , result ) => {
430+ if ( err ) {
431+ err . responseCode = 500 ;
432+ err . code = 'InternalDatabaseError' ;
433+ return callback ( err ) ;
434+ }
440435
441- let success = result . success ;
442- let sent = result . value ;
443- let ttl = result . ttl ;
444-
445- let ttlHuman = false ;
446- if ( ttl ) {
447- if ( ttl < 60 ) {
448- ttlHuman = ttl + ' seconds' ;
449- } else if ( ttl < 3600 ) {
450- ttlHuman = Math . round ( ttl / 60 ) + ' minutes' ;
451- } else {
452- ttlHuman = Math . round ( ttl / 3600 ) + ' hours' ;
453- }
454- }
436+ let success = result . success ;
437+ let sent = result . value ;
438+ let ttl = result . ttl ;
455439
456- if ( ! success ) {
457- log . info ( 'API' , 'RCPTDENY denied sent=%s allowed=%s expires=%ss.' , sent , maxRecipients , ttl ) ;
458- let err = new Error (
459- 'You reached a daily sending limit for your account' + ( ttl ? '. Limit expires in ' + ttlHuman : '' )
460- ) ;
461- err . responseCode = 403 ;
462- err . code = 'RateLimitedError' ;
463- return setImmediate ( ( ) => callback ( err ) ) ;
440+ let ttlHuman = false ;
441+ if ( ttl ) {
442+ if ( ttl < 60 ) {
443+ ttlHuman = ttl + ' seconds' ;
444+ } else if ( ttl < 3600 ) {
445+ ttlHuman = Math . round ( ttl / 60 ) + ' minutes' ;
446+ } else {
447+ ttlHuman = Math . round ( ttl / 3600 ) + ' hours' ;
464448 }
449+ }
465450
466- // push message to outbound queue
467- let message = maildrop . push (
468- {
469- user : userData . _id ,
470- userEmail : userData . address ,
471- parentId : messageId ,
472- reason : 'submit' ,
473- from : compiledEnvelope . from ,
474- to : compiledEnvelope . to ,
475- sendTime,
476- origin : options . ip ,
477- runPlugins : true ,
478- mtaRelay : userData . mtaRelay || false
479- } ,
480- ( err , ...args ) => {
481- if ( err || ! args [ 0 ] ) {
482- if ( err ) {
483- if ( ! err . code && err . name === 'SMTPReject' ) {
484- err . code = 'MessageRejected' ;
485- }
451+ if ( ! success || sent + compiledEnvelope . length > maxRecipients ) {
452+ log . info ( 'API' , 'RCPTDENY denied sent=%s allowed=%s expires=%ss.' , sent , maxRecipients , ttl ) ;
453+ let err = new Error (
454+ 'You reached a daily sending limit for your account' + ( ttl ? '. Limit expires in ' + ttlHuman : '' )
455+ ) ;
456+ err . responseCode = 403 ;
457+ err . code = 'RateLimitedError' ;
458+ return setImmediate ( ( ) => callback ( err ) ) ;
459+ }
486460
487- err . code = err . code || 'ERRCOMPOSE' ;
461+ // push message to outbound queue
462+ let message = maildrop . push (
463+ {
464+ user : userData . _id ,
465+ userEmail : userData . address ,
466+ parentId : messageId ,
467+ reason : 'submit' ,
468+ from : compiledEnvelope . from ,
469+ to : compiledEnvelope . to ,
470+ sendTime,
471+ origin : options . ip ,
472+ runPlugins : true ,
473+ mtaRelay : userData . mtaRelay || false
474+ } ,
475+ ( err , ...args ) => {
476+ if ( err || ! args [ 0 ] ) {
477+ if ( err ) {
478+ if ( ! err . code && err . name === 'SMTPReject' ) {
479+ err . code = 'MessageRejected' ;
488480 }
489- err . responseCode = 500 ;
490- return callback ( err , ...args ) ;
491- }
492481
493- let outbound = args [ 0 ] . id ;
494- return next ( null , outbound ) ;
482+ err . code = err . code || 'ERRCOMPOSE' ;
483+ }
484+ err . responseCode = 500 ;
485+ return callback ( err , ...args ) ;
495486 }
496- ) ;
497487
498- if ( message ) {
499- let stream = compiled . createReadStream ( ) ;
500- stream . once ( 'error' , err => message . emit ( 'error' , err ) ) ;
501- stream . pipe ( collector ) . pipe ( message ) ;
488+ messageHandler . counters . ttlcounter (
489+ 'wdr:' + userData . _id . toString ( ) ,
490+ compiledEnvelope . to . length ,
491+ maxRecipients ,
492+ false ,
493+ err => {
494+ if ( err ) {
495+ err . responseCode = 500 ;
496+ err . code = 'InternalDatabaseError' ;
497+ return setImmediate ( ( ) => callback ( err ) ) ;
498+ }
499+
500+ let outbound = args [ 0 ] . id ;
501+ return next ( null , outbound ) ;
502+ }
503+ ) ;
502504 }
505+ ) ;
506+
507+ if ( message ) {
508+ let stream = compiled . createReadStream ( ) ;
509+ stream . once ( 'error' , err => message . emit ( 'error' , err ) ) ;
510+ stream . pipe ( collector ) . pipe ( message ) ;
503511 }
504- ) ;
512+ } ) ;
505513 } ;
506514
507515 addToDeliveryQueue ( ( err , outbound ) => {
0 commit comments