/// <summary>
        /// Execute the Check command.
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        public SpamAssassinCheckResult ExecuteCheck(
            SpamAssassinCheckArgs e)
        {
            string requestMessage = PrepareCheckRequestMessage(e);

            // --

            ResponsePacket responsePacket =
                SendMessageEx(SpamAssassinCommands.Check, requestMessage);

            CheckThrowResponsePacket(responsePacket);

            // --

            string[] additionalLines;
            SpamAssassinCheckResult result = new SpamAssassinCheckResult();

            InterpretCheckResponseMessage(
                responsePacket.Message,
                out additionalLines,
                result);

            return(result);
        }
        /// <summary>
        /// Internal helper.
        /// </summary>
        private void InterpretCheckResponseMessage(
            string responseMessage,
            out string[] additionalLines,
            SpamAssassinCheckResult result)
        {
            string[] lines = SplitLines(responseMessage);

            string[] firstLineColumns = lines[0].Split(' ');

            string spamdFlag      = firstLineColumns[1];
            string spamdScore     = firstLineColumns[3];
            string spamdThreshold = firstLineColumns[5];

            // --

            result.IsSpam = string.Compare(spamdFlag, "True", true) == 0;
            result.Score  =
                System.Convert.ToDouble(
                    spamdScore, CultureInfo.InvariantCulture);
            result.Threshold =
                System.Convert.ToDouble(
                    spamdThreshold, CultureInfo.InvariantCulture);

            // --

            ArrayList rawAdditionalLines = new ArrayList();

            for (int index = 1; index < lines.Length; index++)
            {
                rawAdditionalLines.Add(lines[index]);
            }

            additionalLines =
                (string[])rawAdditionalLines.ToArray(
                    typeof(string));
        }