Where is SpamFoo documentation for SmarterMail?
Question asked by AWRData - 8/30/2026 at 1:10 PM
Answered
It may be that my search-fu is weak, but I cannot find anything which looks remotely like documentation for using and troubleshooting SpamFoo in SmarterMail.  SpamFoo's own website mentions that its implementation will differ based upon the system in which it is used.  A fair statement, that.

But, as I recall from the beta announcement, I have enabled SpamFoo per the brief instructions, and I do not see any activity in the delivery logs nor the dashboard.  I would like to troubleshoot this on my own, but most of the threads I find are not helpful.

Is there a definitive repository of information for the SmarterMail SpamFoo implementation?  I am looking forward to being able to implement this once the beta is over, if I can see it working, to augment the spam controls already in place at my gateways, and possibly even replace the spam filtering which some customers have brought with them (ProofPoint, &c.)
Derek Curtis Replied
Employee Post Marked As Answer
SpamFoo is logged just as other antispam solutions, so the logs are a good place to look. There are one or two troubleshooting logs that can be enabled, so I'd recommend a ticket in to Support and they can help you out. 

Regarding documentation, we have the integration documented just like Cyren, MessageSniffer, etc.as well as our documentation on the dashboards. You can get to that from the help link in the top nav bar of SmarterMail or from the ? on modals.  

SpamFoo has their own help docs located here: https://help.spamfoo.com/
Derek Curtis
CCO
SmarterTools Inc.
Douglas Foster Replied
Spamfoo has its own logs, which make the SM debug option redundant
.    Working from memory right now, I believe the path on Windows is 
\Program Files (x86)\ smartertools\  Smartermail\Service\spamfoo\data\logs
Sabatino Replied
There's an entry in the dashboard.
However, I agree with awrdata.
There's a lack of coordinated documentation.
https://help.spamfoo.com/ explains how spamfoo works, but the integration with SM is another matter.
Many settings are scattered across various messages, but there's clearly no order. Furthermore, some information has been overridden by subsequent changes.
I installed version 9735 last night, from version 9623 without any problems.
I expected the ability to enable spamfoo on a single domain, but evidently I misunderstood. You can enable classification for each domain.

I set the spamfoo weight to a very low level, 2, and now I'm starting to explore.
Sabatino Traini
      Chief Information Officer
Genial s.r.l. 
Martinsicuro - Italy

Brian Replied
I did it somewhat different... i gave a score of 50 to medium junk and moved it to the junk email folder.

If any of SPF, DKIM, DMARC or Spamfoo and 3 other filters gets triggered, the email is moved to junk.

It has removed like 95% of junk from the inbox for all users of the server.
Douglas Foster Replied
I have SpamFoo working on my incoming gateway to perform analysis of high-risk messages, which has required doing a pretty deep dive into the product.

Concepts:
Spamfoo provides two types of scores:
  • Risk:  Is it spam or not?   This involves a binary result and some additional elements that indicate confidence of the result.
  • Classification (Category):  If it is not spam, is it Primary (e.g. personal), Transactional (automated confirmations), Promotions (unsolicited), or Updates.  I am not certain what is intended by "updates", and have not tried to figure it out.
Mechanism:
Spamfoo has three functions:   One function is use to classify / score a message, one function submits risk feedback (optionally with category corrections), and one function provides category corrections only.  
 
All functions are associated with a userid.   A userid with no feedback will be scored using the default model.   As soon as feedback is provided, a personalization database is created to store that feedback.  Thereafter, scoring of messages for that userid will use a combination of the base model plus the personalization.

SmarterMail processing:
SmarterMail always invokes Spamfoo using the context of the message recipient.

When Spamfoo is enabled, Smartermail uses the spam / not-spam result to determine whether the message goes in the Inbox or the Junk Email folders.  When the user moves messages between Inbox and Junk, SmarterMail sends risk feedback to SmarterMail to create a personalization database for that user.   

When classification is enabled for a domain and a user, incoming messages are associated with a Classification / Category which is independent of the folder structure.   Old email is also processed to provide a classification, which has created performance problems for some environments.

I do not know if SmarterMail provides a way for users to change a message's classification, as I have not been interested in using Spamfoo at the user level.  I do not think most users would spend time correcting classification even if the feature were present.   Time will tell whether users consider the classification  / category values to be useful or not.

Spamfoo does not assign a category classification when the message is considered to be spam, so a message that is moved from Junk to Inbox will continue to have no category classification.   I think it would be nice to know if a spam message imitates a personal message or imitates a transaction confirmation.   This would be an interesting topic for future discussion.

The Spamfoo dashboard is only visible within SmarterMail when classification is enabled on a doman, but it can be opened outside of SmarterMail, using a localhost connection, with some difficulty.

Spamfoo settings in SmarterMail:
  1. Spamfoo service must be started (System... Manage... Troubleshooting... Services).  This applies to both default configurations and incoming gateway configurations that use custom logic. 
  2. To cause Spamfoo to choose between Inbox and Junk Email as the delivery folder, enable the Spam Check option for Spamfoo
  3. To see the Spamfoo dashboard, enable Spamfoo classification on the domain.  Also choose a setting to control how aggressively SmarterMail applies classification / category values on old messages.  When enabled, this setting will creates the classification / category view structure in each user's inbox.
  4. To disable the classification / category view structure for a specific user, change the setting on the user's property page.
Extending Spamfoo to other use cases
The Spamfoo architecture is extremely flexible.

