@@ -93,8 +93,9 @@ smtpServer.messageBody = function () {
9393*/
9494
9595SmtpServer . FILTER_ACCEPT = 0 ;
96- SmtpServer . FILTER_REJECT_TEMPORARILY = 1 ;
97- SmtpServer . FILTER_REJECT_PERMANENTLY = 2 ;
96+ SmtpServer . FILTER_ACCEPT_MARK = 1 ;
97+ SmtpServer . FILTER_REJECT_TEMPORARILY = 2 ;
98+ SmtpServer . FILTER_REJECT_PERMANENTLY = 3 ;
9899
99100// List of DNSBL domains:
100101// - first element is the DNSBL domain name
@@ -113,6 +114,11 @@ SmtpServer.bypassFilters = [
113114 '<test@localhost>' ,
114115] ;
115116
117+ SmtpServer . trustSpfDomains = [
118+ 'gmail.com' ,
119+ 'yahoo.com' ,
120+ ] ;
121+
116122Array . prototype . indexOfStr = function ( str )
117123{
118124 for ( var i in this )
@@ -190,6 +196,10 @@ SmtpServer.prototype.smtpData = function(headers, body)
190196 break ;
191197 this . relayCmd ( "RSET" ) ;
192198 return new SmtpResponse ( 550 , "Requested action not taken" ) ;
199+ case SmtpServer . FILTER_ACCEPT_MARK :
200+ Sys . log ( Sys . LOG_INFO , "FILTER: ACCEPT-MARK" ) ;
201+ bypassFilters = true ;
202+ break ;
193203 default :
194204 Sys . log ( Sys . LOG_INFO , "FILTER: ACCEPT" ) ;
195205 bypassFilters = false ;
@@ -260,6 +270,10 @@ SmtpServer.prototype.filter = function(headers, body) {
260270 break ;
261271 }
262272
273+ var ret = SmtpServer . FILTER_REJECT_PERMANENTLY ;
274+ if ( rsp . result == Spf . RESULT_PASS && SmtpServer . trustSpfDomains . indexOfStr ( this . sender . mailbox . domain ) >= 0 )
275+ ret = SmtpServer . FILTER_ACCEPT_MARK ;
276+
263277 for ( var i in SmtpServer . dnsbl ) {
264278 var dnsbl = SmtpServer . dnsbl [ i ] ;
265279 var raddr = Dns . revAddr ( this . remoteAddr , dnsbl [ 0 ] ) ;
@@ -276,7 +290,7 @@ SmtpServer.prototype.filter = function(headers, body) {
276290 }
277291 // TODO if `dnsbl` defines a callback function, call it and pass rlist
278292 Sys . log ( Sys . LOG_DEBUG , "DNSBL: reject " + raddr + " (" + rlist . join ( ) + ")" ) ;
279- return SmtpServer . FILTER_REJECT_PERMANENTLY ;
293+ return ret ;
280294 }
281295
282296 return SmtpServer . FILTER_ACCEPT ;
0 commit comments