--- logging-log4j2/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/SmtpAppender.java	2015-06-09 17:01:38.693094457 -0400
+++ staging/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/SmtpAppender.java	2015-06-02 16:48:44.000000000 -0400
@@ -18,6 +18,7 @@
 package org.apache.logging.log4j.core.appender;
 
 import java.io.Serializable;
+import java.util.List;
 
 import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.Layout;
@@ -26,6 +27,8 @@
 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
 import org.apache.logging.log4j.core.config.plugins.PluginElement;
 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+import org.apache.logging.log4j.core.filter.CompositeFilter;
+import org.apache.logging.log4j.core.filter.MarkerFilter;
 import org.apache.logging.log4j.core.filter.ThresholdFilter;
 import org.apache.logging.log4j.core.layout.HtmlLayout;
 import org.apache.logging.log4j.core.net.SmtpManager;
@@ -149,16 +152,43 @@
     }
 
     /**
-     * Capture all events in CyclicBuffer.
+   * Capture all events in CyclicBuffer.  Ignore events that are
+   * denied by a MarkerFilter.
      * @param event The Log event.
      * @return true if the event should be filtered.
      */
     @Override
     public boolean isFiltered(final LogEvent event) {
-        final boolean filtered = super.isFiltered(event);
+    boolean filtered = false;
+
+    final Filter filter = this.getFilter();
+    if (filter instanceof CompositeFilter) {
+      final List<Filter> filters = ((CompositeFilter)filter).getFilters();
+      for (final Filter aFilter : filters) {
+        final Filter.Result filterResult = (aFilter != null) ? aFilter.filter(event) : Filter.Result.NEUTRAL;
+        if (!Filter.Result.NEUTRAL.equals(filterResult)) {
+          filtered = (Filter.Result.DENY.equals(filterResult));
         if (filtered) {
+            final boolean isMarkerFilter = aFilter instanceof MarkerFilter;
+            // Ignore events that are denied by a MarkerFilter.
+            if (!isMarkerFilter) {
             manager.add(event);
         }
+          }
+          break;
+        }
+      }
+    }
+    else {
+      filtered = super.isFiltered(event);
+      if (filtered) {
+        final boolean isMarkerFilter = filter instanceof MarkerFilter;
+        if (!isMarkerFilter) {
+          manager.add(event);
+        }
+      }
+    }
+
         return filtered;
     }
 
