/// <summary>
        /// Internal helper
        /// </summary>
        private static string PrepareCheckRequestMessage(SpamAssassinCheckArgs e)
        {
            // Create mini-RFC822 message and translate it to DOS format for spamd.
            var requestMessage =
                @"From {SenderEMailAddress} {EMailDateUTC}
Received: from {SenderHostName} ({SenderHostAddress}) by {ServerHostName} with HTTP via ZetaSoftware;
	{EMailDateRFC2822}
From: {SenderEMailName} <{ReceiverEMailAddress}>
Date: {EMailDateRFC2822}
Subject: ZetaSoftware comment
To: {ReceiverEMailAddress}

{TextToCheck}";

            requestMessage = requestMessage.Replace("{SenderEMailName}", e.SenderEMailName);
            requestMessage = requestMessage.Replace("{SenderEMailAddress}", e.SenderEMailAddress);
            requestMessage = requestMessage.Replace("{EMailDateUTC}", e.EMailDate.ToUniversalTime().ToString("ddd MMM dd HH:mm:ss yyyy", CultureInfo.InvariantCulture));
            requestMessage = requestMessage.Replace("{SenderHostName}", e.SenderHostName);
            requestMessage = requestMessage.Replace("{SenderHostAddress}", e.SenderHostAddress);
            requestMessage = requestMessage.Replace("{ServerHostName}", e.ServerHostName);
            requestMessage = requestMessage.Replace("{EMailDateRFC2822}", e.EMailDate.ToString("r"));
            requestMessage = requestMessage.Replace("{ReceiverEMailAddress}", e.ReceiverEMailAddress);
            requestMessage = requestMessage.Replace("{TextToCheck}", e.TextToCheck);

            return(requestMessage);
        }
        /// <summary>
        /// Execute the Check command
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        public SpamAssassinCheckResult ExecuteCheck(SpamAssassinCheckArgs e)
        {
            string[] additionalLines;
            var      result         = new SpamAssassinCheckResult();
            var      responsePacket = SendMessageEx(SpamAssassinCommands.Check, PrepareCheckRequestMessage(e));

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

            return(result);
        }
        /// <summary>
        /// Internal helper
        /// </summary>
        private static string PrepareCheckRequestMessage(SpamAssassinCheckArgs e)
        {
            // Create mini-RFC822 message and translate it to DOS format for spamd.
            var requestMessage =
            @"From {SenderEMailAddress} {EMailDateUTC}
            Received: from {SenderHostName} ({SenderHostAddress}) by {ServerHostName} with HTTP via ZetaSoftware;
            {EMailDateRFC2822}
            From: {SenderEMailName} <{ReceiverEMailAddress}>
            Date: {EMailDateRFC2822}
            Subject: ZetaSoftware comment
            To: {ReceiverEMailAddress}

            {TextToCheck}";

            requestMessage = requestMessage.Replace("{SenderEMailName}", e.SenderEMailName);
            requestMessage = requestMessage.Replace("{SenderEMailAddress}", e.SenderEMailAddress);
            requestMessage = requestMessage.Replace("{EMailDateUTC}", e.EMailDate.ToUniversalTime().ToString("ddd MMM dd HH:mm:ss yyyy", CultureInfo.InvariantCulture));
            requestMessage = requestMessage.Replace("{SenderHostName}", e.SenderHostName);
            requestMessage = requestMessage.Replace("{SenderHostAddress}", e.SenderHostAddress);
            requestMessage = requestMessage.Replace("{ServerHostName}", e.ServerHostName);
            requestMessage = requestMessage.Replace("{EMailDateRFC2822}", e.EMailDate.ToString("r"));
            requestMessage = requestMessage.Replace("{ReceiverEMailAddress}", e.ReceiverEMailAddress);
            requestMessage = requestMessage.Replace("{TextToCheck}", e.TextToCheck);

            return requestMessage;
        }
        /// <summary>
        /// Execute the Check command
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        public SpamAssassinCheckResult ExecuteCheck(SpamAssassinCheckArgs e)
        {
            string[] additionalLines;
            var result = new SpamAssassinCheckResult();
            var responsePacket = SendMessageEx(SpamAssassinCommands.Check, PrepareCheckRequestMessage(e));

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

            return result;
        }