From ade60c608b508b6f3e97878c8b24c0f403dd919b Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 30 May 2024 23:19:30 +0200 Subject: [PATCH] Evuluate Received-SPF --- app/src/main/java/eu/faircode/email/Core.java | 8 +++---- .../eu/faircode/email/FragmentFolders.java | 4 ++-- .../java/eu/faircode/email/MessageHelper.java | 22 ++++++++++++++++--- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 0539cbf6a1..b806df5c18 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -3454,8 +3454,8 @@ class Core { message.tls = helper.getTLS(); message.dkim = MessageHelper.getAuthentication("dkim", authentication); message.spf = MessageHelper.getAuthentication("spf", authentication); - if (message.spf == null && helper.getSPF()) - message.spf = true; + if (message.spf == null) + message.spf = helper.getSPF(); message.dmarc = MessageHelper.getAuthentication("dmarc", authentication); message.auth = MessageHelper.getAuthentication("auth", authentication); message.smtp_from = helper.getMailFrom(authentication); @@ -4634,8 +4634,8 @@ class Core { message.tls = helper.getTLS(); message.dkim = MessageHelper.getAuthentication("dkim", authentication); message.spf = MessageHelper.getAuthentication("spf", authentication); - if (message.spf == null && helper.getSPF()) - message.spf = true; + if (message.spf == null) + message.spf = helper.getSPF(); message.dmarc = MessageHelper.getAuthentication("dmarc", authentication); message.auth = MessageHelper.getAuthentication("auth", authentication); message.smtp_from = helper.getMailFrom(authentication); diff --git a/app/src/main/java/eu/faircode/email/FragmentFolders.java b/app/src/main/java/eu/faircode/email/FragmentFolders.java index e179fdb7d9..ec1ae90331 100644 --- a/app/src/main/java/eu/faircode/email/FragmentFolders.java +++ b/app/src/main/java/eu/faircode/email/FragmentFolders.java @@ -1557,8 +1557,8 @@ public class FragmentFolders extends FragmentBase { message.tls = helper.getTLS(); message.dkim = MessageHelper.getAuthentication("dkim", authentication); message.spf = MessageHelper.getAuthentication("spf", authentication); - if (message.spf == null && helper.getSPF()) - message.spf = true; + if (message.spf == null) + message.spf = helper.getSPF(); message.dmarc = MessageHelper.getAuthentication("dmarc", authentication); message.auth = MessageHelper.getAuthentication("auth", authentication); message.smtp_from = helper.getMailFrom(authentication); diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 465a1da4b1..dc129a7392 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -2272,16 +2272,32 @@ public class MessageHelper { return signer; } - boolean getSPF() throws MessagingException { + Boolean getSPF() throws MessagingException { ensureHeaders(); // http://www.open-spf.org/RFC_4408/#header-field String[] headers = imessage.getHeader("Received-SPF"); if (headers == null || headers.length < 1) - return false; + return null; + + // header-field = "Received-SPF:" [CFWS] result FWS [comment FWS] [ key-value-list ] CRLF + // result = "Pass" / "Fail" / "SoftFail" / "Neutral" / "None" / "TempError" / "PermError" String spf = MimeUtility.unfold(headers[0]); - return (spf.trim().toLowerCase(Locale.ROOT).startsWith("pass")); + String[] values = spf.trim().split("\\s+"); + if (values.length == 0) + return null; + + String value = values[0].toLowerCase(Locale.ROOT); + switch (value) { + case "pass": + return true; + case "neutral": + case "none": + return null; + default: + return false; + } } @NonNull