Skip to content

Commit f97a72b

Browse files
committed
Add support for trusting domains if they pass SPF check
1 parent 44aa519 commit f97a72b

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

config.js

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,9 @@ smtpServer.messageBody = function () {
9393
*/
9494

9595
SmtpServer.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+
116122
Array.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

Comments
 (0)