diff --git a/app/src/main/java/eu/faircode/email/EntityRule.java b/app/src/main/java/eu/faircode/email/EntityRule.java index 3cce69af0c..a03418e55d 100644 --- a/app/src/main/java/eu/faircode/email/EntityRule.java +++ b/app/src/main/java/eu/faircode/email/EntityRule.java @@ -40,6 +40,7 @@ import org.json.JSONObject; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -62,6 +63,7 @@ import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; +import javax.mail.internet.InternetHeaders; import static androidx.room.ForeignKey.CASCADE; @@ -233,12 +235,19 @@ public class EntityRule { // Header JSONObject jheader = jcondition.optJSONObject("header"); - if (jheader != null && imessage != null) { + if (jheader != null) { String value = jheader.getString("value"); boolean regex = jheader.getBoolean("regex"); boolean matches = false; - Enumeration
headers = imessage.getAllHeaders(); + Enumeration
headers; + if (imessage != null) + headers = imessage.getAllHeaders(); + else if (message.headers != null) { + ByteArrayInputStream bis = new ByteArrayInputStream(message.headers.getBytes()); + headers = new InternetHeaders(bis).getAllHeaders(); + } else + throw new IllegalArgumentException(context.getString(R.string.title_rule_no_headers)); while (headers.hasMoreElements()) { Header header = headers.nextElement(); String formatted = header.getName() + ": " + header.getValue(); diff --git a/app/src/main/java/eu/faircode/email/FragmentRule.java b/app/src/main/java/eu/faircode/email/FragmentRule.java index 0aece11480..f7dee87ccd 100644 --- a/app/src/main/java/eu/faircode/email/FragmentRule.java +++ b/app/src/main/java/eu/faircode/email/FragmentRule.java @@ -1054,13 +1054,6 @@ public class FragmentRule extends FragmentBase { JSONObject jcondition = getCondition(); JSONObject jaction = getAction(); - JSONObject jheader = jcondition.optJSONObject("header"); - if (jheader != null) { - Snackbar.make(view, R.string.title_rule_no_headers, Snackbar.LENGTH_LONG) - .setGestureInsetBottomIgnored(true).show(); - return; - } - Bundle args = new Bundle(); args.putLong("folder", folder); args.putString("condition", jcondition.toString());