You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/12/13 10:01:21 UTC

[james-project] 16/17: [JAMES-3001] add some debug logs for SpamAssassin client

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit cf210183f70705f7b86ca709442f474b32ef741e
Author: Matthieu Baechler <ma...@apache.org>
AuthorDate: Fri Dec 6 08:57:35 2019 +0100

    [JAMES-3001] add some debug logs for SpamAssassin client
---
 .../james/spamassassin/SpamAssassinInvoker.java    | 22 ++++++++++++++++-----
 .../james/spamassassin/SpamAssassinResult.java     | 23 ++++++++++++++++++++--
 2 files changed, 38 insertions(+), 7 deletions(-)

diff --git a/third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinInvoker.java b/third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinInvoker.java
index ff67c82..bf3d4b7 100644
--- a/third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinInvoker.java
+++ b/third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinInvoker.java
@@ -110,13 +110,15 @@ public class SpamAssassinInvoker {
             .sneakyThrow());
     }
 
-    public SpamAssassinResult scanMailWithAdditionalHeaders(MimeMessage message, String... additionalHeaders) throws MessagingException {
+    private SpamAssassinResult scanMailWithAdditionalHeaders(MimeMessage message, String... additionalHeaders) throws MessagingException {
         try (Socket socket = new Socket(spamdHost, spamdPort);
              OutputStream out = socket.getOutputStream();
              BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(out);
              PrintWriter writer = new PrintWriter(bufferedOutputStream);
              BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
 
+            LOGGER.debug("Sending email {} for spam check", message.getMessageID());
+
             writer.write("CHECK SPAMC/1.2");
             writer.write(CRLF);
 
@@ -134,11 +136,14 @@ public class SpamAssassinInvoker {
             out.flush();
             socket.shutdownOutput();
 
-            return in.lines()
+            SpamAssassinResult spamAssassinResult = in.lines()
                 .filter(this::isSpam)
                 .map(this::processSpam)
                 .findFirst()
                 .orElse(SpamAssassinResult.empty());
+
+            LOGGER.debug("spam check result: {}", spamAssassinResult);
+            return spamAssassinResult;
         } catch (UnknownHostException e) {
             throw new MessagingException("Error communicating with spamd. Unknown host: " + spamdHost);
         } catch (IOException | MessagingException e) {
@@ -146,7 +151,7 @@ public class SpamAssassinInvoker {
         }
     }
 
-    public SpamAssassinResult scanMailWithoutAdditionalHeaders(MimeMessage message) throws MessagingException {
+    private SpamAssassinResult scanMailWithoutAdditionalHeaders(MimeMessage message) throws MessagingException {
         return scanMailWithAdditionalHeaders(message);
     }
 
@@ -219,6 +224,8 @@ public class SpamAssassinInvoker {
              PrintWriter writer = new PrintWriter(bufferedOutputStream);
              BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
 
+            LOGGER.debug("Report mail as {}", messageClass);
+
             byte[] byteArray = IOUtils.toByteArray(message);
             writer.write("TELL SPAMC/1.2");
             writer.write(CRLF);
@@ -237,8 +244,13 @@ public class SpamAssassinInvoker {
             out.flush();
             socket.shutdownOutput();
 
-            return in.lines()
-                .anyMatch(this::hasBeenSet);
+            boolean hasBeenSet = in.lines().anyMatch(this::hasBeenSet);
+            if (hasBeenSet) {
+                LOGGER.debug("Reported mail as {} succeeded", messageClass);
+            } else {
+                LOGGER.debug("Reported mail as {} failed", messageClass);
+            }
+            return hasBeenSet;
         } catch (UnknownHostException e) {
             throw new MessagingException("Error communicating with spamd. Unknown host: " + spamdHost);
         } catch (IOException e) {
diff --git a/third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinResult.java b/third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinResult.java
index b246249..e01464c 100644
--- a/third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinResult.java
+++ b/third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinResult.java
@@ -24,6 +24,7 @@ import org.apache.mailet.Attribute;
 import org.apache.mailet.AttributeName;
 import org.apache.mailet.AttributeValue;
 
+import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 
@@ -84,15 +85,24 @@ public class SpamAssassinResult {
                 headersAsAttributes.add(new Attribute(STATUS_MAIL, AttributeValue.of("No, hits=" + hits + " required=" + requiredHits)));
             }
 
-            return new SpamAssassinResult(hits, requiredHits, headersAsAttributes.build());
+            SpamStatus status = isSpam ? SpamStatus.Spam : SpamStatus.Ham;
+
+            return new SpamAssassinResult(status, hits, requiredHits, headersAsAttributes.build());
         }
     }
 
+    enum SpamStatus {
+        Spam,
+        Ham
+    }
+
+    private final SpamStatus status;
     private final String hits;
     private final String requiredHits;
     private final List<Attribute> headersAsAttributes;
 
-    private SpamAssassinResult(String hits, String requiredHits, List<Attribute> headersAsAttributes) {
+    private SpamAssassinResult(SpamStatus status, String hits, String requiredHits, List<Attribute> headersAsAttributes) {
+        this.status = status;
         this.hits = hits;
         this.requiredHits = requiredHits;
         this.headersAsAttributes = headersAsAttributes;
@@ -110,4 +120,13 @@ public class SpamAssassinResult {
         return headersAsAttributes;
     }
 
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+            .add("status", status)
+            .add("hits", hits)
+            .add("requiredHits", requiredHits)
+            .add("headersAsAttributes", headersAsAttributes)
+            .toString();
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org