From c49543cc0ac2b9f3d2a9fc96b29d7c9d766195ca Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 2 Aug 2021 09:10:44 +0200 Subject: [PATCH] Decode first received SPF header --- app/src/main/java/eu/faircode/email/Core.java | 4 ++++ .../main/java/eu/faircode/email/MessageHelper.java | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 35fd8c21de..fb02ebade8 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -2469,6 +2469,8 @@ class Core { message.bimi_selector = helper.getBimiSelector(); message.dkim = MessageHelper.getAuthentication("dkim", authentication); message.spf = MessageHelper.getAuthentication("spf", authentication); + if (message.spf == null && helper.getSPF()) + message.spf = true; message.dmarc = MessageHelper.getAuthentication("dmarc", authentication); message.return_path = helper.getReturnPath(); message.submitter = helper.getSender(); @@ -3347,6 +3349,8 @@ class Core { message.bimi_selector = helper.getBimiSelector(); message.dkim = MessageHelper.getAuthentication("dkim", authentication); message.spf = MessageHelper.getAuthentication("spf", authentication); + if (message.spf == null && helper.getSPF()) + message.spf = true; message.dmarc = MessageHelper.getAuthentication("dmarc", authentication); message.return_path = helper.getReturnPath(); message.submitter = helper.getSender(); diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index ade3dfc0bf..f77526284d 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -1293,6 +1293,18 @@ public class MessageHelper { return result; } + 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; + + String spf = MimeUtility.unfold(headers[0]); + return (spf.trim().toLowerCase(Locale.ROOT).startsWith("pass")); + } + private String fixEncoding(String name, String header) { if (header.trim().startsWith("=?")) return header;