// Copyright (c) 2010 Martin Knafve / hMailServer.com. // http://www.hmailserver.com #pragma once namespace HM { class Message; class MessageData; class SpamTestRunner; class SpamTestResult; class SpamProtection : public Singleton { public: SpamProtection(void); ~SpamProtection(void); void Load(); std::set > RunPreTransmissionTests(const String &sFromAddress, const IPAddress & iOriginatingIP, const IPAddress &iConnectingIP, const String &sHeloHost); std::set > RunPostTransmissionTests(const String &sFromAddress, const IPAddress & iOriginatingIP, const IPAddress &iConnectingIP, std::shared_ptr pMessage); static std::shared_ptr AddSpamScoreHeaders(std::shared_ptr pMessage, std::set > setResult, bool classifiedAsSpam); static bool GreyListingAllowSend(const String &sSenderAddress, const String &sRecipientAddress, const IPAddress & iRemoteIP); static int CalculateTotalSpamScore(std::set > result); static bool IsWhiteListed(const String &sFromAddress, const IPAddress & iIPAddress); bool PerformGreyListing(std::shared_ptr message, const std::set > &spamTestResults, const String &toAddress, const IPAddress &ipaddress); private: std::shared_ptr spam_test_runner_; }; }