Prepare one click unsubscribe

pull/214/head
M66B 2 years ago
parent 6c4ad3401c
commit e5853451e0

@ -3418,6 +3418,8 @@ class Core {
String[] authentication = helper.getAuthentication(); String[] authentication = helper.getAuthentication();
MessageHelper.MessageParts parts = helper.getMessageParts(); MessageHelper.MessageParts parts = helper.getMessageParts();
Pair<String, Boolean> unsubscribe = helper.getListUnsubscribe();
EntityMessage message = new EntityMessage(); EntityMessage message = new EntityMessage();
message.account = folder.account; message.account = folder.account;
message.folder = folder.id; message.folder = folder.id;
@ -3451,7 +3453,7 @@ class Core {
message.bcc = helper.getBcc(); message.bcc = helper.getBcc();
message.reply = helper.getReply(); message.reply = helper.getReply();
message.list_post = helper.getListPost(); message.list_post = helper.getListPost();
message.unsubscribe = helper.getListUnsubscribe(); message.unsubscribe = (unsubscribe == null ? null : unsubscribe.first);
message.headers = helper.getHeaders(); message.headers = helper.getHeaders();
message.infrastructure = helper.getInfrastructure(); message.infrastructure = helper.getInfrastructure();
message.subject = helper.getSubject(); message.subject = helper.getSubject();
@ -4554,6 +4556,8 @@ class Core {
String[] authentication = helper.getAuthentication(); String[] authentication = helper.getAuthentication();
MessageHelper.MessageParts parts = helper.getMessageParts(); MessageHelper.MessageParts parts = helper.getMessageParts();
Pair<String, Boolean> unsubscribe = helper.getListUnsubscribe();
message = new EntityMessage(); message = new EntityMessage();
message.account = folder.account; message.account = folder.account;
message.folder = folder.id; message.folder = folder.id;
@ -4600,7 +4604,7 @@ class Core {
message.bcc = helper.getBcc(); message.bcc = helper.getBcc();
message.reply = helper.getReply(); message.reply = helper.getReply();
message.list_post = helper.getListPost(); message.list_post = helper.getListPost();
message.unsubscribe = helper.getListUnsubscribe(); message.unsubscribe = (unsubscribe == null ? null : unsubscribe.first);
message.autocrypt = helper.getAutocrypt(); message.autocrypt = helper.getAutocrypt();
if (download_headers) if (download_headers)
message.headers = helper.getHeaders(); message.headers = helper.getHeaders();

@ -2761,13 +2761,12 @@ public class MessageHelper {
} }
} }
String getListUnsubscribe() throws MessagingException { Pair<String, Boolean> getListUnsubscribe() throws MessagingException {
ensureHeaders(); ensureHeaders();
String list;
try { try {
// https://www.ietf.org/rfc/rfc2369.txt // https://www.ietf.org/rfc/rfc2369.txt
list = imessage.getHeader("List-Unsubscribe", null); String list = imessage.getHeader("List-Unsubscribe", null);
if (list == null) if (list == null)
return null; return null;
@ -2777,6 +2776,15 @@ public class MessageHelper {
if (list == null || list.startsWith("NO")) if (list == null || list.startsWith("NO"))
return null; 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 link = null;
String mailto = null; String mailto = null;
int s = list.indexOf('<'); int s = list.indexOf('<');
@ -2821,9 +2829,9 @@ public class MessageHelper {
} }
if (link != null) if (link != null)
return link; return new Pair<>(link, onclick);
if (mailto != null) if (mailto != null)
return mailto; return new Pair<>(mailto, onclick);
if (!BuildConfig.PLAY_STORE_RELEASE) if (!BuildConfig.PLAY_STORE_RELEASE)
Log.i(new IllegalArgumentException("List-Unsubscribe: " + list)); Log.i(new IllegalArgumentException("List-Unsubscribe: " + list));

Loading…
Cancel
Save