A server-based method for processing messages, the server-based method comprising: identifying a message pool to be processed, the message pool comprising a plurality of messages (1002, 1004); partitioning the message pool into a plurality of subdivisions (1006, 1008) each comprising a plurality of messages; and performing a plurality of processing steps while a delivery window is open, including at least: for each of a plurality of subdivisions up to a predetermined maximum number of processing threads, opening the subdivision for processing, yielding an open subdivision, wherein opening the subdivision for processing comprises: launching a processing thread for processing the messages of the subdivision, and selecting, by the processing thread, messages from the open subdivision and dispatching through a gateway (306, 314) the selected messages for subsequent delivery to message recipients; the method further comprising determining whether a predetermined quantity of messages of a given open subdivision has been sent; and in response to determining that a predetermined quantity of messages of the given open subdivision has been sent, opening a further subdivision of messages for processing by launching a further processing thread for processing the messages of the further subdivision. identifying a message pool to be processed, the message pool comprising a plurality of messages (1002, 1004); partitioning the message pool into a plurality of subdivisions (1006, 1008) each comprising a plurality of messages; and performing a plurality of processing steps while a delivery window is open, including at least: for each of a plurality of subdivisions up to a predetermined maximum number of processing threads, opening the subdivision for processing, yielding an open subdivision, wherein opening the subdivision for processing comprises: launching a processing thread for processing the messages of the subdivision, and selecting, by the processing thread, messages from the open subdivision and dispatching through a gateway (306, 314) the selected messages for subsequent delivery to message recipients; the method further comprising determining whether a predetermined quantity of messages of a given open subdivision has been sent; and in response to determining that a predetermined quantity of messages of the given open subdivision has been sent, opening a further subdivision of messages for processing by launching a further processing thread for processing the messages of the further subdivision. for each of a plurality of subdivisions up to a predetermined maximum number of processing threads, opening the subdivision for processing, yielding an open subdivision, wherein opening the subdivision for processing comprises: launching a processing thread for processing the messages of the subdivision, and selecting, by the processing thread, messages from the open subdivision and dispatching through a gateway (306, 314) the selected messages for subsequent delivery to message recipients; launching a processing thread for processing the messages of the subdivision, and selecting, by the processing thread, messages from the open subdivision and dispatching through a gateway (306, 314) the selected messages for subsequent delivery to message recipients; the method further comprising determining whether a predetermined quantity of messages of a given open subdivision has been sent; and in response to determining that a predetermined quantity of messages of the given open subdivision has been sent, opening a further subdivision of messages for processing by launching a further processing thread for processing the messages of the further subdivision.