diff --git a/app/src/main/java/eu/faircode/email/EmailProvider.java b/app/src/main/java/eu/faircode/email/EmailProvider.java index 5ef7b4c40a..5aa4392cfb 100644 --- a/app/src/main/java/eu/faircode/email/EmailProvider.java +++ b/app/src/main/java/eu/faircode/email/EmailProvider.java @@ -99,6 +99,22 @@ public class EmailProvider { throw new UnknownHostException(this.name + " invalid"); } + static List getDomainNames(Context context) { + List result = new ArrayList<>(); + + for (String domain : PROPRIETARY) + result.add(domain.replace(".", "\\.")); + + List providers = loadProfiles(context); + for (EmailProvider provider : providers) + if (provider.domain != null) + for (String domain : provider.domain) + if (!result.contains(domain)) + result.add(domain); + + return result; + } + static List loadProfiles(Context context) { List result = null; try { diff --git a/app/src/main/java/eu/faircode/email/EntityRule.java b/app/src/main/java/eu/faircode/email/EntityRule.java index f252004986..dbbfe74480 100644 --- a/app/src/main/java/eu/faircode/email/EntityRule.java +++ b/app/src/main/java/eu/faircode/email/EntityRule.java @@ -540,14 +540,23 @@ public class EntityRule { return cal; } - static EntityRule blockSender(Context context, EntityMessage message, EntityFolder junk, boolean block_domain) throws JSONException { + static EntityRule blockSender(Context context, EntityMessage message, EntityFolder junk, boolean block_domain, List whitelist) throws JSONException { String sender = ((InternetAddress) message.from[0]).getAddress(); String name = MessageHelper.formatAddresses(new Address[]{message.from[0]}); if (block_domain) { int at = sender.indexOf('@'); - if (at > 0) - sender = sender.substring(at); + if (at > 0) { + boolean whitelisted = false; + String domain = sender.substring(at + 1); + for (String d : whitelist) + if (domain.matches(d)) { + whitelisted = true; + break; + } + if (!whitelisted) + sender = '@' + domain; + } } JSONObject jsender = new JSONObject(); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index dfdfb0ad24..ec38cbf260 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -6036,6 +6036,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. long id = args.getLong("id"); boolean block_sender = args.getBoolean("block_sender"); boolean block_domain = args.getBoolean("block_domain"); + List whitelist = EmailProvider.getDomainNames(context); DB db = DB.getInstance(context); try { @@ -6053,7 +6054,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. if ((block_sender || block_domain) && (message.from != null && message.from.length > 0)) { - EntityRule rule = EntityRule.blockSender(context, message, junk, block_sender); + EntityRule rule = EntityRule.blockSender(context, message, junk, block_sender, whitelist); rule.id = db.rule().insertRule(rule); } diff --git a/app/src/main/java/eu/faircode/email/ServiceUI.java b/app/src/main/java/eu/faircode/email/ServiceUI.java index aaac665c5e..a34f3daabc 100644 --- a/app/src/main/java/eu/faircode/email/ServiceUI.java +++ b/app/src/main/java/eu/faircode/email/ServiceUI.java @@ -240,6 +240,7 @@ public class ServiceUI extends IntentService { private void onJunk(long id) throws JSONException { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); boolean block_sender = prefs.getBoolean("notify_block_sender", false); + List whitelist = EmailProvider.getDomainNames(this); DB db = DB.getInstance(this); try { @@ -256,7 +257,7 @@ public class ServiceUI extends IntentService { EntityOperation.queue(this, message, EntityOperation.MOVE, junk.id); if (block_sender) { - EntityRule rule = EntityRule.blockSender(this, message, junk, false); + EntityRule rule = EntityRule.blockSender(this, message, junk, false, whitelist); rule.id = db.rule().insertRule(rule); }