// Copyright (c) 2010 Martin Knafve / hMailServer.com. // http://www.hmailserver.com #pragma once namespace HM { class Message; class RuleResult; class LocalDelivery { public: LocalDelivery(const String &sSendersIP, std::shared_ptr message, const RuleResult &globalRuleResult); ~LocalDelivery(void); bool Perform(std::vector &saErrorMessages); private: void DeliverToLocalAccount_(std::shared_ptr account, size_t iNoOfRecipients, std::vector &saErrorMessages, const String &sOriginalAddress, bool &messageReused); bool LocalDeliveryPreProcess_(std::shared_ptr account, std::shared_ptr accountLevelMessage, const String &sOriginalAddress, std::vector &saErrorMessages); bool AddTraceHeaders_(std::shared_ptr account, std::shared_ptr pMessage, const String &sOriginalAddress); void SendAutoReplyMessage_(std::shared_ptr pAccount, std::shared_ptr pMessage); bool RunAccountRules_(std::shared_ptr pAccount, std::shared_ptr pMessage, RuleResult &accountRuleResult); bool CheckAccountQuotas_(std::shared_ptr pAccount, std::vector &saErrorMessages); std::shared_ptr CreateAccountLevelMessage_(std::shared_ptr pOriginalMessage, std::shared_ptr pRecipientAccount, bool reuseMessage, const String &sOriginalAddress); const String &_sendersIP; const std::shared_ptr original_message_; const RuleResult &_globalRuleResult; }; }