To configure system-level filtering personalization, you need to submit feedback using a userid that represents the system administrator, and then invoke Spamfoo using that system adminstrator userid.  (The userid needs to look like an email address, but it does not need to exist because no validation is performed.)

To configure domain-level filtering personalization, you need to submit feedback using a userid that represents the domain administrator, then invoke Spamfoo using that domain administrator userid.

This strategy can be configured to any level of complexity.  You could have a userid that represents the HR department, and create a personalization structure just for them.

Considerations for using extra filtering layers:
  • These extra layers of filtering can be easily invoked from Declude or equivalent.  On my incoming gateway, I invoke Spamfoo using a userid that represents the system administrator, and only do so for a subset of messages.   I do not use Spamfoo on my main server because I do not want the overhead of scoring every message.

  • Spamfoo returns scoring results, but you need to decide what to do with the results.   I am currently using the results for data collection purposes only.   When Spamfoo has enough feedback to provide high-confidence results, I expect to a high risk score to send a message to quarantine.

  • To use system-level or domain-level filtering, feedback data collection is the most difficult part of the problem.  You need to figure out who is qualified and authorized to provide accurate feedback, how they will be provided the data needed to make those determinations, and how they will access the EML files needed to submit the feedback.   This is the most difficult part of configuring Spamfoo as an incoming gateway tool. 

  • Each layer of filtering requires a separate call to Spamfoo for classification in the context of each userid.    If you use more than one filtering layer, you will need to decide how to prioritize those results to select a final action on the message.

  • To minimize processing costs, it is reasonable to be selective about which messages are submitted to Spamfoo at each userid.    Most of my messages are flagged for Whiltelist, Blacklist, or Quarantine by my legacy filtering logic, so I only invoke Spamfoo on the subset of messages which have unknown reputation.

  • The code for using Spamfoo within Declude is pretty simple.   Support helped me resolve the issues that I could not solve using the Spamfoo documentation alone.

Sabatino Replied
Thanks, Douglas.
I saw your message, but I still have some questions.
For example, you say:
To cause Spamfoo to choose between Inbox and Junk Email as the delivery folder, enable the Spam Check option for Spamfoo.

But I didn't find this option. I only found how to set the number of points it should give.

I didn't find the dashboard for the administrator of a single domain and/or for a single user.

After a few hours of use, I'm having this situation.
I checked those IPs manually.
After looking at the reverse lookup and checking the associated messages (I'd also like to see them easily; clicking on the IP will show me recent messages), I thought it was appropriate to blacklist them.
I'd also do it via API if I had access to this information.
Sabatino Traini
      Chief Information Officer
Genial s.r.l. 
Martinsicuro - Italy

Douglas Foster Replied
This is the link to Spamfoo API documentation

It includes a section on personalization, which is how you would manipulate rules.   

However, Spamfoo rules only apply to one personalization context.   If you are going to block an IP address, you will want to do it globally.  So the change should probably be made elsewhere, in your firewall, your SmaterMail blocklist, or your Declude configuration.    Even if you implement a system-level personalization as I have, it will probably be more efficient to apply the rule in one of these earlier layers.

I have Python code available for /classify-stream and /feedback-stream, if  you need a starting point.  

SmarterMail support has been very helpful for API questions, and they are the correct starting point for these issues.   Spamfoo has not responded to questions submitted through their web page.   Tim has indicated that they lack the resources to provide first-level support to us.
Douglas Foster Replied
You are correct about points - my mistake.  

What I did get correct is that the Spam Check option has to be enabled or SmarterMail will not call Spamfoo at all.
Sabatino Replied
Sorry. When you rush, it gets in part.

http://localhost:16253/health responds. I only tried

Unfortunately, the API doesn't seem to contain the data I was looking for.
Of course, my idea is to blacklist the IP address in Smartert Mail.
Sabatino Traini
      Chief Information Officer
Genial s.r.l. 
Martinsicuro - Italy

Chris Hurst Replied
I seem to get quite a bit of spam email that passes all checks but fails SpamFoo.  SpamFoo isn't quite there yet for me to apply enough weight to the message to move it to Junk from just this failure.  What I have noticed is that SpamFoo gives the message an internal score on how confident it is the message is spam.  In my experience if SpamFoo scored the message .9 or higher the message is most likely spam.

I set up a domain content filtering rule to move the messages to Junk if SpamFoo gives it a .9 or higher score and it seems to be working well.  Just look for this condition in the header and make the rule move the message to Junk.

x-spamfoo-probability: 0.9*

I did see a couple of messages that SpamFoo scored as a 1.000 but they generally fail some of the other tests too and the overall weight is enough to move them to Junk by weight.
Sabatino Replied
@Chris Hurst

You're right.
I've only been observing its behavior for a couple of days. I have to say that there have been very few false positives so far, and the ones I've found have an x-spamfoo probability of less than 0.9.

It would therefore be a good idea to split the rule to assign the spam score for x-spamfoo probability less than or greater than 0.9.
Sabatino Traini
      Chief Information Officer
Genial s.r.l. 
Martinsicuro - Italy

Chris Hurst Replied
The spam that isn't caught is usually .87 or somewhere close to .9 so I am hoping by moving the message to the junk folder manually it will bump up the score for that message on the whole system.  By setting the rule to .9* it is going to move anything 90% or greater except for the rare 1.000 score.  The messages below 90% will still be handled by the regular weighted filtering rules.

Reply to Thread

Enter the verification text