diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index ebe077d4b5..ce8b1c8766 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -3504,22 +3504,10 @@ class Core { if (native_dkim && !BuildConfig.PLAY_STORE_RELEASE) { List signers = helper.verifyDKIM(context); - message.signedby = (signers.size() == 0 ? null : TextUtils.join(",", signers)); - if (Boolean.TRUE.equals(message.dkim)) { - if (signers.size() == 0) - message.dkim = false; - } else { - if (message.from != null) - for (Address from : message.from) { - String domain = UriHelper.getEmailDomain(((InternetAddress) from).getAddress()); - if (domain != null && signers.contains(domain)) { - message.dkim = true; - break; - } - } - } - if (!Boolean.TRUE.equals(message.dkim)) - message.dmarc = message.dkim; + message.signedby = (signers.isEmpty() ? null : TextUtils.join(",", signers)); + message.dkim = !signers.isEmpty(); + message.dmarc = Boolean.TRUE.equals(message.dmarc) || + helper.isAligned(context, signers, message.return_path, message.from); } if (message.size == null && message.total != null) @@ -4668,22 +4656,10 @@ class Core { if (native_dkim && !BuildConfig.PLAY_STORE_RELEASE) { List signers = helper.verifyDKIM(context); - message.signedby = (signers.size() == 0 ? null : TextUtils.join(",", signers)); - if (Boolean.TRUE.equals(message.dkim)) { - if (signers.size() == 0) - message.dkim = false; - } else { - if (message.from != null) - for (Address from : message.from) { - String domain = UriHelper.getEmailDomain(((InternetAddress) from).getAddress()); - if (domain != null && signers.contains(domain)) { - message.dkim = true; - break; - } - } - } - if (!Boolean.TRUE.equals(message.dkim)) - message.dmarc = message.dkim; + message.signedby = (signers.isEmpty() ? null : TextUtils.join(",", signers)); + message.dkim = !signers.isEmpty(); + message.dmarc = Boolean.TRUE.equals(message.dmarc) || + helper.isAligned(context, signers, message.return_path, message.from); } // Borrow reply name from sender name diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 3723ada766..95b2c068b5 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -2610,6 +2610,24 @@ public class MessageHelper { return null; } + boolean isAligned(Context context, List signers, Address[] return_path, Address[] from) { + List
envelop = new ArrayList<>(); + if (return_path != null) + envelop.addAll(Arrays.asList(return_path)); + if (from != null) + envelop.addAll(Arrays.asList(from)); + for (String signer : signers) { + for (Address a : envelop) { + String domain = UriHelper.getEmailDomain(((InternetAddress) a).getAddress()); + if (domain != null && Objects.equals( + UriHelper.getRootDomain(context, signer), + UriHelper.getRootDomain(context, domain))) + return true; + } + } + return false; + } + Address[] getMailFrom(String[] headers) { if (headers == null) return null;