// Copyright (c) 2006 Martin Knafve / hMailServer.com. // http://www.hmailserver.com #pragma once namespace HM { class Message; class MessageRecipient; class Account; class MessageData; class RuleResult; class ServerInfo; class SMTPDeliverer { public: SMTPDeliverer(); virtual ~SMTPDeliverer(); static void DeliverMessage(std::shared_ptr pMessage); private: static bool PreprocessMessage_(std::shared_ptr pMessage, RuleResult& globalRuleResult, String& preprocessingFailureReason); static bool RunVirusProtection_(std::shared_ptr pMessage); static bool RunGlobalRules_(std::shared_ptr pMessage, RuleResult &ruleResult); static void SubmitErrorLog_(std::shared_ptr pOrigMessage, std::vector &saErrorMessages); static bool HandleInfectedMessage_(std::shared_ptr pMessage, const String &virusName); static void LogAwstatsMessageRejected_(const String &sSendersIP, std::shared_ptr pMessage, const String &sReason); static std::shared_ptr CreateAccountLevelMessage(std::shared_ptr pOriginalMessage, std::shared_ptr pRecipientAccount, bool reuseMessage, const String &sOriginalAddress); }; }