Enabled Spamhaus/DBL

pull/200/head
M66B 3 years ago
parent b78c47315f
commit fda5e0da5f

@ -3392,8 +3392,17 @@ class Core {
!EntityFolder.JUNK.equals(folder.type) && !EntityFolder.JUNK.equals(folder.type) &&
!Arrays.asList(message.keywords).contains(MessageHelper.FLAG_NOT_JUNK)) !Arrays.asList(message.keywords).contains(MessageHelper.FLAG_NOT_JUNK))
try { try {
message.blocklist = DnsBlockList.isJunk( message.blocklist = DnsBlockList.isJunk(context,
context, imessage.getHeader("Received")); imessage.getHeader("Received"));
if (message.blocklist == null || !message.blocklist) {
List<Address> senders = new ArrayList<>();
if (message.reply != null)
senders.addAll(Arrays.asList(message.reply));
if (message.from != null)
senders.addAll(Arrays.asList(message.from));
message.blocklist = DnsBlockList.isJunk(context, senders);
}
} catch (Throwable ex) { } catch (Throwable ex) {
Log.w(folder.name, ex); Log.w(folder.name, ex);
} }

@ -39,6 +39,8 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import javax.mail.Address;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeUtility; import javax.mail.internet.MimeUtility;
public class DnsBlockList { public class DnsBlockList {
@ -55,7 +57,7 @@ public class DnsBlockList {
}), }),
// https://www.spamhaus.org/dbl/ // https://www.spamhaus.org/dbl/
new BlockList(null, "Spamhaus/DBL", "dbl.spamhaus.org", false, new String[]{ new BlockList(true, "Spamhaus/DBL", "dbl.spamhaus.org", false, new String[]{
// https://www.spamhaus.org/faq/section/Spamhaus%20DBL#291 // https://www.spamhaus.org/faq/section/Spamhaus%20DBL#291
"127.0.1.2", // spam domain "127.0.1.2", // spam domain
"127.0.1.4", // phish domain "127.0.1.4", // phish domain
@ -137,10 +139,28 @@ public class DnsBlockList {
return null; return null;
String host = getFromHost(MimeUtility.unfold(received[received.length - 1])); String host = getFromHost(MimeUtility.unfold(received[received.length - 1]));
return (host == null ? null : isJunk(context, host, BLOCK_LISTS)); if (host == null)
return null;
boolean numeric = host.startsWith("[") && host.endsWith("]");
if (numeric)
host = host.substring(1, host.length() - 1);
return isJunk(context, host, true, BLOCK_LISTS);
} }
private static boolean isJunk(Context context, String host, List<BlockList> blocklists) { static Boolean isJunk(Context context, List<Address> addresses) {
for (Address address : addresses) {
String email = ((InternetAddress) address).getAddress();
String domain = UriHelper.getEmailDomain(email);
if (domain == null)
continue;
if (isJunk(context, domain, false, BLOCK_LISTS))
return true;
}
return false;
}
private static boolean isJunk(Context context, String host, boolean numeric, List<BlockList> blocklists) {
synchronized (cache) { synchronized (cache) {
CacheEntry entry = cache.get(host); CacheEntry entry = cache.get(host);
if (entry != null && !entry.isExpired()) if (entry != null && !entry.isExpired())
@ -149,7 +169,9 @@ public class DnsBlockList {
boolean blocked = false; boolean blocked = false;
for (BlockList blocklist : blocklists) for (BlockList blocklist : blocklists)
if (isEnabled(context, blocklist) && isJunk(host, blocklist)) { if (isEnabled(context, blocklist) &&
blocklist.numeric == numeric &&
isJunk(host, blocklist)) {
blocked = true; blocked = true;
break; break;
} }
@ -162,9 +184,6 @@ public class DnsBlockList {
} }
private static boolean isJunk(String host, BlockList blocklist) { private static boolean isJunk(String host, BlockList blocklist) {
boolean numeric = host.startsWith("[") && host.endsWith("]");
if (numeric)
host = host.substring(1, host.length() - 1);
try { try {
if (blocklist.numeric) { if (blocklist.numeric) {
long start = new Date().getTime(); long start = new Date().getTime();
@ -202,7 +221,7 @@ public class DnsBlockList {
Log.w(ex); Log.w(ex);
} }
} }
} else if (!numeric) { } else {
long start = new Date().getTime(); long start = new Date().getTime();
String lookup = host + "." + blocklist.address; String lookup = host + "." + blocklist.address;
boolean junk = isJunk(lookup, blocklist.responses); boolean junk = isJunk(lookup, blocklist.responses);

Loading…
Cancel
Save