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