diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 0a07195616..f82b2fafb6 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -3418,6 +3418,8 @@ class Core { String[] authentication = helper.getAuthentication(); MessageHelper.MessageParts parts = helper.getMessageParts(); + Pair unsubscribe = helper.getListUnsubscribe(); + EntityMessage message = new EntityMessage(); message.account = folder.account; message.folder = folder.id; @@ -3451,7 +3453,7 @@ class Core { message.bcc = helper.getBcc(); message.reply = helper.getReply(); message.list_post = helper.getListPost(); - message.unsubscribe = helper.getListUnsubscribe(); + message.unsubscribe = (unsubscribe == null ? null : unsubscribe.first); message.headers = helper.getHeaders(); message.infrastructure = helper.getInfrastructure(); message.subject = helper.getSubject(); @@ -4554,6 +4556,8 @@ class Core { String[] authentication = helper.getAuthentication(); MessageHelper.MessageParts parts = helper.getMessageParts(); + Pair unsubscribe = helper.getListUnsubscribe(); + message = new EntityMessage(); message.account = folder.account; message.folder = folder.id; @@ -4600,7 +4604,7 @@ class Core { message.bcc = helper.getBcc(); message.reply = helper.getReply(); message.list_post = helper.getListPost(); - message.unsubscribe = helper.getListUnsubscribe(); + message.unsubscribe = (unsubscribe == null ? null : unsubscribe.first); message.autocrypt = helper.getAutocrypt(); if (download_headers) message.headers = helper.getHeaders(); diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index f2946f2aee..e0fa1008b6 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -2761,13 +2761,12 @@ public class MessageHelper { } } - String getListUnsubscribe() throws MessagingException { + Pair getListUnsubscribe() throws MessagingException { ensureHeaders(); - String list; try { // https://www.ietf.org/rfc/rfc2369.txt - list = imessage.getHeader("List-Unsubscribe", null); + String list = imessage.getHeader("List-Unsubscribe", null); if (list == null) return null; @@ -2777,6 +2776,15 @@ public class MessageHelper { if (list == null || list.startsWith("NO")) return null; + // https://datatracker.ietf.org/doc/html/rfc8058 + boolean onclick = false; + String post = imessage.getHeader("List-Unsubscribe-Post", null); + if (post != null) { + post = MimeUtility.unfold(post); + post = decodeMime(post); + onclick = "List-Unsubscribe=One-Click".equalsIgnoreCase(post.trim()); + } + String link = null; String mailto = null; int s = list.indexOf('<'); @@ -2821,9 +2829,9 @@ public class MessageHelper { } if (link != null) - return link; + return new Pair<>(link, onclick); if (mailto != null) - return mailto; + return new Pair<>(mailto, onclick); if (!BuildConfig.PLAY_STORE_RELEASE) Log.i(new IllegalArgumentException("List-Unsubscribe: " + list));