Spam Filter ISP Release Notes

// New to VersionNumber = '4.7.4.241';

{TODO -cNew : Added entries in activity logfiles to indicate when SpamFilter starts the routine process of removing old emamils from quarantine database (Starting TDeleteExpiredQuarantineThread) }

{TODO -cFix : Added support for BIGINT data type for the fields tblQuarantine.QuarID, tblQuarantine.MsgID, and tblMsgs.MsgID. This is needed if admins experience would experience an overflow when using the default INT data type for those fields} 

{TODO -cFix : If the Blacklist Cache IP blocking filter is enabled, disabling it would still cause SpamFilter to check new inbound connection against the IPs present in the cache until they eventually age out a few minutes later (IPs for new connections will however not cause the IPs to be blacklisted in the cache - there was no bug in this behavior) } 


// New to VersionNumber = '4.7.4.239';

{TODO -cFix : Disabled the advertising of BINARYMIME in the EHLO banner as that extension can only be used with CHUNKING (which is not available in SpamFilter)}

{TODO -cFix : Issue introduced in 4.7.4.232 - Running the standalone version of SpamFilter.exe did not automatically launch SpamFilter with elevated privileges - users had to manually "launch as administrator" the standalone version for it to work properly}

{TODO -cNew : Changed the behavior of the filter order - if a recipient is not in the "Authorized TO Emails", that recipient will be rejected even if a whitelist is active since that adddress is non-existent. If however the connection is being whitelisted, the DisconnectOnNonAuthorizedTO=1 option in the SpamFilter.ini will be ignored and the connection will not be forcefully disconnected}


// New to VersionNumber = '4.7.4.236';

{TODO -cFix : Resolved issue during Active Directory and LDAP SMTP Authentication for this error: Account failed: Error Opening Connection to Server}


// New to VersionNumber = '4.7.4.235';

{TODO -cFix : Undid this change in 4.7.3.235, as it may have been causing access violation errors: Increased the max stack size per thread from 1MB to 10MB to help reducing risk of stack overflows}


// New to VersionNumber = '4.7.4.234';

{TODO -cNew : To help troubleshooting, added log entries for when SpamFilter starts and finishes checking an email for keywords}

{TODO -cFix : Complex RegEx expressions that caused a large number of recursions can cause SpamFilter to crash abruptly with stack overflows errors which prevent any logging of the cause of the problem}

{TODO -cNew : Added new SpamFilter.ini option MaxRegExLimitRecursion to prevent stack overflow crashes when using complex RegEx expressions}

{TODO -cFix : Increased the max stack size per thread from 1MB to 10MB to help reducing risk of stack overflows}


// New to VersionNumber = '4.7.4.232';

{TODO -cFix : Starting from v4.7.3.217 a bug was introduced that prevented SpamFilter from looking at the "text/plain" section of the email, and only examined the html and decoded sections}


// New to VersionNumber = '4.7.4.231';

{TODO -cFix : Added an option in the "Customized Items" tab to specify a custom reject notice for emails blocked by the attachment filter. Previously the same rejection notice used by the keyword filter was also used by the attachment filter}


// New to VersionNumber = '4.7.4.230';

{TODO -cFix : Added SpamFilter.ini option SkipSPFWhenCheckingFromHeader - allows to optionally skip the SPF test of the From: header if using the option (disabled by default) to also test the email in the "From:" header in addition to the MAIL FROM against all blacklists/whitelistss/SPF (the SPF standard only recommends to test the MAIL FROM, not the From: header)}


// New to VersionNumber = '4.7.3.225';

{TODO -cFix : Regression error bug introduced in 4.7.2.184 that re-introduced a bug fixed in 4.7.1.150: If a DNS server is offline, SpamFilter will not cause a timeout and switch to a backup DNS server if one was specified}


// New to VersionNumber = '4.7.3.224';

{TODO -cNew : Included the testing of the SPF filter even for addresses specified in the "From:" header, if the new option in 4.7.2.217 is selected (Added an option to include the email address in the "From:" header) }

{TODO -cFix : Bug introduced in 4.7.3.219. The SPF test to incorrectly fail under one scenario: The sender specifies the "mx" mechanism in the SPF TXT record, and the IP address of the sender does not match the IP of the host in the MX record (thus failing the MX record check in SPF). The bug causes the entire SPF check to fail if the above scenario occurs, even if other entries in the SPF test would cause it to pass.}

{TODO -cFix : Some database errors while editing the filtering settings using SpamFilter's GUI could cause application crash screen to appear on screen even if they are harmless-non-critical}


// New to VersionNumber = '4.7.3.222';

{TODO -cNew : When using the option to include the email address in the "From:" header introduced in v4.7.3.217, we are now also comparing the From: header when testing the entries in the AutoWhitelistForceDelivery file}

{TODO -cFix : When using the option to include the email address in the "From:" header introduced in v4.7.3.217, SpamFilter was not logging the fact that the email was being whitelisted when the sender matched due to the From: hedaer}

{TODO -cFix : During an SPF filter TXT record check, if the TXT record is longer than 255 characters, and the DNS server used by SpamFilter has a bug that causes it to respond with a malformed packet (which will be flagged as such during a Wireshark capture), this can cause SpamFilter to max out the CPU and freeze after a few such queries}


// New to VersionNumber = '4.7.3.219';

{TODO -cFix : During an MX filter record check, if a DNS servers does not allow SpamFilter to query it, SpamFilter incorrectly treats the error "DNS Server Reports Query Refused Error" as a "DNS Server Reports Query Name Error". As the latter (Query Name Error) indicates a non-existent record, the "Query Refused Error" makes SpamFilter think the MX record does not exist and thus the email is incorrectly rejected}


// New to VersionNumber = '4.7.3.218';

{TODO -cFix : Fixed issue with Bayesian filter introduced in 4.7.3.217: Exception occurred during GetMessageTokens: Error in regular expression at offset 2: unrecognized character after (? or (?- 00b2da8e SpamFilterSvc.exe System.RegularExpressionsCore}


// New to VersionNumber = '4.7.3.217';

{TODO -cNew : Added an option to include the email address in the "From:" header, in addition to the real envelope email address specified in the MAIL FROM command, when checking the sender's email agains the "FROM Emails" blacklist, the "Domains" blacklist, the "Excluded FROM Emails" whitelist, and the "Excluded Domains / IPs" whitelist}

{TODO -cNew : Replaced the internal RegEx library to improve speed and stability for keyword searches. RegEx search speed has dramatically increased by 16x. Sites using tens of thousands of RegEx expressions or more can see a tenfold reduction in CPU usage}

{TODO -cNew : Simiarly to how it's done for the "Subject:" header, added support for keyword blacklist/whitelist searches targeted specifically to the "From:" and the "To" headers by prefixing the keywords with "EmailFrom:" or "EmailTo", as well as to search thru ALL the headers by prefixing the keyword with "Headers:". For ex a RegEx keyword of EmailFrom:(test[1,2].com) will search for the RegEx expression "test[1,2]" in the email's "From:" hedaer}

{TODO -cFix : Some RegEx expressions with greedy serch options could cause stack overflows in SpamFilter if searching thru email content that casues the RegEX to peform a huge number of recursions to find the text.}

{TODO -cFix : A bug was introduced in build 4.7.2.210 that prevented SpamFilter from starting up unless a database connection had been established}


// New to VersionNumber = '4.7.2.210';

{TODO -cFix : In the 64bit version of SpamFilter, under high traffic scenarios (> 750,000 emails/day) SpamFilter could had times identify the wrong country when performing the IP-to-country database lookups}

{TODO -cNew : The "FROM Emails" blacklist now supports the syntax: sender@domain.com|recipient@yourdomain.com. Wildcards are supported for both the sender and the recipient. This will cause the sender (sender@domain.com) to be blacklisted only if one of the recipient in the email is recipient@yourdomain.com}


// New to VersionNumber = '4.7.2.209';

{TODO -cFix : Fixed following (harmless) exception being logged very rarely: Exception occurred during TSpamFilterForm.PipeDataAvailable: EAccessViolation: Access violation at address 0000000000412900}

{TODO -cFix : Fixed following error occurring very rarely on the x64 version of SpamFilter: Exception occurred during DoIPChecksOnConnect: Access violation at address 0000000000D6D766 in module 'SpamFilter.exe'}

{TODO -cNew : When setting AutoWhiteListForceDeliveryEnabled=0, we know also prevent SpamFilter from adding an entry in the WL_AutoWhiteListForceDelivery.txt when delivering emails out of the quarantine, in addition to not checking that file for the whitelist on inbound emails}


// New to VersionNumber = '4.7.2.206';

{TODO -cNew : Added new option in SpamFilter.ini - ForwardAllPostmasterEmailsTo. If an email address is specified for that key, then SpamFilter will accept all emails adddressed to <postmaster> to comply with RFC5321/2821, and will forward them, unfiltered, to the email address specified there}


// New to VersionNumber = '4.7.2.205';

{TODO -cFix : SpamFilter was not able to download antivirus definition updates if using the newer OpenSSL libraries 1.0.2g or higher}


// New to VersionNumber = '4.7.2.204';

{TODO -cFix : Due to a bug in the CYREN SDK which caused SpamFilter to crash/freeze a few seconds after attempting to update the antivirus definition files and logging the message "AV engine - Reloading dat files", we moved the CYREN antivirus definition file update process to an external application (SpamFilterAVUpdate.exe) launched by SpamFilter}


// New to VersionNumber = '4.7.2.197';

{TODO -cNew : Improved the speed with which SpamFilter every minute checks the updates to whitelist/blacklists by 300%}

{TODO -cFix : Wait for all antivirus scans to finish before updating the antivirus definitions on disk and in memory in an attempt to prevent rare application freezes}


// New to VersionNumber = '4.7.2.196';

{TODO -cNew : Added the attachment filename to the message parts that SpamFilter scans for keywords, allowing the blacklisting/whitelisting of attachment filenames using keywords as well}


// New to VersionNumber = '4.7.2.195';

{TODO -cFix : The demo version of SpamFilter would fail to start if Windows was configured for certain non-US date/time formats}


// New to VersionNumber = '4.7.2.194';

{TODO -cFix : The emails by country stats where not visible from the new SpamFilter_Service_GUI.exe}


// New to VersionNumber = '4.7.2.193';

{TODO -cNew : If an email was rejected when it exceeded the MaxIncomingMsgSize, this rejection reason was not being logged in the logfile. It now appears as "EMail from [sender_email] exceeds the max msg size - rejected"}

{TODO -cFix : When a client uses the XFORWARD command, sends an email, and then sends a RSET command, SpamFilter continues to retain the new IP specified in the XFORWARD command. This casues suubsequent XFORWARD commands in the same SMTP session to fail as the new IP is not in the AuthIPsForXforwardCommand list}

{TODO -cFix : Minor GUI fix for an incorrect help hint in max lines in subject}


// New to VersionNumber = '4.7.2.192';

{TODO -cFix : Due to a regression error, this fix was not actually added to 4.7.2.191 - it is now - The new GUI (SpamFilter_Service_GUI.exe), when closed, was deleting the contents of the GreyListAllowed.txt file. SpamFilter's service regenerates that file every 5 minutes, so there was no impact, but if the SpamFilter_Service_GUI.exe was launched when SpamFilter was not running, then the contents of the GreyListAllowed.txt file would be permanently lost}


// New to VersionNumber = '4.7.2.191';

{TODO -cFix : The new GUI (SpamFilter_Service_GUI.exe), when closed, was deleting the contents of the GreyListAllowed.txt file. SpamFilter's service regenerates that file every 5 minutes, so there was no impact, but if the SpamFilter_Service_GUI.exe was launched when SpamFilter was not running, then the contents of the GreyListAllowed.txt file would be permanently lost}

{TODO -cNew : Added support for the use of a customer-hosted webservice as an alternative to the the "Authorized TO" whitelist in SpamFilter to query for a valid recipient emails.}


// New to VersionNumber = '4.7.2.184';

{TODO -cNew : Added a new filter - the 0-Day domain filter. If a domain has been registered within the last nn days (30 by default), any emails containing that domain name will be heavily weighed as spam.}

{TODO -cNew : SpamFilter Enterprise only - added two new fields in the tbl_FilterSettings table for 0-Day filter and for a new upcoming option - DNSWLBypassForMX_RevDNS_SPF}

{TODO -cFix : In some cases depending on the internet provider DNS lookups could result in several timeouts (logged as DNS Error:TimedOut). This was due a different DNS library that was used starting from v4.7.1.145. Issue is now resolved.}

{TODO -cFix : If the antivirus plugin experienced a problem when updating the virus definitions, a deadlock condition could occurr in SpamFilter causing it to stop processing further emails as they were all waiting to be scanned by the malfunctioning antivirus plugin}


// New to VersionNumber = '4.7.1.173';

{TODO -cFix : We are now automatically checking for updated versions of the GeoIP.dat file and download it automatically if a newer version is available}

{TODO -cFix : If a keyword line consists of multiple keywords separated by commans, and one of the keywords contained the ::NEGATE option, instead of applying to that specific individual keywords, the ::NEGATE option was incorrectly beeing carried over to all the remaining keywords on that same line}

{TODO -cFix : In SpamFilter Enterprise, the grid of local domains can now be sorted again by ID or domain name}

{TODO -cFix : Changed some locking parameters during the update of the antivirus definitions to avoid possible problems during the reloading of the AV definitions}


// New to VersionNumber = '4.7.1.172';

{TODO -cFix : Attempted to remove a 164byte memory leak that may occur when scanning an email with the antivirus plugin}

{TODO -cFix : Removed memory leaks that occurred every time the Settings dialog was used to save settings in SpamFilter via the GUI}

{TODO -cNew : Added option MemoryEmptyWorkingSetEveryNhours=24 in SpamFilter.ini file to routinely force Windows to empty SpamFilter's RAM working set to reduce memory usage}

{TODO -cNew : SpamFilter now logs the Subject of emails being received in the logfile}

{TODO -cFix : Upgraded compiler used to build SpamFilter in order to try eliminating compiler-induced bugs that affected the stability of the 64bit version of SpamFilter}


// New to VersionNumber = '4.7.1.154';

{TODO -cFix : Attempted to resolve SpamFilter stopping processing emails when reloading antivirus definition files having the last line in the logs containing the entry "AV engine - Reloading dat files"}


// New to VersionNumber = '4.7.1.151';

{TODO -cFix : The new SpamFilter_Service_GUI would freeze if it was used to manually start SpamFilter's service}

{TODO -cNew : Modified the SpamFilter.exe and SpamFilter_Service_GUI.exe manifests to automatically startup with elevated administrative privileges on Windows 2008 and higher}


// New to VersionNumber = '4.7.1.150';

{TODO -cFix : If a DNS server is offline, SpamFilter will not cause a timeout and switch to a backup DNS server if one was specified}

{TODO -cFix : The AuthIPsForXforwardCommand parameter only took a single IP, now it takes a list of IPs that can contain wildcards and/or CIDRs}

{TODO -cFix : Resolved a one-time error Exception occurred during GetCurrDNSServer that occurred when removing a DNS server while SpamFilter was running}

{TODO -cFix : Removed a memory leak (size depended on the original email size) that occurred every time an NDR was sent}

{TODO -cFix : Removed a memory leak (36 bytes) that occurred every time an SMTP AUTH attempt was made}

{TODO -cFix : Attempt to resolve sudden, unlogged crashes of the 64bit version of SpamFilter}


// New to VersionNumber = '4.7.1.144';

{TODO -cFix : Removed a memory leak occurring every 5 seconds during ChecktblReloadTableInfo}

{TODO -cNew : Added support for the either the CIDR notation or wildcard entries using a final .0 (ex. 192.198.255.0) in the DoNotAddIPToHoneypot SpamFilter.ini option}

{TODO -cFix : A specific malformed image file could cause SpamFilter to crash if the image filter is enabled}


// New to VersionNumber = '4.7.1.142';

{TODO -cFix : In SpamFilter Enterprise the new GUI (SpamFilter_Service_GUI) would not see blacklist/whitelist changes if they were made directly to the database or by using the service's own GUI or from the standalone SpamFilter.exe application. The changes were only seen when re-launching the GUI}


// New to VersionNumber = '4.7.1.141';

{TODO -cNew : Improved support for the XFORWARD extension by not advertising XFORWARD in EHLO response unless IP is listed in AuthIPsForXforwardCommand}


// New to VersionNumber = '4.7.1.139';

{TODO -cNew : Added support for the XFORWARD extension - this allows the placement of a server/appliance that processes inbound emails *before* they reach SpamFilter, and thru the use of XFORWARD the appliance/server can provide SpamFilter with the original IP address of the sender, allowing SpamFilter to perform all the IP-based tests on that original IP}

{TODO -cNew : Added the parameter AuthIPsForXforwardCommand=aaa.bbb.ccc.ddd in the SpamFilter.ini file to restrict the use of XFORWARD only to the IPs listed in AuthIPsForXforwardCommand}

{TODO -cFix : Bug introduced starting from 4.6.1.119 - After outputting the 667 SMTP error code when rejecting an email due to one of the content filters, SpamFilter was also outputting the extra line "554 4.2.0  Transaction failed"}

{TODO -cNew : To reduce lingering connections SpamFilter is now forcing the disconnect of the remote server when an email is rejected to one of the content-based filters}

{TODO -cNew : Added the logging of the "From" header also indicating whether it matches or mismatches the email specified in the MAIL FROM command}

{TODO -cNew : Added the parameter ProcessListEvenIfAutoWhiteListForceDeliveryDisabled==0 in the SpamFilter.ini to allow SpamFilter to still allow SpamFilter to process the entries in the WL_AutoWhiteListForceDelivery even if AutoWhiteListForceDeliveryEnabled=0}


// New to VersionNumber = '4.7.0.136';

{TODO -cFix : Attempted to fix SpamFilter freezes that seem to occurr after several of these errors have been logged: Listen Exception occurred: Socket Error # 10054 -- Connection reset by peer}


// New to VersionNumber = '4.7.0.135';

{TODO -cFix : SpamFilter could crash under a DDOS attack with malformed packet sequences during the initial TCP handshake process}

{TODO -cFix : In cases of high numbers of concurrent SMTP connections, we significantly lowered the CPU usage by SpamFilter's service when the separate new GUI was running as well}

{TODO -cNew : Added support for PFS (Perfect Forward Security) ciphers in SSL/TLS}

{TODO -cNew : Added the new SSLCipherList parameter in the SpamFilter.ini file to allow customization of the TLS/SSL ciphers that SpamFilter will support}

{TODO -cNew : Added the new DisableSSLv3=1 parameter in the SpamFilter.ini to specifically disable SSLv3 support.}

{TODO -cNew : The existing parameter DisableTLSv1_0=0 now only disables TLS v1.0, it does not disable SSLv3 as well like it did in previous versions }


// New to VersionNumber = '4.7.0.133';

{TODO -cNew : Added to the logfile the filename and threadID for each email that will be processed in the re-delivery queue"}


// New to VersionNumber = '4.7.0.132';

{TODO -cNew : Added more details when exceptions are logged in the activity logfile}

{TODO -cFix : Changed the way stagnant/lingering SMTP connections are disconnected making it more reliable, and removed the now unneeded IdleDisconnectMinutesTimeout and TerminateIdleThreadsFrequency parameters in the SpamFilter.ini file}

{TODO -cNew : Added to the logfile the email address causing the rejection for "EmailTO is not in AuthorizedTOEmail list"}


// New to VersionNumber = '4.7.0.130';

{TODO -cNew : Re-added external madExcept exception handling to automate creation of reports for crashes}

{TODO -cNew : Added the logging of full stack traces during Exceptions to help determine location of the errors}


// New to VersionNumber = '4.7.0.129';

{TODO -cFix : Improved the reliability of the delivery of the NDR (non-delivery receipts) in case the destination SMTP server is experiencing temporary issues and is either offline or replies with SMTP error codes in the 400 range}

{TODO -cFix : Removed these items from the SpamFilter.ini files: QueueIfDestinationError400, QueueIfDestinationError500, DoNotQueueIfReadTimeout and replaced them with similar entries with slightly different names and these default values: QueueIfDestinationError4xy=1, QueueIfDestinationError5xy=0, DoQueueIfReadTimeout=1 as a bug in a previous version may have caused the value for QueueIfDestinationError400 to get inverted, so we're replacing them all just in case}


// New to VersionNumber = '4.7.0.126';

{TODO -cFix : Issue introduced when added unicode support in 4.6.1.119 - The domain filter matrix file AllowedDomainFilterMatrix.txt was being encoded in UTF16, but SpamFilter expected it in UTF8. This affected the GUI only - the filter matrix was still being used correctly by SpamFilter. The file is now back to UTF8}


// New to VersionNumber = '4.7.0.125';

{TODO -cFix : No changes in SpamFilter since 4.7.0.124, but added a database patch to add missing cascading constraints that prevented records from tbl_Filtersettings & tblBL_Countries to be deleted when their corresponding domain from deleted from the list of local domain names}


// New to VersionNumber = '4.7.0.124';

{TODO -cNew : It is now possible to launch a separate SpamFilter's GUI (SpamFilter_Service_GUI.exe) on a standard user's desktop to view and control SpamFilter's service that is running in the background}


// New to VersionNumber = '4.6.1.121';

{TODO -cFix : Resolved an bug introduced in build 4.6.1.119 that would no disconnect a client after they issued the QUIT command at the end of the SMTP session}


// New to VersionNumber = '4.6.1.120';

{TODO -cFix : The SPF filter would incorrectly block an email if the SPF record in DNS for the sender's domain has an include directive, and in turn the domain being included does not publish an SPF record in their DNS}


// New to VersionNumber = '4.6.1.119';

{TODO -cNew : Added an X-SF-AuthUser header to indicate the authenticated user who sent the email. Option is customizeable via SpamFilter.ini using parameters XAuthUserString and AddHeaderForAuthUsers}

{TODO -cFix : When added in 4.5.0.62 the ability to search for keywords in the decoded subject, SpamFilter stopped matching for keywords against the raw, undecoded subject. We now search for keyword in both the decoded and the raw Subject lines}

{TODO -cFix : Rare issue could cause an entry in the greylistallowed.txt to be removed if the line above it contained a manually entered entry whicih contains a wildcard *and* the line below it contains a subsctring which matches the above wildcard}

{TODO -cNew : Added support for unicode characters in the blacklist/whitelists, also changing the logfile to unicode UTF16 Little Endian encoding and some database fields to utf8 charset}

{TODO -cNew : Upgraded compiler to improve the internal memory manager and the TCP components }


// New to VersionNumber = '4.6.0.117';

{TODO -cNew : Added logging of the numeric SMTP error code when the destination SMTP server rejects forwarded emails}

{TODO -cNew : Added logging of the port (e.x. 25) for inbound connections}

{TODO -cFix : If the private key for the SSL certificate used by SpamFilter has a password, the SSL listener would be unable to use the certificate. The TLS functionality was not being affected.}


// New to VersionNumber = '4.6.0.116';

{TODO -cNew : In addition to the username, SpamFilter will add to the logfile the password and the IP used for an unsuccessful AUTH LOGIN attempt to help determine intentional password guessing attempts or user error}

{TODO -cNew : Added parameter LogInvalidPasswords to SpamFilter.ini file to prevent logging of password during failed AUTH LOGIN attempts}


// New to VersionNumber = '4.6.0.113';

{TODO -cFix : If a domain has multiple destination SMTP servers (for failover), and the first destination server is online but rejects the email with a 400 or 500 error, SpamFilter would not be able to forward the email to the failover server and would log an event "EMail from: user1@.... to: user2@.... --  was returned to sender - server error - Already connected.". This issue does not happen if the primary destination SMTP server is completely offline and not accepting SMTP connections}


// New to VersionNumber = '4.6.0.112';

{TODO -cNew : Added support for x64 bit operating systems}

{TODO -cNew : Replaced the Norman antivirus plugin with one developed in partnership with F-Prot and CYREN}

{TODO -cNew : Added new parameter to customize location of queue directory in SpamFilter.ini - QueuePath}

{TODO -cNew : To more easily identify compromised accounts used in AUTH LOGIN, SpamFilter will add an info warning when the AUTH LOGIN account does not match the MAIL FROM account, ex:  User authenticated with AUTH LOGIN - info - MAILFROM <> AUTHLOGIN - johnZ@logsat.com }

{TODO -cNew : Added parameters AUTHLOGINEmailsInIntervalMax and AUTHLOGINEmailsInIntervalMinutes in .ini file to limit number of emails during a time interval that can be sent by AUTH LOGIN authenticated users during the same SMTP session}

{TODO -cFix : When adding a prefix in the Subject line for tagged emails, SpamFilter was corrupting subjects that had UTF encodings for foreign charsets}

{TODO -cFix : improperly formatted passwd file for Unix authentication would cause: Exception occurred during AuthUserInPasswd: List index out of bounds (0)}

{TODO -cFix : If TLS is disabled via EnableTLSSupport option in .ini file, but a buggy remote SMTP server like MIcrosoft's hotmail and live.com mailservers will attempt to use the STARTTLS command anyways (violating RFC...), there could be an access violation in the OpenSSL SSLEAY32.DLL which will prevent the email to be delivered.}

{TODO -cFix : Removed external madExcept exception handling to automate creation of reports for crashes}


// New to VersionNumber = '4.5.1.99';

{TODO -cNew : Added parameter MaxSPFAllowedLoops in SpamFilter.ini file. This parameter used to be hardcoded to "10" in SpamFilter and it is not customizable. It is used to limit the number of nested include directives allowed in an SPF query. Used to limit the risk of DoS attacks using malicious SPF DNS records}


// New to VersionNumber = '4.5.1.98';

{TODO -cNew : Added new behavior - if email is blocked due to one of the "FROM Emails", or "TO Emails", or "Domains" blacklists, and that blacklist is configured for "Do not quarantine rejected emails from this blacklist", then the SMTP session is disconnected immediately after the RCPR TO command, without waiting to receive the body of the email yet}


// New to VersionNumber = '4.5.1.97';

{TODO -cFix : Solved an issue present only in v4.5.1.96 - When receiving emails with multiple recipients, with recipients belonging to multiple domains managed by SpamFilter, and one or more domains had different customized destination SMTP servers, v4.5.1.96 was leaving behind in the queue files named Indy_some_random_GUID_-0.~tmp.rcpt}

// New to VersionNumber = '4.5.1.96';

{TODO -cFix : Sometimes emails in the process of being delivered where also being caught by the routine process that delivers queued emails that are waiting delivery due to an unavailable destination SMTP server. This would result in "server error - Invalid Message file" errors being logged by SpamFilter, but no other side-effects as the re-delivery attempt by the queue process would fail}

{TODO -cNew : Added a new RejectID (29) when emails are rejected due to: -- The message content is malformed and not RFC compliant (line length too long) - email cannot be processed }


// New to VersionNumber = '4.5.1.95';

{TODO -cFix : If there is a DNS timeout while checking "Reject if sender domain has invalid MX record" filter, SpamFilter may interpret this timeout as a non-existent MX record, thus possibly incorrectly blocking the email}

// New to VersionNumber = '4.5.1.94';

{TODO -cFix : Filenames with a space in them may not be stopped by the attachment extension filter}


// New to VersionNumber = '4.5.1.93';

{TODO -cFix : Regression error from 4.5.1.92 - Removed errors in the logfile occurring when an antivirus activation has been added to the SpamFilter.ini file, but the antivirus plugin files have not been installed yet}


// New to VersionNumber = '4.5.1.92';

{TODO -cFix : Greatly improved performance of the HTML parser that scans HTML text for keywords. Complex and large ( > 2MB ) HTML emails could spike the CPU of a processor for a few minutes}

{TODO -cFix : SpamFilter could fail to automatically update some of the DLL files used by the antivirus plugin (which are updated very infrequently). Improved the reliability of the AV definition files as well in cae of corrupted downloads}


// New to VersionNumber = '4.5.1.90';

{TODO -cNew : Modified the behavior when forwarding emails to the destination SMTP server, when the dest server advertises as being able to support TLS, but with the remote server having TLS being misconfigured and outputting a 4xx error. Previously SpamFilter would send a bounce NDR email to the sender in this case, now SpamFilter will continue trying to send the email without TLS in the same session if allowed by the remote SMTP server}


// New to VersionNumber = '4.5.1.89';

{TODO -cFix : In some emails with multiple recipients, when one or more of the recipients were invalid, depending on the order in which they were specified and on the timing of how quickly they were rejected by the destination SMTP server, SpamFilter could fail to use the new VerifyRCPTTOForCleanEmails feature to verify recipeints before disconnecting the remote SMTP server and thus avoiding having to send a separate NDR}

{TODO -cNew : Implemented the new SFDE - SpamFilter Distributed Emails database filter}

{TODO -cFix : In some rare cases, DNS failures due to faulty DNS servers during the SPF check could cause the SPF test to fail and the emails to be rejected}

{TODO -cFix : The results in the "Test SPF" button on the filter settings dialog would only display 3 lines of detailed SPF results}


// New to VersionNumber = '4.5.0.81';

{TODO -cFix : Solved an update issue due to new antivirus definition file format in the optional Norman antivirus}


// New to VersionNumber = '4.5.0.80';

{TODO -cFix : 2nd (successful) attempt to solve issue that was not entirely fixed by v4.5.0.79}


// New to VersionNumber = '4.5.0.79';

{TODO -cFix : Sometimes clicking on the "minimize" button in SpamFilter's window could cause the window to be minimized to the task bar but without being able to restore it afterwards}


// New to VersionNumber = '4.5.0.78';

{TODO -cNew : Added support for outbound use of TLS if supported by the destination SMTP server}

{TODO -cFix : The "Flush Now" button to flush the outboud queue in case it was stuck was not working properly and was not actually flushing the queue}


// New to VersionNumber = '4.5.0.77';

{TODO -cFix : Solved an issue introduced from v4.5.0.0 that could have caused SpamFilter to freeze and/or terminate abrubtly}

{TODO -cFix : Emails Blocked counter was not increasing when emails were sent to NULL due to a keyword match}

{TODO -cNew : If the destination SMTP server is offline, SpamFilter does a better (faster) job in determining that recipients cannot be tested against the remote server, thus accepting inbound clean emails more quickly}


// New to VersionNumber = '4.5.0.71';

{TODO -cFix : Under high CPU, SpamFilter could use more than the allotted number of concurrent outbound connections when processing the \SpamFilter\queue folder, which is hardcoded to be equel to one half the maximum number of inbound connections}

{TODO -cNew : Updated the internal compiler library for the TCP components}

{TODO -cNew : Added new watchdog thread that catastrophically tries to terminate SpamFilter's service if it stops accepting emails. This forces Windows to auto-restart SpamFilter's service minimizing downtime}


// New to VersionNumber = '4.5.0.68';

{TODO -cNew : Changed the SMTP error code sent for the "Too many connections" from 300 to 421 - 300 was used starting from SpamFilter v4.5}

{TODO -cNew : When using the HideXSFBlockedKeywordsReasonHeader setting, we are now storing the matched keywords in the tblQuarantine anyways even if hiding them in the email header}

{TODO -cFix : In some cases, depending on the MIME encoding used, SpamFilter was missing to detect some attachments when testing the attachment filename filter}

{TODO -cFix : Oprimizations added to SFE v4.5.0.66 cased a bug in the standard version, resulting in some emails being rejected with the error "no relay allowed or % found in FROM address"}

{TODO -cFix : When decoding an inbound email, SpamFilter could store a temporary file in the system's %TEMP% folder instead of the \SpamFilter\temp folder}


// New to VersionNumber = '4.5.0.66';

{TODO -cNew : In SpamFilter Enterprise, for domains that custom settings, if a Blacklist/Whitelists is configured to "Use default settings from ALL DOMAINS", instead of creating a copy of the blacklist and load it in RAM, SFE will use the same copy that is already loaded. With thousands of domains configured this way, this helps reduce the RAM usage}

{TODO -cNew : In SpamFilter Enterprise, optimized database triggers to greatly improve performance when adding/removing large quantities of entries from the blacklists (100s of KB in size}

{TODO -cNew : Standardized the %EmailFrom% and %EmailTo% placeholders used in the customizable NDR responses to remove any "<" and ">" brackets that may be present in the email addresses}


// New to VersionNumber = '4.5.0.64';

{TODO -cFix : Attempt to catch errors that may occur within the OpenSSL libraries and may cause errors similar to "Exception occurred during GetConnectionsFromIP: Access violation at address 0610FFBA in module 'ssleay32.dll'"}


// New to VersionNumber = '4.5.0.63';

{TODO -cFix : Re-introduced a fix from 4.1.2.813 that was regressed in v4.5.x: Better job in handling attachment filenames in malformed emails}


// New to VersionNumber = '4.5.0.62';

{TODO -cNew : SpamFilter is now decoding the subject before checking it for keywords}

{TODO -cFix : If using the new VerifyRCPTTOForCleanEmails, and the destination SMTP server rejected a recipient with a 4xx error rather than a more normal 5xx error, SpamFilter would not relay back to the sender the 4xx error caused by the RCPT TO}


// New to VersionNumber = '4.5.0.60';

{TODO -cFix : Solved an issue introduced in 4.5.0.58 that could prevent emails from being forwarded to the destination SMTP servers }

{TODO -cFix : Starting from SpamFilter v4.5, the NDR emails could be incorrectly generated using a MAIL FROM that is not NULL, but rather containing the customized error email address that should only appear in the "From:" headers }


// New to VersionNumber = '4.5.0.58';

{TODO -cFix : Possible and rare GUI lockup when saving SpamFilter.ini settings }

{TODO -cNew : Added DisableTLSv1_0 option in SpamFilter.ini file to optionally disable TLS v1.0 leaving support only for TLS v1.1 and TLS v1.2 }

{TODO -cNew : SpamFilter will now scan for viruses all individual attachments separately in addition to the entire email. This allows more chances to Norman A/V to detect infected files }

{TODO -cFix : Sorting the quarantine grid is now possible again }

{TODO -cFix : When added the VerifyRCPTTOForCleanEmails option in v4.2.4.486, if the dest SMTP server was taking over 10 seconds to acknowledge the recipient, SpamFilter could not be seing any rejections from the dest SMTP server and accept the recipient anyways, causing an NDR to be sent via email rather than rejecting it in the SMTP stream }

{TODO -cNew : Added paramenter RCPTTOVerificationTimeout in SpamFilter.ini file }


// New to VersionNumber = '4.5.0.54';

{TODO -cFix : If using the new GUI style with the new option UseNewGUIStyle from build 4.5.049, the activity log monitor could be blank }


// New to VersionNumber = '4.5.0.53';

{TODO -cFix : Rolled back this change in 4.5.0.32 as it caused DB settings not to be reloaded with multiple SFE servers if one was offline: Reduced the startup time for the Enterprise version by one fourth}

{TODO -cNew : Moved the SMTP listeners to separate threads to improve reliability}

{TODO -cNew : Rmoved TLSv1 support and only allow TLSv1.2 connections to avoid using less secure protocols}


// New to VersionNumber = '4.5.0.49';

{TODO -cNew : Added parameter UseNewGUIStyle in SpamFilter.ini file}

{TODO -cNew : Added option in Authorized TO whitelist to specify an custom SMTP destination server for any one entry in the list}


// New to VersionNumber = '4.5.0.36';

{TODO -cFix : Malformed emails with a line length > 16,384 (greatly exceeding the RFC max line length of 1000) were rejected without outputting an error code in the SMTP transmission, thus causing retries from the remote server}

{TODO -cFix : Exception occurred during TUpdateCountriesListViewThread.DoUpdatelistView: Access violation at address 0055DC00 in module 'SpamFilter.exe'. Read of address 00000004}

{TODO -cFix : Updated the OpenSSL libraries to v1.0.1c}


// New to VersionNumber = '4.5.0.32';

{TODO -cNew : Reduced the startup time for the Enterprise version by one fourth}

{TODO -cFix : Error in SpamFilter Enterprise when importing the file-based settings into Enterprise}


// New to VersionNumber = '4.5.0.31';

{TODO -cFix : The setting AutoWhiteListForceDeliveryEnabled in the Filters.ini file is not being read and defaults to "1" all the time}


// New to VersionNumber = '4.5.0.30';

{TODO -cNew : Re-added external madExcept exception handling to automate creation of reports for crashes and to automatically restart SpamFilter in case of failures. This was disabled during the beta period}

{TODO -cNew : Added logging for exceptions that could occur in the SMTP session before SpamFilter could process an email, as for example when a received line is over 16,384 characters long (RFC imposes a limit of 1,024 characters...)}


// New to VersionNumber = '4.5.0.28-beta';

{TODO -cNew : Added support for accented characters in keywords}


// New to VersionNumber = '4.5.0.26-beta';

{TODO -cFix : The recent memory optimizations prevented SpamFilter from searching for keywords the various extra "X-SF-" headers that SpamFilter adds to emails (assuming the option to scan email headers has been enabled) }

{TODO -cFix : The antivirus plugin caused SpamFilter to crash severely without even logging entries in the event log if attachments had specific filename formats}


// New to VersionNumber = '4.5.0.24-beta';

{TODO -cFix : If a 3rd party application placed an email for delivery in the SpamFilter\queue folder, instead of the 5 characters "<CR><LF>.<CR><LF>" end-of-email indicator, SpamFilter incorrectly sent only the last 3 characters ".<CR><LF>" . As this is not the correct end-of-email indicator, this would result in a timeout if the 3rd party email did not contain an extra <CR><LF> before the <CR><LF>.<CR><LF>}


// New to VersionNumber = '4.5.0.23-beta';

{TODO -cFix : If an SMTP server used the CHUNKING extension to send an email, the sequence <CR><LF>. (which is legitimate when using CHUNKING) was not replaced by <CR><LF>.. (with an extra dot) when forwarding the email to the destination SMTP server}

{TODO -cFix : Removed support for the CHUNKING extension to solve the issue above, as fixing the bug would require re-decoding every line nullifying the benefits of CHUNKING}

{TODO -cFix : A memory leak was likely present when using CHUNKING with large emails}

{TODO -cNew : Added better support for detecting SQL Azure databases}

{TODO -cFix : Improved detection of pre-existing database patches when reinstalling SpamFilter using an existing database}


// New to VersionNumber = '4.5.0.21-beta';

{TODO -cNew : Removed option SpoolQueueFilesToMemory from SpamFilter.ini to improve memory usage. Messages won't be spooled in RAM enymore as performance on disk was very similar and RAM usge much lower}

{TODO -cNew : Changed logging of SSL connection errors (usually due to client using older unsafe SSL v2) to be indicated as generic harmless errors rather than "exceptions"}

{TODO -cNew : Greatly improved the memory usage and lowered the CPU load when processing large emails}

{TODO -cNew : Added experimental support for SQL Azure by using a modified \SpamFilter\Database\MicrosoftSQL.sql script}

{TODO -cFix : Better detection of SQL Server databases, i.e. SQL Azure}

{TODO -cFix : Minor GUI font fixes in Database settings tab}

{TODO -cFix : If the SpamFilter.ini option DoNotQueueIfReadTimeout was set to false, it was also affecting the option QueueIfDestinationError400 by overriding it and setting it to false as well}

{TODO -cFix : Unusual circumstance - If an email is detected as spam, and if it was whitelisted, and it had multipe recipients, and one or more recipients are rejected by the deestination SMTP server (forcing SpamFilter to send a 550 as it's undeliverable to some recipients), if all this is true SpamFilter adds the original rejection noticed in the SMTP response that includes the list of undeliverable email addresses}

{TODO -cFix : When rejecting an email with mutliple recipients because some of the recipients are rejected by the destination SMTP server, SpamFilter was only listing the first rejected email in the rejection notice - the others were sent on different lines separated by <CRLF> sequences that some SMTP servers were not recognizing}

{TODO -cNew : Improved the debug view to see the complete SMTP transactions with selected remote locations, including timestamps and thread IDs}


// New to VersionNumber = '4.5.0.11-beta';

{TODO -cFix : The Euro symbol was substituted by a ? in some specific email encodings}

{TODO -cFix : Rare crash that contains the following events being logged last:  "Listen Exception occurred:" & "Warning - Error! Removing Listener threads"}


// New to VersionNumber = '4.5.0.9-beta';

{TODO -cNew : Added parameter EnableTLSSupport=1 in SpamFilter.ini file to enable/disable TLS support (enabled by default)}

{TODO -cFix : Same issue fixed in 4.5.0.7 was affecting the email's Subject as well}

{TODO -cFix : SpamFilter could crash with high volume traffic when writing to the logfile/greylistforcedelivery text files}


// New to VersionNumber = '4.5.0.7-beta';

{TODO -cFix : If an email's headers and/or content are not RFC-comliant, especially in regards to 7bit/8bit char encodings (affecting accents) and the Content-Type and Content-Transfer-Encoding headers, SpamFilter was auto-fixing them. However we should not alter the original email's format for any reason, so this issue was fixed}


// New to VersionNumber = '4.5.0.6-beta';

{TODO -cFix : SSL connections were not working on the SSL port (if configured)}

{DONE -cFix : Corrupt attachments - Emails that had a <CRLF>. sequence were not replaced by <CRLF>.. following RFC rules}

{TODO -cFix : If a malformed email with 8bit char encodings (affecting mainly accented characters in other languages) was missing the Content-type header, SpamFilter was adding the header "Content-Type: text/plain; charset=us-ascii" as RFC requires that Content-Type if not indicated otherwise. However SpamFilter is not supposed to alter the original messages, so this was considered a bug}

{DONE -cFix : Incorrectly adding two similar "Received" headers when processing incoming emails}

{DONE -cFix : The "From:" header was being re-written if improperly formatted. As in the attachment issue above, SpamFilter is not supposed to alter the original email no matter what}

{DONE -cFix : If the activity logfile was being locked by an external process, SpamFilter could crash}


// New to VersionNumber = '4.5.0.5-beta';

{TODO -cFix : If X-Priority header contained a value not allowed by RFC (allowed values are in 1-5 range) the email would not be accepted due to error: Exception occurred during RECEIVEMESSAGE: ( 1 2 2a 2b 3 3a 4 5 6 7 8 9 11 12 13 15 16 17 18 18 20b 20c 20d 20e 29 30 31 32 33 53 55 56 62 63 111) Integer overflow}

{TODO -cFix : Sometime when shutting down SpamFilter it was necessary to manually kill the SpamFilter.exe/SpamFilterSvc.exe process to force the termination}


// New to VersionNumber = '4.5.0.3-beta';

{TODO -cFix : SpamFilter 4.5.0.1-beta crashes when application minimized if running as a service (does not affect standalone mode) }

{TODO -cFix : Old pre-beta bug - the "Tag Spam in Subject and Deliver" option was not adding the spam tag in the Subject line }

{TODO -cFix : 4.5.0.1-beta was not performign the IP-to-Country lookups correctly, idenifying as N/A most countries }

{TODO -cFix : 4.5.0.1-beta was corrupting the display of the antivirus definition files timstamps on the "Antivirus" tab. This issue affected the GUI display only, not the A/V functionality }

{TODO -cNew Added option to add a [WHITELISTED] prefix in whitelisted emails (prefix is customizeabled via WhitelistTagPrefix parameter in SpamFilter.ini file)}

{TODO -cNew During the live view of the Activity Log, we are skipping the display of some lines of scrolling text in case of large concurrent connections or if the CPU is high, as to not needlessly overload the server with GUI updates. The logfile on disk will always contain the full log activity anyways}


// New to VersionNumber = '4.5.0.1-beta';

{TODO -cNew beta version for the new SpamFilter 5.0. Features a completely redesigned internal SMTP engine that uses fibers instead of threads to improve performance. Features support for more features, as TLS and IPv6 (not complete yet). Support for a separate GUI to better manage SpamFilter's service under Windows 2008 and RDP will be available in SpamFilter 5.0}


// New to VersionNumber = '4.2.4.851';

{TODO -cFix : When setting the MaxMsgSizeForKeywordScan (indicated in KB) parameter in the SpamFilter.ini file, the Bayesian filter was reading it as bytes rather than KB, thus often causing the Bayesian filter to skip checking the incoming email if larger that a smaller size than intended}


// New to VersionNumber = '4.2.4.850';

{TODO -cFix : When sending NDR emails, the FQDN used in the HELO command when forwarding emails is not set to the same one used in the FQDN Welcome banner}


// New to VersionNumber = '4.2.4.849';

{TODO -cFix If the GreyListAllowed.txt is manually modified and wildcarded subnets are added, if a wildcard entry is added and one or more IPs within that subnet already existed in the file, the wildcard entry may be ignored}


// New to VersionNumber = '4.2.4.848';

{TODO -cFix If a sender in the same SMTP session (1) authenticates against SpamFilter using SMTP AUTH, then (2) sends emails to some users not being unfiltered, and then (3) sends another email which triggered one of the filters to a whitelisted user who was configured with a "tag and deliver" option - when all of the above scenarios occurred, SpamFilter "forgot" the user was authenticated and tagged the email as spam}

{TODO -cFix Updated the Setup.exe installer and default SpamFilter.ini file in Win32 directory by removing the now defunct dnsrbl.net MAPS server }


// New to VersionNumber = '4.2.4.846';

{TODO -cFix If not using the new default VerifyRCPTTOForCleanEmails=1, SpamFilter could in some cases return a 250 OK successful reply to the remote sender server even if the destination SMTP server returned a 5xx or a 4xx message when forwarding an email to it}


// New to VersionNumber = '4.2.4.845';

{TODO -cFix An out-of-memory error prevented the processing of emails over about 300MB in size}

{TODO -cNew With SpamFilter Enterprise, even if the database is offline/unavailable, we are now able to save all the settings that are stored in the SpamFilter.ini file }


// New to VersionNumber = '4.2.4.844';

{TODO -cFix Changed the internal process to insert quarantined emails into database to better handle low-memory situations"}

{TODO -cNew On startup, if running as a service, SpamFilter modifies the service properties to enable the automatic built-inWindows service recovery options so that they restart the SpamFilter service upon crash after 60 seconds"}

{TODO -cNew Modified built-in crash detector so that, in case of exceptions, SpamFilter does not continue on errors, but rather causes SpamFilter to "crash" and automatically restart. If SpamFilter is running as a service, the above service recovery options will cause the SpamFilter service to automatically restart. This should help in having SpamFilter self-recover from serious exceptions "}


// New to VersionNumber = '4.2.4.843';

{TODO -cFix Moved the connection stats from the SpamFilter.ini file to a separate SpamFilterStats.ini file in an attempt to solve an issue that can cause the SpamFilter.ini file to become 0 bytes in size"}


// New to VersionNumber = '4.2.4.842';

{TODO -cFix Solved issues that caused these errors to be logged: "Exception occurred during RECEIVEMESSAGE GetCompletedRCPTTO - continuing processing"}

{TODO -cFix The filterBase64html filter fails to stop base64 text and html attachments if the Content-Type header with the base64 indicator also contains a charset indicator on the same line}

{TODO -cNew Added support for a new parameter in the SpamFilter.ini file - VerifyRCPTTOForCleanEmails=1}


// New to VersionNumber = '4.2.4.840';

{TODO -cNew Added support for a new parameter in the SpamFilter.ini file to control if the NDR will contain the entire original email or only its headers: IncludeOriginalMessageOnNDR=1}


// New to VersionNumber = '4.2.4.839';

{TODO -cFix SpamFilter sent a line with STARTTLS in the EHLO response, even though TLS is not supported, causing some remote SMTP server to attempt a TLS connection which could eventually result in a disconnect without the messgage being received}


// New to VersionNumber = '4.2.4.838';

{TODO -cFix SpamFilter Enterprise would not recognize the "SQL Native Client" (SQLNCLI.1) provider for Microsoft SQL Server}


// New to VersionNumber = '4.2.4.837';

{TODO -cFix If a DNS server reports the error "Query Server Error" during the MX filter test, this would cause the MX test to fail even if the MX record was valid}


// New to VersionNumber = '4.2.4.836';

{TODO -cNew Added support for improperly formatted SPF records that contain multiple v=spf1 mechanisms (such records were trated as malformed and the SPF check was skipped before)}

{TODO -cFix SpamFilter Enterprise, when using a MySQL database, would needlessly reload all blacklists/whitelists settings for a domain when only a single blacklist/whitelist was changed. MSSQL was (correctly) only reloading the settings for the list that was modified}

{TODO -cNew Enabled SSL v3 when downloading antivirus definition updates}

{TODO -cNew Added entry XServerBanner in SpamFilter.ini file to customize the X-Server header}

{TODO -cNew Added entry HideXSFBlockedKeywordsReasonHeader in SpamFilter.ini file to prevent display of triggered blacklist keywords in headers}


// New to VersionNumber = '4.2.4.834';

{TODO -cNew Changed the file path (but not the server name) used by SpamFilter to download updated antiviru definition files}

{TODO -cFix In SpamFilter Enterprise, fixed an issue with the MySQL triggers that prevented domains having customized settings from seeing changes made to the default black/white lists, if the domain was configured to have one of its black/whitelists inherit the settings from the "ALL DOMAINS"}


// New to VersionNumber = '4.2.4.832';

{TODO -cFix Fixed errors introduced in 4.2.4.831: Exception occurred during RECEIVEMESSAGE: ( 1 2 2b 3 3a 4 5 6 7 8 9 11 12 13 15 16 17 18 18b 20b 20c 29 30 31 32 33 53 55 56 62 63 64 65 66 671 68 69 70 71 72 73 74 75 76a 76b 111) Access violation at address 0065542C in module 'SpamFilterSvc.exe'. Read of address 00000128}


// New to VersionNumber = '4.2.4.831';

{TODO -cFix Changed the SMTP error code sent for the "Too many connections" from 221 to 421}

{TODO -cFix Added more safeguards to prevent issues within the process that checks the tblReloadTable, which could cause SpamFilter Enterprise to stop seing changes made to other tables while it's running}

{TODO -cNew Added new parameter in SpamFilter.ini file for SpamFilter Enterprise: ChecktblReloadTableMaxRunTimeMinutes}


// New to VersionNumber = '4.2.4.830';

{TODO -cNew To avoid backscatter, if an incoming email passes all filtering rules, but cannot be forwarded (ex. mailbox full, non-existent user), SpamFilter maintains open the incoming remote connection until it can verify with the destination server that the email can be delivered. If not, a 5xx error is output forcing the remote server to generate the NDR, rather than having SpamFilter send an NDR notification email}

{TODO -cFix If the DoNotSendNDROnQuarantine=1 is set, an NDR could still incorrectly be generated if (1) the email had multipe recipients and (2) at least one of the recipients is whitelisted}

{TODO -cFix The "Settings" dialog in SpamFilter Enterprise would occasionally loose the database connectivity and would display empty domains when the SpamFilter.ini file is updated in the background}


// New to VersionNumber = '4.1.3.827';

{TODO -cFix Solved issue that could cause Access Violations in cases of emails containing a specific malformed header}

{TODO -cFix Added new option "TerminateIdleThreadsFrequency" in SpamFilter.ini file to control the frequency used to terminate lingering idle threads. Used to increase this parameter in installations where this causes SpamFilter to stop processing incoming emails}

{TODO -cFix The new feature to handle default values for specific whitelists/blacklists in domains that are configured to be customized without inheriting default values would not propagate changes to the "ALL DOMAINS" lists unless SpamFilter was restarted}

{TODO -cNew Allowed redirects to be followed for future new handling of the antivirus updates}


// New to VersionNumber = '4.1.3.824';

{TODO -cFix If a spam email was whitelisted by the AutoWhiteListForceDelivery filter, and SpamFilter was configured with any of the TAG and deliver options, the email would still be tagged even if whitelisted}


// New to VersionNumber = '4.1.3.823';

{TODO -cFix Reducing the number of times the background TerminateIdleThreads process executes from once a minute to once an hour}


// New to VersionNumber = '4.1.3.822';

{TODO -cNew Added ability in SpamFilter Enterprise to have, for domains with customized settings, the ability to configure each blacklist/whitelist so that it inherits the default values for ALL DOMAINS}

{TODO -cFix Fixed issue that would cause SpamFilterto crash when scanning for viruses emails with specific malformed headers}


// New to VersionNumber = '4.1.2.820';

{TODO -cFix Fixed issue where (invalid) NULL characters in the email's body or headers where transformed by SpamFilter (violating RFC) into "." (0x2E) characters causing emails/headers to be truncated }


// New to VersionNumber = '4.1.2.819';

{TODO -cNew Increased the priority for the "not in Authorized TO" filter moving it up in the list of applied filters}


// New to VersionNumber = '4.1.2.818';

{TODO -cNew The keyword searches are now performed also against all MIME headers, allowing to search for example the Content-Type, charset, Content-Transfer-Encoding, Content-Disposition and filename}

{TODO -cNew Added option to import list of domains into SpamFilter Enterprise from a text list}

{TODO -cNew Added the destination SMTP port when logging information about forwarded emails}


// New to VersionNumber = '4.1.2.816';

{TODO -cFix : In SpamFilter Enterprise, blacklist/whitelist keywords were being trimmed of trailing/leading spaces, preventing users from searching words prefixed/suffixed by a space}


// New to VersionNumber = '4.1.2.815';

{TODO -cFix : better handling of exceptions of the kind "Exception occurred during RECEIVEMESSAGE" to try to deliver the messages anyways even if they are malformed}

{TODO -cFix : SpamFilter Enterprise could crash when duplicate domains are added via the Settings GUI}

{TODO -cNew : Added ability to specify wildcards in GreyListAllowed.txt file to exlcude large number of subnets from greylisting}


// New to VersionNumber = '4.1.2.813';

{TODO -cFix : Better job in handling attachment filenames in malformed emails}{TODO -cNew : Added entries in activity logfile to log startup mode (service/application) and to log the remote IP before country lookups are performed}


// New to VersionNumber = '4.1.2.812';

{TODO -cFix : Fixed Errors similar to: Exception occurred during DoIPtoCountry (82.112.146.131): Access violation at address 00405514 in module 'SpamFilterSvc.exe'. Read of address 000FFFF8 caused by recent updates in the GeoIP.dat database format}


// New to VersionNumber = '4.1.2.811';

{TODO -cFix : Regression error present in build 4.1.2.810 only - sometimes the trailing tags in the various whitelists/blacklists could cause incorrect tags to be applied to other filter's blacklist/whitelists}


// New to VersionNumber = '4.1.2.810';

{TODO -cNew : Added support to specify multiple RegEx expressions separated by commas, just as regular keywords can be separated by commas - has the effect of specifying "AND" rules for RegEx. Note that a "Standard non-RegEx keyword must be specified first for SpamFilter to recognize this syntax. For example: X-SF,([a-z]), ([0-9])    }

{TODO -cNew : Added support ::NEGATE suffix in blacklist keywords - causes a MATCH if the keyword is NOT present, or causes a MISMATCH if the keyword IS present}

{TODO -cFix : Removed ability to scan for text and images in PDFs files due to instability of PDF library}

{TODO -cFix : Replaced memory manager used by compiler as the old one could cause (very rarely) crashes in SpamFilter without any errors being logged in the activity logs}


// New to VersionNumber = '4.1.2.808';

{TODO -cFix : Loops in the "redirect" mechanism of an SPF record could cause SpamFilter to crash}


// New to VersionNumber = '4.1.2.807';

{TODO -cFix : A documentation bug in the new PDF library caused a "Trial Expired" popup to appear when scanning PDF files due to incorrect licensing activation procedure}


// New to VersionNumber = '4.1.2.806';

{TODO -cFix : Prevented the MX record filter form failing when the DNS server replies with an error with the following event being logged: Invalid MX record - DNS Server Reports Query Server Error}


// New to VersionNumber = '4.1.2.805';

{TODO -cFix : Fixed Access Violation errors when handling certain types of PDF files. Updated PDF library used by compiler which now uses external DLLs for PDF functionality}


// New to VersionNumber = '4.1.2.804';

{TODO -cFix : The IPCacheBlacklist was incorrectly blocking IPs that were a substring of an existing entry - ex if the cache contained 192.168.123.234, the IP 192.168.123.2 was being incorrectly blocked as well}


// New to VersionNumber = '4.1.2.803';

{TODO -cFix : The antivirus plugin is not blocking emails for whitelisted recipients (via autowhitelistforce-delivery or "Whitelisted Email TO")}

{TODO -cFix : Drastically improved SpamFilter ISP "standard" load time by a factor of x1000 when first importing large list of local domain names (10,000+ entries) }

{TODO -cNew : Skipping the addition to the AutoWhiteListForceDelivery of entries where the mail_from = rcpt_to emails to reduce the chance of inadvertently whielisting all emails with a fake "from" address matching the recipient}


// New to VersionNumber = '4.1.2.796';

{TODO -cNew : Added support for SMTP Authentication for Apple iPhone and Mac Mail.app}

{TODO -cNew : created new filter that resolves to IPs all URLs embedded in emails, and then performs a lookup of those IPs in the MAPS RBL blacklists}

{TODO -cFix : Attempt to solve customer-reported issue that in very rare cases could cause high CPU when attempting and failing to download antivirus def file: NvcMacro.def}


// New to VersionNumber = '4.0.1.786';

{TODO -cFix : When a remote IP exceeded maximum number of RCPT TO, the additional email would be quarantined but the sender was not being forcefully disconnected}


// New to VersionNumber = '4.0.1.785';

{TODO -cFix : The "Do not quarantine" option for the SFDC filter was not functioning - emails were quarantined even if the setting was configured for "do not quarantine"}

{TODO -cNew : Added the option to install the web-based quarantine website directly from the SpamFilter Installer}


// New to VersionNumber = '4.0.1.784';

{TODO -cFix : The X-Rejection-Reason header was not added to spam emails when there was only recipient, and this address was in the Whitelisted EmailTO whitelist}


// New to VersionNumber = '4.0.1.783';

{TODO -cFix : The SPF settings for neutral, softfail and fail had the opposite values instead of the recommended defaults for new installations of SpamFilter in empty directories}

{TODO -cFix : During new installations, in SpamFilter ISP the "Custom Domain Filters" was not available due to an empty value in the "LocalDomainsFilterMatrixFileName" entry in the SpamFilter.ini file}


// New to VersionNumber = '4.0.1.782';

{TODO -cNew : There was a limit of 65535 emails that could be queued in the quarantine and the queue directories in case the DB or the destination SMTP servers were offline. Stopped using the Windows API to create temp files and are now using GUIDs to eliminate this limitation}


// New to VersionNumber = '4.0.1.780';

{TODO -cNew : Added the ability to specify additional failover destination SMTP servers for each domain}


// New to VersionNumber = '4.0.0.775';

{TODO -cFix : Eliminated the extra "--" when logging the event "Bypassed all rules for: user@domain.com --" in the activity log}

{TODO -cNew : Use Windows Messages to update the real-time activity log in GUI rather than creating a new thread to update each line in the GUI memo control. Done to improve performance in high traffic sites and to reduce number of threads used}


// New to VersionNumber = '4.0.0.774';

{TODO -cFix : When sending an NDR notification for a non-deliverable email, if the NDR also has delivery problems, these problems were note being logged, making it appear in the logs as if the NDR was successful}

{TODO -cFix : SpamFilter could, in very rare occasions, freeze when processing the cleanup of the IP Blacklist Cache Limbo blacklist and the GreyList blacklist}

{TODO -cNew : Removed the logging of specific IPs being removed from the IP blacklist and limbo caches to improve performance and reduce risk of delays}


// New to VersionNumber = '4.0.0.773';

{TODO -cNew : Allowed to specify future dates in the GreyListAllowed.txt files so that IPs can be stored in the list for years without expiring}


// New to VersionNumber = '4.0.0.772';

{TODO -cFix : "Invalid  Header Id nnnn" DNS errors could cause valid MX record lookups to fail}

{TODO -cFix : Exception occurred during AddToQuarantineThreadDone: Access violation at address 0042396A}


// New to VersionNumber = '4.0.0.770';

{TODO -cFix : When a "tag and deliver" option is seleced, and the recipient is whitelisted (or the email is delivered because of the AutoWhiteListForceDelivery list) the email is still tagged as spam when forwarding it}

{TODO -cFix : The ResponseGreyList parameter in the SpamFilter.ini is not being honored to provide a customized response}

{TODO -cFix : Fixed various minor bugs in the handling of spam emails when various tag and deliver options are activated and recipients are whitelisted/AutoWhiteListed}

{TODO -cNew : The greylist filter is now disabled by default when upgrading from SpamFilter v3.5, or from a versions where the greylist settings were not present in the SpamFilter.ini file}

{TODO -cNew : Modified the tblbl_IPs table in SpamFilter Enterprise - increased IP filed's length from 15 to 18 to accommodate CIDR suffix}

{TODO -cNew : Added the option to use CIDR notation in the IP blacklist}


// New to VersionNumber = '4.0.0.768';

{TODO -cFix : Bug introduced in SFE build 767 (loads 20x - 40x faster...) caused incorrect destination SMTP servers and ports to be entered instead of NULL values in the _LocalDomains.txt file, causing incorrect destination SMTP servers }


// New to VersionNumber = '4.0.0.767';

{TODO -cNew : New filter/feature is now available - Greylisting}

{TODO -cNew : New filter is available - SFDC - SpamFilter Distributed Content}

{TODO -cNew : SpamFilter Enterprise loads 20x - 40x faster when tables contain 100,000+ rows }

{TODO -cFix : The MaxMsgSizeForSpamFiltering option is sometimes ignored if an email fails the IP-based tests}

{TODO -cFix : In SpamFilter Enterprise - added fields: SFDC_NetworkReliability and SFDCForceDelete to tbl_filtersettings table}


// New to VersionNumber = '3.5.4.730';

{TODO -cFix : The keyword filter (along with the Bayesian/Image/SURBL filters) is not being checked when there is a single whitelisted recipient in an email, and the recipient has one of the :tag options set}

{TODO -cFix : When using the "Customized Filter Settings" to disable the keyword filter for a domain, it's possible that the " Detected blank HTML email with specified attachment" filter could be triggered incorrectly}

{TODO -cFix : When emails have multiple html parts, and the last one in the email is blank, it's possible that the " Detected blank HTML email with specified attachment" filter could be triggered incorrectly}


// New to VersionNumber = '3.5.4.728';

{TODO -cNew : Added header 'X-SF-Originating-IP' in emails to additionally log the peer IP address}

{TODO -cNew : Added option MaxMsgSizeForSpamFiltering in SpamFilter.ini file to whitelist emails that are larger than a specific size}

{TODO -cNew : Added option ForwardAllSPAMtoEmailAddress in SpamFilter.ini file to forward all spam emails to an alternate email address}

{TODO -cFix : The IPCacheLimboTimeTrigger paramter in the SpamFilter.ini file was not being honored, and IPs were removed from the limbo cache after 1 minute}


// New to VersionNumber = '3.5.4.726';

{TODO -cFix : Exception occurred during TTerminateIdleThreads.Execute: Access violation at address 004A6BA6 in module 'SpamFilterSvc.exe'. Read of address FFFFFFB4}

{TODO -cNew : Changed the interval on which the quarantine queue is retried form 1 minute to 5 minutes}


// New to VersionNumber = '3.5.4.725'; {TODO -cNew : Implemented a queue for quarantined emails in case the database is offline. The archival process is queued and will resume when the DB is back online}


// New to VersionNumber = '3.5.4.718'; {TODO -cNew : Downgraded the HTTP protocol used for SFDB lookup requests from 1.1 to 1.0 to actually increase thruput, and removed unnecessary http client headers}


// New to VersionNumber = '3.5.4.716';

{TODO -cNew : Added SPAMTagHeader option in SpamFilter.ini file to allow customization of the X-SF-SPAM:Y header that is optionally added to spam emails}

{TODO -cFix : Scenario: (1) a valid email with multiple recipients, (2) where a recipient-sender combination is in the AutoWhiteListForceDelivery whitelist. Results - (1) email would be delivered to whitelisted recipient only, and (2) SpamFilter would not prefix the SMTP error with a 5xx error code, thus causing the remote server to send several retries}


// New to VersionNumber = '3.5.4.714';

{TODO -cFix : "Exception occurred during TCleanupIPCachesThread.Execute: '39337.7094639699' is not a valid floating point value" and "Exception occurred during AddIPToIPCacheLimbo: '39342,4181879861' is not a valid floating point value"}


// New to VersionNumber = '3.5.4.713';

{TODO -cFix : If DoNotSendNDROnQuarantine=0, and a spam email with multiple recipients arrives, and a recipient is whitelisted, SpamFilter would not prefix the SMTP error with a 5xx error code, thus causing the remote server to sende several retries}

{TODO -cFix : Errors: Blacklist cache - starting cleanup -- Exception occurred during TCleanupIPCachesThread.Execute: '39332.5030980671' is not a valid floating point value}


// New to VersionNumber = '3.5.4.711';

{TODO -cFix : Another issue with the “tag” option that prevents the “splitting” of an email so that it is only delivered to the tagged recipient, and instead causes the email to be tagged for some of the other users}

{TODO -cNew : Added to logfile entries for the MAIL FROM and RCPT TO commands as soon as they are received via SMTP}


// New to VersionNumber = '3.5.4.710';

{TODO -cFix : When a recipient was whitelisted, in some cases SpamFilter would also whitelist additional, separate emails that could have been sent during the same SMTP session}

{TODO -cFix : If a recipient was whitelisted, additional "regular" recipients would be correctly rejected, but an incorrect logfile entry was added stating that they were being also whitelisted (which in fact they were not) }


// New to VersionNumber = '3.5.4.709';

{TODO -cFix : Reduced the number of memory leaks in PDF scans if documents use Cross-reference-Streams}

{TODO -cFix : When forwarding emails to the destination SMTP server, if such server rejected the emails due to a mailbox full error, SpamFilter would instead send an NDR with the incorrect bounce message "The following recipients are unknown"}

{TODO -cFix : Introduced bug in build 700 - If any filter is configured to "tag spam and deliver", SpamFilter was not processing spam with the following filters: keywords, Bayesian, images/PDF, SURBL. All other filters were applied correctly}

{TODO -cFix : Exception occurred during TestForReject: Access violation at address 0063F52E}


// New to VersionNumber = '3.5.4.707';

{TODO -cNew : Added option in SpamFilter.ini file: HideXSFWhiteListedReasonHeader}

{TODO -cNew : In SFE, SpamFilter is able to now startup even if the database server is unavailable}

{TODO -cFix : If a spam email is split so that it is delivered for whitelisted recipients but blocked for the rest, it was still being stored in the quarantine database for all receipients, including the whitelisted ones}

{TODO -cFix : The HTML parser used to detect blank html emails was expecting legitimate opening and closing html tags to define text, and was ignoring any text outside these tags. This could cause very short html emails to appear blank if they were not following correct html syntax. We are now auto-fixing the invalid html code to be less restrictive}


// New to VersionNumber = '3.5.4.705';

{TODO -cNew : "Exception occurred during FindMatchInStringList: Invalid pointer operation" errors could cause problems with the reloading of some black / white lists}

{TODO -cNew : Added the logging of the filesize when reloading the black / white list files}

{TODO -cNew : The SURBL blacklist is not being automatically sorted to allow user-defined order}

{TODO -cNew : Added options in [authentication settings] of SpamFilter.ini: ActiveDirectoryAuthAppendDefaultDomain, ActiveDirectoryAuthPrefixDefaultDomain to automatically append or prefix the default domain when authenticating users via SMTP AUTH}


// New to VersionNumber = '3.5.4.704';

{TODO -cNew : Added the capability to stop blank HTML emails, in addition to blank plain text emails, with specified attachments}

{TODO -cNew : The "Exceeded Max spaces in Subject" filter now has its own separate RejectID in the tblMsgs table (ID=25) }

{TODO -cNew : Added new parameter in SpamFilter.ini to specify the threshold that defines what a blank email is : MaxLettersToConsiderEmailBlank}


// New to VersionNumber = '3.5.4.702';

{TODO -cNew : Due to memory leak issues and Access Violations in the PDF library used, by default SpamFilter will not scan for images within PDF files by setting the value SpamPDFMaxPagesToScan=0 in the SpamFilter.ini file. If this setting was enabled in a previous version however, it will remain enabled after upgrading to this version}

{TODO -cFix : Due to memory leak issues and Access Violations in the PDF library used, we have been forced to remove the ability to scan keywords within PDF files. We may re-add this functionality at a later time when a more stable PDF library is available}

{TODO -cNew : Added new option DisconnectOnNonAuthorizedTO in SpamFilter.ini file to change the default behavior that forces a disconnect when a recipient is specified that is not in the AuthorizedTO list}

{TODO -cNew : Added new option DoNotDeleteExpiredEmailsFromQuarantine in SpamFilter.ini to prevent SpamFilter to perform the routine cleanup of the quarantine database by deleting old archived emails. Useful if admins want to perform their own cleanup}


// New to VersionNumber = '3.5.4.701';

{TODO -cNew : Replaced the option "BlockBlankEmailsWithPDFAttachments" added to build 3.5.4.700 with the more generic "BlockBlankEmailsWithAttachments". This allows admins to block blank emails containing any one of a list of unwanted attachments}


// New to VersionNumber = '3.5.4.700';

{TODO -cNew : PDF image filter now scans, in addition to previous content types, also "application/octet-stream"}

{TODO -cNew : SpamFilter will now block emails that contain an empty, blank body and also a PDF attachment, the new setting in the .ini file is on by default: BlockBlankEmailsWithPDFAttachments=true}

{TODO -cFix : If an email session was whitelisted due to a whitelist keyword match, if further emails were sent during the same SMTP session, they could be blacklisted due to a falase keyword match}

{TODO -cFix : If any filter is configured to "tag spam and deliver", SpamFilter was not processing spam with the following filters: keywords, Bayesian, images/PDF, SURBL. All other filters were applied correctly}

{TODO -cFix : In SFE, when importing the file-based settings to a domain, or when copying the settings from one domain to another, the SPF settings pass/fail were being inverted}

{TODO -cNew : If SpamFilter was installed over an evaluation version, sometimes the "Received" header in the retail version could still contain the words "Unlicensed Evaluation Copy" leftover from the eval version in the SpamFilter.ini file}

{TODO -cNew : If SpamPDFMaxPagesToScan is zero, PDF attachments are now skipped without even attempting to open them. This allows to completely disable the PDF filtering functionality}

{TODO -cFix : In SFE, sometimes new entries were not being added to the autowhitelist table}


// New to VersionNumber = '3.5.4.697';

{TODO -cNew : PDF image filter now scans, in addition to content type "application/pdf", also "application/x-pdf"}

{TODO -cNew : The keywords filter now also scans for text contained within PDF attachments}

{TODO -cNew : In SFE, a new table "tbl_logindomains" is added and a new field is added to the tbl_logins to prepare for the new ASP-based web interface for SFE}

{TODO -cFix : Exception occurred during DumpLog: Cannot open file "nnnnnnn.log". The process cannot access the file because it is being used by another process}

{TODO -cFix : Spam emails with multiple recipients, where one of them caused a match in the AutoWhiteListedForceDelivery, were not split correctly and were delivered to every recipient instead of just the whitelisted one}

{TODO -cFix : Warning: error (1) scanning PDF for spam - Access violation at address 005BEEED in module 'SpamFilterSvc.exe'}

{TODO -cFix : Exception occurred during TTerminateIdleThreads.Execute: Invalid floating point operation}

{TODO -cFix : Exception occurred during TTerminateIdleThreads.Execute: Access violation at address 0040A753 in module 'SpamFilterSvc.exe'}


// New to VersionNumber = '3.5.4.692';

{TODO -cNew : Added new filter to scan images within PDF attachments for spam}

{TODO -cFix : In SFE, triggers in the database were not identifying multiple updates to the same tables, if they occurred within 5 seconds of each other. A DB patch SQL script will be automatically downloaded and executed once by SpamFilter upon startup. The script will delete all triggers and recreate them}

{TODO -cFix : In installations with multiple SpamFilter Enterprise, changes made directly against the database may not be visible by other servers}

{TODO -cFix : A specific set of circusmtances involving "unfiltered Emails" with the "tag" or "tagsubject" modifiers, and multiple, separate emails within the same SMTP session, could cause emails to be delivered to some unfiltered users if a recipient is in the unfiltered list}

{TODO -cFix : Exception occurred during TFilterObject.ReadFilterFromFile (2): Access violation at address 00401981 in module 'SpamFilterSvc.exe'.}

{TODO -cFix : SpamFilter Enteprise GUI *appeared* frozen during startup when processing several customized domain. The ativity windows now scrolls to show current status during startup}

{TODO -cNew : When adding duplicate entries in the blacklist/whitelists, SpamFilter will automatically remove the duplicate from the database as well, not just in the GUI as before (except for MAPS and Keywords blacklists)}


// New to VersionNumber = '3.5.3.679';

{TODO -cFix : The :tag and :tagsubject were incorrectly tagging emails with multiple recipients}

{TODO -cFix : Emails blocked by the attachment filter were stored in the quarantine DB with a rejectID of 13 instead of 23}

{TODO -cFix : Added 100ms delay when saving corpus database files to try avoiding error "corpus.db copy of files not exist - exiting"}

{TODO -cNew : Added customized response item for emails rejected by the Honeypot filters}


// New to VersionNumber = '3.5.3.678';

{TODO -cNew : Added options in SpamFilter.ini file to specify a proxy setting for all of SpamFilter's HTTP / HTTPS web requests}

{TODO -cFix : The "Manual SFDB check button was not retrieving correct SFDB results}

{TODO -cFix : Fixed a regression error introduced in 3.5.3.674 that prevented the "Import File Settings" in SpamFilter Enteprise from working}


// New to VersionNumber = '3.5.3.677';

{TODO -cNew : SpamFilter Enterprise was deleting and re-inserting the entire AutoWhiteListForceDelivery list in the database when appending a new entry, possibly causing data loss in high traffic scenarios. This process was rewritten to append the new individual records only}


// New to VersionNumber = '3.5.3.676';

{TODO -cFix : Portions of the customizable response ResponseBlacklistedMAPS could become embedded in the ResponseBlacklistedSURBL response}

{TODO -cFix : A special combination of tagged/untagged addresses in the "Unfiltered Emails" and "AuthorizedTO" lists could cause emails stuck in the outgoing queue folder}

{TODO -cNew : Upgraded SMTP AUTH to use SSLv3 - Allows Mozilla Thunderbird v2.0 to use SSL without errors regarding older/unsecure versions of SSL}


// New to VersionNumber = '3.5.3.674';

{TODO -cFix : Very rare memory leak when scanning jpeg images for spam occurring when scanning multiple thousands of simultaneous images}

{TODO -cFix : Browse button does not work the "Path to password file" under Unix User Authentication tab}

{TODO -cFix : Discovered more regional locale settings that prevented the SpamFilter Enterprise Activation code to be validated}


// New to VersionNumber = '3.5.3.672';

{TODO -cFix : Regression error introduced in v3.5.3.662 - during the MAIL FROM when forwarding emails, SpamFilter was not enclosing the email address in brackets "<" and ">"}

{TODO -cNew : The Eval version of SpamFilter now delivers emails via the quarantine web interface}

{TODO -cFix : Sometimes adding a new domain in SFE could cause the filter settings to be reloaded in memory for no reason every minute}

{TODO -cFix : Certain regional locale settings prevented the SpamFilter Enterprise Activation code to be validated}

{TODO -cFix : Redesigned internal operations to attempt avoiding GUI freezes and lockups}

{TODO -cNew : Spam Emails with multiple recipients, where one is in the "Unfiltered Emails" with the :TAG option, will now be split so they get delivered to the unfiltered address}

{TODO -cNew : In SFE, entering duplicate domains in the local domains via the GUI could cause SpamFilter to crash}

{TODO -cNew : In SFI, duplicate entries are now automatically removed from the blacklist/whitelists files}

{TODO -cFix : Exception occurred during PerformPostStartupTasks_TrayIconVisible: Cannot create shell notification icon}

{TODO -cNew : The MAPS and keywords blacklist entries are not automatically sorted anymore, allowing users to specify the lookup order}

{TODO -cNew : Added new customizable error response if recipient is not in AuthorizedTO whitelist - ResponseNotInAuthorizedTO}


// New to VersionNumber = '3.5.3.665';

{TODO -cFix : If a recipient is in the WhiteListedTO list, and, during the same SMTP session, the sender remains connected and sends further emails to other recipients, they were also incorrectly whitelisted}

{TODO -cFix : In SFE, using MySQL, if the connection to the DB was terminated (timeouts and/or MySQL going down), the SFE Domain List could be blank and require a restart to be visible again}

{TODO -cNew : SpamFilter performs stricter checking on MAPS RBL results to ensure a valid positive only if the response address via DNS is in the 127.0.x.x network}

{TODO -cFix : In SFE, the "Custom Domain Filters" tab should have been hidden}

{TODO -cFix : Occasional "freezes" of SpamFilter's GUI that would also halt the processing of incoming messages}

{TODO -cFix : Emails in the "Unfiltered Email" list would be delivered correctly, but the email was also being stored, by mistake, in the quarantine database}

{TODO -cFix : The event of an email whitelisted because of the "Unfiltered Email" list was not logged in the logfile}


// New to VersionNumber = '3.5.3.662';

{TODO -cFix : MAIL FROM COMMAND like the following can cause MX filter failures: MAIL FROM:<user@domain.com> SIZE=3521 AUTH=user@domain.com}

{TODO -cNew : Updated documentation and manual to indicate problems with MySQL ODBC Connector v3.51.14}


// New to VersionNumber = '3.5.3.661';

{TODO -cFix : In SFI the Blacklist IPs GUI control is not keeping the text file that has been selected via the dialog box}

{TODO -cFix : If the SFI configuration blacklist/whitelist files contained the ' (quote) illegal character in domains/emails, this would cause the SFE "Import File Settings" functionality to fail}

{TODO -cFix : The country list view control did not allow to sort the data by clicking on the columns}

{TODO -cNew : Added more tests to detect DNS failures when checking SPF, SURBL and MAPS servers, and rotate DNS servers accordingly}


// New to VersionNumber = '3.5.3.660';

{TODO -cFix : In SFI the Whitelist EmailsTO GUI control is not keeping the text file that has been selected via the dialog box}

{TODO -cFix : In SFI there "Customized Filters" option is not working correctly}

{TODO -cFix : Exception occurred during TTerminateIdleThreads.Execute: '4/17/2007 4:03:34 PM' is not a valid date and time}


// New to VersionNumber = '3.5.3.659';

{TODO -cFix : Rare bug caused: Exception occurred during TDlgThread.Execute: Invalid floating point operation}


// New to VersionNumber = '3.5.3.658';

{TODO -cFix : Country blacklist was not working properly in both SFE and SFI}


// New to VersionNumber = '3.5.3.657';

{TODO -cFix : SpamFilter could send duplicate emails when executing the process that runs every 60 minutes that reprocesses emails in the queue, as it could re-send emails that were being delivered at that exact moment}

{TODO -cNew : Added support for AUTH PLAIN in addition to AUTH LOGIN}

{TODO -cFix : Solved issues with the quarantine grid display that prevented the quarantine list form being displayed with MS Access and Access Violations with MySQL }

{TODO -cNew : Added "ScanAllHeaders" option in SpamFilter.ini file to also scan all headers for keywords}

{TODO -cFix : Emails with multiple recipients on multiple domains - if different domains have different destination SMTP servers, the email is split and delivered to each server correctly}

{TODO -cFix : Converted all queries in lowercase to fix issues with Unix-based MySQL databases}

{TODO -cNew : Emails with multiple recipients - When a recipient is in the "Unfiltered Emails", now a spam email is only delivered to them, and not everyone else}

{TODO -cNew : Added the X-SF-WhiteListedReason header for emails that are force-delivered from quarantine}

{TODO -cFix : SFE Only - Added option to DROP Enterprise tables before creating them via the database scripts}

{TODO -cNew : SpamFilter Enteprise - major changes in how filter settings for individual domains can be customized}

{TODO -cNew : SpamFilter Enteprise - Most filter settings are stored in a database for easier remote administration}

{TODO -cNew : Added XServerHeader option in SpamFilter.ini to customize the product name inserted in the "Received:" header added by SpamFilter}

{TODO -cNew : The FQDN used in the HELO command when forwarding emails is not set to the same one used in the FQDN Welcome banner}

{TODO -cNew : Added option to customize error response in case of empty MAIL FROM}


// New to VersionNumber = '3.1.3.618';

{TODO -cFix : "server error - Read Timeout" errors could cause duplicate emails to be forwarded to the destination SMTP server}

{TODO -cNew : Added DoNotQueueIfReadTimeout option in SpamFilter.ini file}


// New to VersionNumber = '3.1.3.616';

{TODO -cFix : Exception occurred during TDeliverQuarantineThread.Execute: [MySQL][ODBC 3.51 Driver][mysqld-4.1.12-nt]Lost connection to MySQL server during query}

{TODO -cFix : Exception occurred during TDeliverQuarantineThread.Execute: [MySQL][ODBC 3.51 Driver][mysqld-4.1.12-nt]MySQL server has gone away}

{TODO -cFix : Better error handling on SURBL lookup errors}


// New to VersionNumber = '3.1.3.615';

{TODO -cFix : When disabling MaxIncomingMsgSize by setting it to 0, SpamFilter would reject emails that specify a valid SIZE parameter in the RCPT TO}

{TODO -cNew : Changed the antivirus definition file download URL to optimize performance}


// New to VersionNumber = '3.1.3.614';

{TODO -cFix : Certain RegEx keyword could cause CPU to peak for several seconds, and result in a large number of incoming connections}


// New to VersionNumber = '3.1.3.613';

{TODO -cFix : Database errors were not being logged if they occurred during the process that forces the delivery of emails from the quarantine database}

{TODO -cFix : Fixed errors: Exception occurred during KillPeerThread: Access violation}

{TODO -cFix : Removed a small memory leak occurring during the execution of the "TerminateIdleThread" tasks}


// New to VersionNumber = '3.1.3.611';

{TODO -cFix : Fixed errors: Exception occurred during TDeleteExpiredQuarantineThread.Execute: [MySQL][ODBC 3.51 Driver][mysqld-4.1.12-nt]Lost connection to MySQL server during query}

{TODO -cNew : Added parameter in SpamFilter.ini file: MiscSQLTimeout=1}


// New to VersionNumber = '3.1.3.608'; {TODO -cFix : In the SFDB tab, a control for an SFDB Activation code was visible by mistake}


// New to VersionNumber = '3.1.3.607';

{TODO -cFix : In specific, rare cases, SpamFilter could not restore the connection to MySQL if the DB became unavailable for a short while}


// New to VersionNumber = '3.1.3.605';

{TODO -cFix : Keyword in the form of: "Subject:,somekeyword" would cause an Access Violation and cause th emessage to be lost}


// New to VersionNumber = '3.1.3.604';

{TODO -cFix : Once more modified code to reduce risk of Connection count not decreasing}

{TODO -cNew : The antivirus plugin now attempts to crack zip passwords to detect password-protected viruses. Updated dwnse.dll is required.


// New to VersionNumber = '3.1.3.601';

{TODO -cNew : Modified logging. Appended "(Exceeded max Connections per IP)" to "Too many connections" log line when this specific limit is reached.

{TODO -cFix : Once more modified code to reduce risk of Connection count not decreasing}


// New to VersionNumber = '3.1.3.600';

{TODO -cFix : Added 100ms delay on disconnect to help reduce risk of Connection count not decreasing}


// New to VersionNumber = '3.1.3.599';

{TODO -cNew : Keyword containing only "Subject:" would cause an Access Violation Exception}


// New to VersionNumber = '3.1.3.598';

{TODO -cNew : Added AddIncorrectAUTHLOGINEHLOEntry option in SpamFilter.ini file to for older email clients that have AUTH=LOGIN bug}


// New to VersionNumber = '3.1.3.597';

{TODO -cFix : In rare cases, Exception occurred during TTerminateIdleThreads.Execute : '7/28/2006 10:21:50 AM' is not a valid date and time}

{TODO -cFix : In rare cases, Exception occurred during TCleanupIPCachesThread.Execute: '38926.4309941551' is not a valid floating point value}

{TODO -cFix : In rare cases, Exception occurred during AddIPToIPCacheLimbo: '38926.4321352662' is not a valid floating point value}

{TODO -cFix : Sometimes the address specified inthe "From" header was being used in the logfile and in the "X-SF-Return-Path" headers in place of the address specified in the MAIL FROM envelope}

{TODO -cNew : Added ReadTimeoutOutgoing option in SpamFilter.ini file}


// New to VersionNumber = '3.1.3.594';

{TODO -cFix : For Linux-based MySQL quarantine databases - fixed upper case/lower case issues with SpamFilter table names}

{TODO -cFix : The AllowedDomainFilterMatrix.txt contained an extra "1" in the list of filter options}


// New to VersionNumber = '3.1.3.592';

{TODO -cFix : If result from MAPS DNS lookup contained line breaks, and SpamFilter is config to use a min of 2 MAPS tests, quarantined emails may have corrupted headers}


// New to VersionNumber = '3.1.3.590';

{TODO -cFix : Exception occurred during TestForReject: Access violation at address.....}

{TODO -cFix : Exception occurred during AddIPToIPCacheLimbo: List index out of bounds}

{TODO -cFix : Exception occurred during GetConnectionsFromIP: Access violation at address }

{TODO -cNew : If destination SMTP server does not respond causing a "Read Timeout" error, SpamFilter will now queue the message rather than attempting to send an NDR right away}


// New to VersionNumber = '3.1.3.585';

{TODO -cNew : Added support for AUTH LOGIN - authenticating users with a Unix-style password file, Active Directory and LDAP servers}

{TODO -cNew : Changed share mode when saving activity logfile, allowing more read-access to external apps}

{TODO -cNew : Embedded spam-images with invalid characters in filename are now scanned properly}

{TODO -cNew : SpamFilter looks at image header to determine file type, does not rely on extension anymore}

{TODO -cNew : Added X-Rejection-Reason header in blocked and spam-tagged emails}

{TODO -cFix : Exception occurred during TSendMailThread.Run: Access violation at address.....}

{TODO -cFix : Fixed "Exception occurred during ReloadSMTPServer: List index out of bounds (0)" when these occur: "Listen Exception occurred". Would cause SpamFilter to stop accepting new incoming connections}

{TODO -cNew : Added option to immediately disconnect sender when recipient not in AuthorizedTO whitelist, even if bayesian filter is enabled}


// New to VersionNumber = '3.0.2.580';

{TODO -cNew : Added support for .PNG image format in spam-image detection filter}

{TODO -cFix : Some emails with multi-image spam graphics were not detected as spam }


// New to VersionNumber = '3.0.2.579';

{TODO -cFix : Received headers were not RFC compliant - they were missing a ";" before the date, }


// New to VersionNumber = '3.0.2.578';

{TODO -cFix : Once more, tried to improve reliability for disconnecting servers after idle timeout expires}

{TODO -cFix : Improve reliability for TSyncSendResult2 exceptions sometimes logged in the activity log}


// New to VersionNumber = '3.0.1.577';

{TODO -cFix : SPF "redirect" modifier was not being recognized properly, causing the SPF filter to pass emails that could otherwise be blocked}

{TODO -cNew : Added support to use SSL with SMTP}


// New to VersionNumber = '3.0.1.575';

{TODO -cFix : Builds 572 and 573 could cause SpamFilter to freeze after a few minutes.}


// New to VersionNumber = '3.0.1.573';

{TODO -cFix : Again improved reliability for disconnecting servers after idle timeout expires}


// New to VersionNumber = '3.0.1.572';

{TODO -cFix : Memory leak of about 400 bytes for every email that was forwarded}


// New to VersionNumber = '3.0.1.571';

{TODO -cFix : Redesigned how emails are added to quarantine DB - now this is handled by a separate thread, eliminating issues where MySQL database locks caused connections to queue up}

{TODO -cNew : logging for quarantined events has changed as follows:}

{ the entry "EMail from a@a.com to b@b.com was received and quarantined" has a different threadID than the thread that processes the connection }

{ added log entry "Created thread (nnnnn) to add email to quarantine" to track which quarantine thread was created in the connection thread}

{TODO -cFix : To attempt avoiding "Read Timeout" server errors when forwarding emails, we attempt to transfer emails in memory to the delivery thread, in addition to using queue spool files as a backup method}

{ -NOTE- this will prevent antiviruses that scan the FileSystem to detect and stop emails}

{TODO -cNew : Added SpoolQueueFilesToMemory SpamFilter.ini option to force emails to be spooled to disk}

{TODO -cNew : Added SpamFilter.ini option to scan multiple images for spam}

{TODO -cNew : The whitelist keyword filter now scans thru all the email's headers}


// New to VersionNumber = '3.0.1.567';

{TODO -cNew : Improved reliability for disconnecting servers after idle timeout expires}

{TODO -cFix : If database is busy deleting expired quarantined email, we are temporarily suspending the archiving of new spam emails to avoid table locks and bad SQL performance}


// New to VersionNumber = '3.0.1.565';

{TODO -cFix : Whitelisted IPs where still limited by the MAXRCPT TO when sending emails with large number of recipients}

{TODO -cNew : Optimized some filter tests by eliminating redundant checks when emails with multiple recipients are received}

{TODO -cNew : Increased the logging limit from 256 to 65535 chars per line when logging "Sending email from" and "EMail from nnn to nnn was forwarded to" events}

{TODO -cNew : Changed the SQL queries that delete expired quarantined emails to better reduce the number of orphaned records}


// New to VersionNumber = '3.0.1.561';

{TODO -cFix : Quarantined emails with multiple recipients where deleted from database if one of them was force-delivered by a user}

{TODO -cNew : Support for %EMAILFROM% and %EMAILTO% tags has been added to practically all customized responses}


// New to VersionNumber = '3.0.1.560';

{TODO -cFix : Antivirus plugin is now also updating ncl.dll to handle newer compression formats}

{TODO -cNew : Added Do Not Quarantine option for the SFDB filter}


// New to VersionNumber = '3.0.1.559';

{TODO -cFix : Customer specific error when starting service from terminal services connection: "Exception occurred during FormShow: Cannot create shell notification icon" prevented A/V plugin from initializing}


// New to VersionNumber = '3.0.1.558';

{TODO -cFix : IPs that send viruses caused the IP to be added to the blacklist cache. As blacklist cache has precedence over whitelisted IPs, whitelisted senders could be blocked}


// New to VersionNumber = '3.0.1.557';

{TODO -cFix : Fixed sporadic access violations after Idle Disconnects: - IdleDisconnectMinutesTimeout reached. Removing threadID}

{TODO -cFix : SFDB was not pausing queries when the centralized SFDB database/website was not available}

{TODO -cNew : SFDB is not considering anymore Filter type 4 (Empty MAIL FROM) due to the abnormal false positives it provides}


// New to VersionNumber = '3.0.1.555';

{TODO -cNew : Replaced the SFDB_URL in the SpamFilter.ini with http://sfdb.logsat.com/SFDBUpload/}

{TODO -cNew : The SFDB filter does not attempt to remove IP from the SFDB database anymore as this is done automatically by our servers}

{TODO -cFix : SFDB now stops attempting to upload blocked IP information for filter type 21 (the SFDB filter itself)}

{TODO -cNew : The SFDB does not log HTTP errors as "Exceptions" anymore}

{TODO -cFix : We were updating the "Current IPs listed in the SFDB" field even if the SFDB was disabled}

{TODO -cFix : The SFDB stats and other SFDB controls were not positioned correctly on screen when resizing GUI}

{TODO -cNew : Limited the web interface to listen on 127.0.0.1 only for free version of SpamFilter}


// New to VersionNumber = '3.0.1.552';

{TODO -cNew : Added a new Web Interface for SpamFilter's administration}

{TODO -cFix : We are now able to scan images for spam even if they have invalid filenames}

{TODO -cNew : The SFDB filter can now check for IPs blocked by specific filters}

{TODO -cNew : The SFDB filter now also adds IPs added to the limbo}

{TODO -cFix : Added more exception handling code to help prevent the service's GUI from terminating when interacting with it from the console}

{TODO -cFix : The customized response for the new SFDB filter would not be saved to the ini file}


// New to VersionNumber = '3.0.0.547';

{TODO -cNew : Added a new filter to detect spam in images embedded inside emails}

{TODO -cNew : Added new SpamFilter Distributed Blacklist filter}

{TODO -cNew : Cosmetic touchups to the Configuration tab GUI}

{TODO -cNew : Added safety code to remove duplicates added by external apps to AllowedDomains.txt local domains}

{TODO -cNew : Removed annoying "Exception occurred during OnConnect" exceptions in logs}

{TODO -cFix : Sometimes Socket Errors on MX test could cause rejects (catches even more cases than in build 535)}

{TODO -cFix : Regression error in build 541 caused SURBL and attachment filter to stop working}


// New to VersionNumber = '2.7.1.541';

{TODO -cNew : Redesigned the database quarantine display in SpamFilter's GUI. It's now faster, less RAM intensive}

{TODO -cNew : Added QueueIfDestinationError400 and QueueIfDestinationError500 options in SpamFilter.ini}


// New to VersionNumber = '2.7.1.535';

{TODO -cFix : Sometimes Socket Errors on MX test could cause rejects (catches more cases than in build 531)}

{TODO -cNew : Changed the precedence for the :tag and :tagsubject modifiers for the Unfiltered Emails}

{TODO -cFix : DoNotStartWithoutAV option in SpamFilter.ini file not working correctly}


// New to VersionNumber = '2.7.1.532';

{TODO -cNew : Added an X-SF header in the emails if SpamFilter whitelisted an email with explanation of why}

{TODO -cNew : Prevented problems if the "AllowedDomainFilterMatrix.txt" contained domains that were manually added with uppercase letters}


// New to VersionNumber = '2.7.1.531';

{TODO -cNew : Prevented problems if the "Allowed Domains" list mistakenly contained duplicate domains}

{TODO -cNew : Added the destination SMTP server used when logging errors occurring while forwarding emails to dest. SMTP server}

{TODO -cNew : Further reduced the CPU usage When flushing the outgoing queue to the destination SMTP server. Does not affect "regular" real-time outgoing traffic}

{TODO -cFix : Sometimes Socket Errors on MX test could cause rejects}

{TODO -cNew : Option to disable activity log monitor, helps reducing CPU}


// New to VersionNumber = '2.7.1.526';

{TODO -cNew : Added DoNotStartWithoutAV option in SpamFilter.ini file to prevent SpamFilter from running unless the antivirus is working}

{TODO -cFix : Greatly improved Bayesian filter accuracy}


// New to VersionNumber = '2.7.1.525';

{TODO -cNew : Greatly reduced the CPU usage When flushing the outgoing queue to the destination SMTP server. Does not affect "regular" realtime outgoing traffic}


// New to VersionNumber = '2.7.1.523';

{TODO -cNew : Added RotateLogsEveryNNhours option in SpamFilter.ini file to rotate logfiles more frequently}

{TODO -cNew : The "Display Reverse DNS for cache" checkbox in the IP Blacklist Cache tab retains its status when clicking on "Save Settings"}

{TODO -cFix : Manually testing an email's source in the Bayesian filter tab causes an access violation error to be logged}


// New to VersionNumber = '2.7.1.522';

{TODO -cFix : Filtering for invalid MX records was not being performed}

{TODO -cFix : When performing reverse DNS lookups, the event was not logged in case of DNS Timeouts}

{TODO -cNew : The MX record filter now checks for the whole 127.x.x.x invalid IP range rather than only 127.0.0.x}


// New to VersionNumber = '2.7.1.520';

{TODO -cNew : Virus definitions are checked for size when downloaded to avoid using corrupted files. Their download is re-attempted in case of problems}


// New to VersionNumber = '2.7.1.519';

{TODO -cFix : If Max Recipients filter is set to 0 (disabled), emails with multiple recipients were only sent to the first one}

{TODO -cNew : Added BlockArchivesWithPassword ini option to block password protected archives with antivirus plugin}

{TODO -cNew : Added AlwaysDoReverseDNSLookups ini option to block password protected archives with antivirus plugin}


// New to VersionNumber = '2.7.1.517';

{TODO -cFix : Customer-reported problem. High CPU for messages with large number of "To:" or "CC" headers}


// New to VersionNumber = '2.7.1.516';

{TODO -cFix : SURBL filter could take several minutes to be process emails with hundreds of URLs if DNS server is down, possibly causing re-sends of the email. Improved lookups by removing duplicate TLDs and added global timeout to avoid problem}

{TODO -cFix : SpamFilter version number and blacklist/whitelist loading indicators are missing in logs when SpamFilter service is started}

{TODO -cNew : Added "Notice - IdleDisconnectMinutesTimeout reached. Removing threadID" log entry when disconnecting idle threads}


// New to VersionNumber = '2.7.1.515';

{TODO -cNew : Changed the display controls for the IP cache blacklist, added option to skip reverse DNS lookups}


// New to VersionNumber = '2.7.1.514';

{TODO -cFix : Certain SPF record with 3 ip4 octets rather than 4 (ex. aaa.bbb.ccc/24) where not checked properly and caused incorrect Exception errors in logs}

{TODO -cFix : Access Violation and/or GUI freezes with certain SPF records}


// New to VersionNumber = '2.7.1.513';

{TODO -cFix : Emails with a NULL sender and a SIZE parameter were being rejected. Ex: MAIL FROM:<> SIZE=652}


// New to VersionNumber = '2.7.1.512';

{TODO -cNew : Added the display of the reverse DNS lookups for the screen dump of cached blacklisted IPs}

{TODO -cFix : "neutral" result was not output in the logfile when an SPF record was missing the "all" or "redirect" modifiers}


// New to VersionNumber = '2.7.1.511';

{TODO -cNew : Changed the priority of the IP blacklist filter, it is now placed before the local domains blacklist}

{TODO -cNew : Changed the logfile entry if the IP address is blacklisted to: "IP is in local blacklist file..."}

{TODO -cNew : Performing reverse DNS queries only if the ReverseDNS filter is enabled, thus improving performance when it's off}


// New to VersionNumber = '2.7.1.510';

{TODO -cFix : Improved the forced disconnects of the cache filter to prevent the current connections to add up}

{TODO -cFix : Regression error in v2.6.3.495 cause the MX record test to not detect all errors}


// New to VersionNumber = '2.7.1.508';

{TODO -cNew : Implemented an IP cache to temporarily deny further connections to IPs that sent multiple spams recently. This can greatly reduce the load on the server}

{TODO -cNew : Improved "Connections" tab, showing in real-time what commands the remote IPs are sending}

{TODO -cFix : Sometimes the "Current Connections" counter could not decrease when a remote connection is dropped, thus displaying a number higher than reality}


// New to VersionNumber = '2.6.3.502';

{TODO -cFix : Duplicate entries were being created in the logfiles}

{TODO -cFix : Bug introduced in v2.6.3.491. When forwarding emails to the destination SMTP server, sometimes the leading "<" and trailing ">" where missing in the MAIL FROM}


// New to VersionNumber = '2.6.3.495';

{TODO -cNew : Added options to not quarantine or send to NULL virus-infected emails}


// New to VersionNumber = '2.6.3.493';

{TODO -cNew : Added DNSTimeout option in SpamFilter.ini to customize the DNS timeout for all of SpamFilter's DNS queries}

{TODO -cNew : Added EnableDbgLogs SpamFilter.ini option to enable separate detailed logging for troubleshooting purposes}

{TODO -cNew : Added to SpamFilter.ini several of the optional entries with their default values for users to see}

{TODO -cFix : Clicking on "Check if IP in ORBS" button in GUI could result in Access Violations being logged}


// New to VersionNumber = '2.6.3.491';

{TODO -cNew : Added support for maximum message size in reply to EHLO and MAIL FROM, as per RFC1870}


// New to VersionNumber = '2.6.3.490';

{TODO -cNew : Changed the control used to display logging in the GUI}

{TODO -cFix : Added *lots* of exception handling code to prevent sporadic problems with the GUI locking up at random}

{TODO -cNew : Added optional EnableDBGLogs ini option for additional debugging}

{TODO -cNew : Greatly improved startup and "Save Settings" response's time for installs with thousands of local domains}


// Spam Filter ISP - New to VersionNumber = '2.6.3.488';

{TODO -cFix : Improved error trapping for the way the quarantine grid is displayed on screen}

{TODO -cNew : Increased the amount of information being logged in case of crashes in the quarantine grid refresh}


// Spam Filter ISP - New to VersionNumber = '2.6.3.487';

{TODO -cFix : Again still, when emails were over the MaxMsgSize limit, the sender was sometimes disconnected without outputting a numeric error code, causing them to retry }


// Spam Filter ISP - New to VersionNumber = '2.6.3.485';

{TODO -cFix : When emails were over the MaxMsgSize limit, the sender was sometimes disconnected without outputting a numeric error code, causing them to retry }

{TODO -cNew : Added more logging for the IP-to-Country lookup exception error handling routines}



// Spam Filter ISP - New to VersionNumber = '2.6.3.483';

{TODO -cFix : SPF bug introduced by build 482 was allowing SPF filter to pass emails which were supposed to fail "a" directive test}


// Spam Filter ISP - New to VersionNumber = '2.6.3.482';

{TODO -cFix : Crash when a honepot recipient is encountered under some circumstances. The last log entry was "EMail To is in honeypot emails"}

{TODO -cFix : SPF queries for certain "a" directives were failing if the email domain did not match the DNS A record}


// Spam Filter ISP - New to VersionNumber = '2.6.3.481';

{TODO -cFix : Added more exception handling code to try preventing crashes being reported}

{TODO -cFix : Fixed problem with SPF retrieving the HELO domain when the MAIL FROM is empty}

{TODO -cNew : Added the HELO host name to the email X-SF-HELO-Domain email header}


// Spam Filter ISP - New to VersionNumber = '2.6.3.478';

{TODO -cNew : More user-friendly functionality for the "Custom Domain Filters" grid when saving the current entry}

{TODO -cNew : DoNotAddIPToHoneypot list now works with :Honeypot tags as well}

{TODO -cFix : The "Do not quarantine" option was not disconnecting the remote server immediately before receiving the email body, but was waiting till the end of message}

{TODO -cFix : Logfiles were missing entries from SPF logs and a few other events that were showing on activity screen. Bug introduced from build 461}


// Spam Filter ISP - New to VersionNumber = '2.6.3.476';

{TODO -cNew : Added support for ::null, ::nondr and ::honeypot tag options in the keyword filter}


// Spam Filter ISP - New to VersionNumber = '2.6.3.475';

{TODO -cFix : SPF bug introduced by build 474 on certain domains with SPF records spanning multiple lines}

{TODO -cNew : Added SpamFilter.ini option to use an alternate SMTP server to send out NDR (non-delivery) email notifications}


// Spam Filter ISP - New to VersionNumber = '2.6.3.474';

{TODO -cFix : SPF queries on domains with TXT records spanning multiple label strings could be incorrect}


// Spam Filter ISP - New to VersionNumber = '2.6.3.473';

{TODO -cFix : 100% CPU usage with certain RegEx keywords caused by certain malformed MIME messages}

{TODO -cFix : SPF bug - mx tests where A records have multiple IPs would sometimes incorrectly fail }

{TODO -cFix : SPF bug introduced in build 456 caused some SPF test to pass even though the "A" identifier should have caused them to fail }

{TODO -cFix : New per-domain filter GUI grid was being reloaded while the user was interactively making changes to it}

{TODO -cFix : New per-domain filter can get out-of-sync with the local domains list}


// Spam Filter ISP - New to VersionNumber = '2.6.3.467';

{TODO -cNew : New tab allows to enable/disable any filter on a per-domain basis, allowing further customizations for your local domains}


// Spam Filter ISP - New to VersionNumber = '2.5.2.462';

{TODO -cFix : Logfile was not flushed to disk until SpamFilter terminated or the log rotated}


// Spam Filter ISP - New to VersionNumber = '2.5.2.461';

{TODO -cNew : Added RealtimeDiskLogging option in SpamFilter.ini file to have log being flushed to disk with every entry}

{TODO -cNew : Added DoNotAddIPToHoneypot option to SpamFilter.ini file to prevent certain trusted IPs from being blacklisted by the honeypot filter}

{TODO -cNew : Changed the logging on screen performance to increase reliability and have a smoother scroll}


// Spam Filter ISP - New to VersionNumber = '2.5.2.459';

{TODO -cFix : SURBL Do Not Quarantine setting was saving, but the mail was still not being quarantined}


// Spam Filter ISP - New to VersionNumber = '2.5.2.458';

{TODO -cFix : Could save the SURBL Do Not Quarantine setting}

{TODO -cFix : Could not empty the SURBL list, the default multi.surbl.org list was re-added automatically}

{TODO -cFix : AutoWhiteList was not always case-insensitive}


// Spam Filter ISP - New to VersionNumber = '2.5.2.457';

{TODO -cNew : Automatically adding "multi.surbl.org" to SURBL servers if the SURBL section is not present in SpamFilter.ini file. Used to provide default in upgrades...}


// Spam Filter ISP - New to VersionNumber = '2.5.2.456';

{TODO -cFix : EMail forwarded/blocked/attempts counters were resetting themselves}

{TODO -cFix : SPF test incorrectly handled "exists" directive for A record tests}

{TODO -cFix : SPF test incorrectly handled l,s,o,d,i macro directive arguments}


// Spam Filter ISP - New to VersionNumber = '2.5.2.454';

{TODO -cNew : Added support for the :Honeypot tag in some blacklists to automatically blacklist sender's IP if it triggers the blacklist entry}

{TODO -cNew : Added option to add to honeypot blacklist the sender's IP if the email contains a virus}

{TODO -cNew : Implement SURBL filtering}

{TODO -cNew : Require a valid email address in the "MAIL FROM" SMTP command (NULL - <> is still allowed per RFC) }


// Spam Filter ISP - New to VersionNumber = '2.5.1.450';

{TODO -cNew : Added "Honeypot" feature to automatically block IPs that send emails to specified honeypot addresses}


// Spam Filter ISP - New to VersionNumber = '2.5.1.448';

{TODO -cFix : SPF record incorrectly flagged a fails tests where the -a mechanism specified a host name instead of an IP and the name in the DNS A record was different}

{TODO -cNew : When MX record test fails, additional information about the error details is logged}


// Spam Filter ISP - New to VersionNumber = '2.5.1.446';

{TODO -cFix : Local blacklist/whitelist files were not immediately reloaded when clicking on the "Save Settings" button - they were reloaded within 3 minutes of the event}

{TODO -cNew : automatic reload of blacklist/whitelist and SpamFilter.ini files reduced to 1 minute instead of 3}

{TODO -cNew : Added to logfile the reason of why an email is being whitelisted, indicating which whitelist triggered the event}


// Spam Filter ISP - New to VersionNumber = '2.5.1.443';

{TODO -cFix : virus emails were not being blocked if any of the "Tag and deliver" options were checked}

{TODO -cNew : SpamFilter.ini is automatically reloaded if modified by external application}

{TODO -cNew : When automatic reload of blacklist/whitelist and SpamFilter.ini files, the event is now logged}


// Spam Filter ISP - New to VersionNumber = '2.5.1.441';

{TODO -cFix : Antivirus plugin-related dates were not decoded correctly in non-US locale date formats}

{TODO -cNew : Trial activation codes are requested via a built-in browser control within SpamFilter's GUI}


// Spam Filter ISP - New to VersionNumber = '2.5.0.435';

{TODO -cFix : Access Violations in "aa.bb.cc.dd - No Data Received" log entry. IP address was removed from logline}


// Spam Filter ISP - New to VersionNumber = '2.5.0.434';

{TODO -cNew : A current antivirus Activation Code is required to enable antivirus plugin}

{TODO -cNew : Added automatic hourly virus definition updates}

{TODO -cNew : Added custom response for SPF filter}

{TODO -cNew : Added custom response for antivirus filter}

{TODO -cNew : Added "aa.bb.cc.dd - No Data Received" log entry if remote server is disconnected without receiving any data from it (probes, port scanners, etc)}


// Spam Filter ISP - New to VersionNumber = '2.5.0.431';

{TODO -cFix : Removed trailing spaces in the "Found SPF Record" logfile entry }

{TODO -cNew : Implemented the antivirus plugin}


// Spam Filter ISP - New to VersionNumber = '2.1.2.410';

{TODO -cFix : Force-delivery of quarantined emails with a NULL "Mail From" or "Mail To" would cause repeated exception entries in the log and creation of tmp files in queue directory}

{TODO -cNew : Added "SPF Test" button to SPF settings page to manually test user-defined criteria}

{TODO -cNew : Moved the retrieval of data in the quarantine view to a separate thread to improve performance for slow database links}


// Spam Filter ISP - New to VersionNumber = '2.1.2.406';

{TODO -cFix : When a recipient in an email with multiple recipients is whitelisted, the email is not supposed to be blocked. This was not working as expected in all cases}


// Spam Filter ISP - New to VersionNumber = '2.1.2.405';

{TODO -cFix : Changed the way hostnames and domains are checked for SPF records to better respect the SPF guidelines}


// Spam Filter ISP - New to VersionNumber = '2.1.2.404';

{TODO -cFix : The "Received by" header added by SpamFilter was not RFC compliant. Added the FQDN (host name) to the "by" section}


// Spam Filter ISP - New to VersionNumber = '2.1.2.403';

{TODO -cFix : DNS requests to a ping-able IP that is not running DNS were not causing SpamFilter to rotate DNS's to next available DNS server}


// Spam Filter ISP - New to VersionNumber = '2.1.2.402';

{TODO -cNew : Added Force Delete option to SPF filter}

{TODO -cNew : Added capability to change the full Welcome greeting banner, including product name/version}

{TODO -cNew : Added QuarantineToDeliverCheckInterval SpamFilter.ini parameter to customize interval to check quarantine database for delivey of emails}


// Spam Filter ISP - New to VersionNumber = '2.1.2.401';

{TODO -cFix : Improved stability when experiencing high SMTP traffic over the Max Incoming Connections limit}

{TODO -cFix : Eliminated occasional <CR> or <LF> in logged DNS responses that caused the logfile to have line breaks in them}


// Spam Filter ISP - New to VersionNumber = '2.1.2.397';

{TODO -cFix : If Reject Same To From Domain Force Delete was selected, emails would still be quarantined}


// Spam Filter ISP - New to VersionNumber = '2.1.2.396';

{TODO -cFix : Fixed regression error that could have prevented a forceful disconnect for email over the max email size limit}


// Spam Filter ISP - New to VersionNumber = '2.1.2.395';

{TODO -cNew : Added graph in Statistics tab to show emails blocked by filter type}


// Spam Filter ISP - New to VersionNumber = '2.1.2.394';

{TODO -cFix : Exceptions on RECEIVEMESSAGE can appear if quarantine database becomes unavailable, and remote server receives error response rather than customized error depending on filter}


// Spam Filter ISP - New to VersionNumber = '2.1.2.393';

{TODO -cFix : "Do not quarantine" option is enabled for a filter, a generic "500 Address Error" is returned instead of the customized response}


// Spam Filter ISP - New to VersionNumber = '2.1.2.392';

{TODO -cFix : If SPF filter returns a softfail or a pass, the MAPS and local IP blacklist filters are ignored}

{TODO -cFix : New MX filter caused emails with empty MAIL FROM to be rejected}


// Spam Filter ISP - New to VersionNumber = '2.1.2.391';

{TODO -cNew : Check valid MX record on receive}

{TODO -cNew : Add option for max connections per remote IP address}


// Spam Filter ISP - New to VersionNumber = '2.1.1.388';

{TODO -cFix : Fixed SPF bug introduced in build 386 - SPF queries had incorrect "none" results}

{TODO -cFix : whitelisted emails were forwarded to alternate dest SMTP server if using option new in build 387}


// Spam Filter ISP - New to VersionNumber = '2.1.1.387';

{TODO -cNew : Added SpamFilter.ini option to forward email tagged as SPAM to an alternate destination SMTP server}


// Spam Filter ISP - New to VersionNumber = '2.1.1.386';

{TODO -cNew : Modified SPF lookups to search for SPF TXT record even if hostname is not a domain}


// Spam Filter ISP - New to VersionNumber = '2.1.1.385';

{TODO -cNew : Add label to indicate "Bayesian Probability results show up in Corpus Database tab"}

{TODO -cFix : if more than 3 RCPT TO's were specified, spam emails may have not been filtered}

{TODO -cNew : Add option in INI file to specify directory path for logfiles}


// Spam Filter ISP - New to VersionNumber = '2.1.1.384';

{TODO -cNew : Fixed "Exception occurred during RECEIVEMESSAGE: Cannot create file...." errors}

{TODO -cFix : FQDN was missing from Welcome banner}


// Spam Filter ISP - New to VersionNumber = '2.1.1.380';

{TODO -cNew : Removed changes to activity window introduced in build 379 as they caused performance issues}


// Spam Filter ISP - New to VersionNumber = '2.1.1.379';

{TODO -cFix : SPF queries that matched the MX mechanism would fail the 1st time a domain was queried. Once in the DNS cache, queries were fine}

{TODO -cFix : SPF queries check parent domain is right-hand side of email address is not a domain but a host name}

{TODO -cNew : Modified behavior of activity window - does not autoscroll unless cursor is placed at end of text}


// Spam Filter ISP - New to VersionNumber = '2.1.1.378';

{TODO -cNew : Added filename blocked by attachment filter in activity log}


// Spam Filter ISP - New to VersionNumber = '2.1.1.376';

{TODO -cFix : Incoming connections were dropped immediately when the DATA stream exceeds the max message size, sometimes before receiving the 55x error code}


// Spam Filter ISP - New to VersionNumber = '2.1.1.375';

{TODO -cFix : Subject keyword searches were case sensitive, not anymore}

{TODO -cFix : Faster SPF queries when exceeding max include loops, better handling of default value}

{TODO -cFix : Fix "Check if in ORBS" button access violations}

{TODO -cNew : Changed log syntax from "Will be quarantined" to more generic "Will be rejected" as the label also applied to emails being disconnected without being quarantined}


// Spam Filter ISP - New to VersionNumber = '2.1.1.373';

{TODO -cFix : SPF - Again fixed neutral behavior due to regression error with previous build}


// Spam Filter ISP - New to VersionNumber = '2.1.1.372';

{TODO -cFix : SPF - fixed issue with logfile becoming huge due to loops in SPF include directive}


// Spam Filter ISP - New to VersionNumber = '2.1.1.371';

{TODO -cFix : SPF neutral records were being rejected}

{TODO -cNew : Added ExpireRetryQueueHours SpamFilter.ini parameter to optionally limit retries to destination SMTP server if it is unavailable}


// Spam Filter ISP - New to VersionNumber = '2.1.1.370';

{TODO -cFix : Default AutoWhiteList file path now correctly defaults to SpamFilter directory}


// Spam Filter ISP - New to VersionNumber = '2.1.1.369';

{TODO -cFix : Unusual messages that contain <CRLF>.<CRLF> sequence in email headers are now received correctly}

{TODO -cNew : Added better support in subject keyword searches - keywords will be searched for in entire subject, not just at start}

{TODO -cNew : Blank addresses are not added to the AutoWhiteList anymore}


// Spam Filter ISP - New to VersionNumber = '2.1.1.367';

{TODO -cNew : Added option so that any quarantined (false positives) emails that the end user force-delivers will cause the sender to be automatically whitelisted}


// Spam Filter ISP - New to VersionNumber = '2.1.1.365';

{TODO -cNew : Added macro mechanism support for SPF}

{TODO -cFix : Outgoing MAIL FROM command was missing surrounding < and > brackets}

{TODO -cNew : A remote server on the IP whitelist is now able to relay to the internet even if the recipient domain is not a local domain}


// Spam Filter ISP - New to VersionNumber = '2.1.1.362';

{TODO -cNew : Add support for SPF - http://spf.pobox.com}

{TODO -cFix : Access violation during SecondTimer while writing activity log}


// Spam Filter ISP - New to VersionNumber = '2.0.1.359';

{TODO -cFix : occasional delivery of truncated emails even though they exceed max message size}


// Spam Filter ISP - New to VersionNumber = '2.0.1.358';

{TODO -cNew : Added ReadTimeout ini parameter to allow user control of timeout when waiting for remote SMTP commands}


// Spam Filter ISP - New to VersionNumber = '2.0.1.357';

{TODO -cFix : whitelisted domains were able to use SpamFilter as an open relay}

{TODO -cFix : Out of Memory when sync corpus}

{TODO -cFix : Corrected spelling of word unknown}


// Spam Filter ISP - New to VersionNumber = '2.0.1.352';

{TODO -cFix : temp tokens still added to coprus\queue directory even if Bayes disabled when end-users force delivery of quarantine emails}

{TODO -cNew : Added ScanReceivedHeaders ini parameter to enable/disable scanning of Received: headers}


// Spam Filter ISP - New to VersionNumber = '2.0.1.349';

{TODO -cFix : Button behavior that opens Unfiltered Emails whitelist fixed}

{TODO -cFix : TAG spam in unfiltered list was not always being forwarded}

{TODO -cNew : Added TAGSUBJECT suffix in unfiltered list to add prefix to spam when delivering to recipient}

{TODO -cNew : modified TAG suffix in unfiltered list to only add spam headerto spam when delivering to recipient}


// Spam Filter ISP - New to VersionNumber = '2.0.1.348';

{TODO -cFix : Deliver emails to multiple recipients even if one or more of them are rejected by destination smtp server}


// Spam Filter ISP - New to VersionNumber = '2.0.1.347';

{TODO -cFix : Bayesian corpus database was not updating correctly every 30 minutes as scheduled}


// Spam Filter ISP - New to VersionNumber = '2.0.1.346';

{TODO -cNew : Added safety check for mail loops, if more than 100 "Received:" headers are found mail is rejected}

{TODO -cNew : Removed references to SpamFilter's IP address when adding our own "Received:" header}


// Spam Filter ISP - New to VersionNumber = '2.0.1.345';

{TODO -cNew : Messages with a "From:" header in the form <someguy@domain.example> some-text @ some-text with some-text blank are no longer being rejected by causing exceptions}

{TODO -cNew : The Bayesian filter now also searches in the Received: headers}


// Spam Filter ISP - New to VersionNumber = '2.0.1.344';

{TODO -cFix : Fixed some "Out of Memory" exception errors and other Access Violations}


// Spam Filter ISP - New to VersionNumber = '2.0.1.339';

{TODO -cFix : Exception adding a database connection and then clicking the quarantine Refresh button w/o closing SpamFilter}


// Spam Filter ISP - New to VersionNumber = '2.0.1.333';

{TODO -cFix : Fixed high CPU / RAM during corpus syncs for some users}

{TODO -cNew : Increased speed for corpus syncs and corpus load by more than 500%}

{TODO -cNew : Add "running SpamFilter since" in status bar}

{TODO -cFix : Fix handling of NULL and other suffixes for RegEx expressions}

{TODO -cNew : The keyword filter now also searches in the Received: headers}


// Spam Filter ISP - New to VersionNumber = '2.0.1.325';

{TODO -cFix : Attempts to fix a problem with RAM and concurrent connections suddently increasing - problem is with only one user}


// Spam Filter ISP - New to VersionNumber = '2.0.1.321';

{TODO -cNew : Added the option to disable "learning" feature of Bayesian filter (not updating the corpus db.dat file), but still continuing to filter incoming emails with Bayesian filter. }

{TODO -cNew : When an email matches the keyword or Bayes filter SpamFilter will now forcefully terminate the connection rather than wait for the remote disconnect}


// Spam Filter ISP - New to VersionNumber = '2.0.1.312';

{TODO -cNew : Added the :NoNDR (same effect as DoNotSendNDROnQuarantine in ini file) option to: Domains, EMailFrom, EmailTO, Attachment blacklists}

{TODO -cFix : Exception occurred during TimerSecondTimer: Access violation errors occurring every 5 seconds}

{TODO -cFix : Optimized Bayesian filtering to help avoid high CPU and RAM spikes}


// Spam Filter ISP - New to VersionNumber = '2.0.1.309';

{TODO -cNew : When the SpamFilter.ini is updated the event is logged}

{TODO -cNew : Added the :TAG option to the AuthorizedTO whitelist to tag emails classified as spam}

{TODO -cNew : Updated documentation and GUI to show blacklists that support the :NULL tag}

{TODO -cNew : Added the TagAndQuarantine option to SpamFilter.ini file}

{TODO -cNew : Added the SPAMTagPrefix option to SpamFilter.ini file to customize spam tag prefix in subject}

{TODO -cNew : We are now writing in the activity log when a quarantined email is forced-delivered}

{TODO -cFix : The Do not quarantine and :NULL option for the attachment blacklist is now working correctly}

{TODO -cNew : Added ini option for DoNotSendNDROnQuarantine - this will cause all emails to be accepted from the sender (but not forwarded to the recipient) without returning an error code to the remote server, thus preventing NDR's to be sent to the sender}


// Spam Filter ISP - New to VersionNumber = '2.0.1.306';

{TODO -cFix : Improved performance of Bayesian filter under heavy load}

{TODO -cFix : Attachment filtering was not working if keyword list was empty}

{TODO -cFix : Bayesian "learning" was not working if keyword list was empty}


// Spam Filter ISP - New to VersionNumber = '2.0.1.302';

{TODO -cNew : Added Bayesian statistical filter}

{TODO -cNew : Added attachment blacklist}

{TODO -cNew : Added DoNotTrustSelfByDefault INI setting to stop allowing relay (whitelisting) emails from own local IPs}

{TODO -cNew : Added header and subject line tagging and delivery of emails classified as spam}

{TODO -cNew : If destination server responds with RFC code indicating temporary error condition (RFC error code reply < 500), msg is queued by SpamFilter for later retry}

{TODO -cFix : Fix tag spam and deliver}

{TODO -cFix : Fix do not quarantine for keywords}


// Spam Filter ISP - New to VersionNumber = '1.2.0.212';

{TODO -cNew : Add ini option to allow MAIL FROM command without 1st HELO command}

{TODO -cNew : Incoming connections are dropped immediately when the DATA stream exceeds the max message size, before the entire email was received before being rejected}

{TODO -cNew : Subject lines are now prefixed with the words "Subject:", allowing RegEx searches to be more specific by limiting them to the subject line only}


// Spam Filter ISP - New to VersionNumber = '1.2.0.207';

{TODO -cFix : Violation when clicking on quarantine field title when hiding quarantine}

{TODO -cFix : Timeout occur on certain messages by QMail}


// Spam Filter ISP - New to VersionNumber = '1.2.0.206';

{TODO -cNew : Add filter for Max spaces in subject line}

{TODO -cNew : option for SPAM tagging in headers}

{TODO -cFix : Messages matching the FilterBase64html filter were mistakenly whitelisted}


// Spam Filter ISP - New to VersionNumber = '1.2.0.205';

{DONE -cFix : Fix Max Msg Size label in GUI from MB to KB}

{DONE -cNew : Added optional ini file parameter to omit trailing semicolon in SQL statements (for Oracle issues)}

{DONE -cNew : Added checks from invalid MAIL FROM addresses - now SpamFilter ignores anything outside < and > brackets, if they are present}


// Spam Filter ISP - New to VersionNumber = '1.2.0.203';

{DONE -cNew : Added option to check the country an IP belongs to with the GUI}

{DONE -cNew : Added option to block emails over a certain size}

{TODO -cNew : Added Keyword whitelist}

{TODO -cNew : Ignore invalid encodings that cause DecodeToStream exceptions and continue decoding message anyway}

{DONE -cFix : Removed extra trailing colons on some SQL statements to help solve Oracle issues}

{DONE -cFix : Hint for the Custom banner edit field in the GUI}

{DONE -cFix : When delivering quarantined emails, "<" and ">" brackets whe missing in the From: header}


// Spam Filter ISP - New to VersionNumber = '1.2.0.201';

{DONE -cFix : In some setups the keywords filter does not work


// Spam Filter ISP - New to VersionNumber = '1.2.0.199';

{DONE -cNew : Emails over a certain size (MaxMsgSizeForKeywordScan=64 kb) were not scanned for keywords. We now exclude binary attachments in calculating size - done mainly to detect sobig worm keywords


// Spam Filter ISP - New to VersionNumber = '1.2.0.198';

{DONE -cFix : Fixed incorrect handling of Return-Path when sending non-deliverable bounce emails to senders, they were being sent to the From header instead}

{DONE -cFix : Fixed incorret setting of Return-Path when sending non-deliverable emails to senders, the Return-Path is now set to null}


// Spam Filter ISP - New to VersionNumber = '1.2.0.197';

{DONE -cFix : Memory leak issue with certain malformed subject headers}

{DONE -cNew : Better handling of non-RFC emails from FedEx robots}

{DONE -cFix : Fixed extra "dot" command at end of transmission}

{DONE -cNew : NT4 without MDAC is now able to run SpamFilter (without quarantine option)}

{DONE -cFix : Fix for the deliver and delete quarantine buttons remaining grayed out}

{DONE -cFix : Returned non-deliverable emails to sender now sent to "Reply-To" header rather than "Mail from"}


// Spam Filter ISP - New to VersionNumber = '1.2.0.190';

{DONE -cFix : Emails from Blacklisted IP were not quarantined}

{DONE -cNew : Moved the local domains list to an external file}

{DONE -cNew : Added option to customize part of welcome banner}

{DONE -cNew : Made the keyword list horizontal-scrollable }

{DONE -cNew : Added support for additional DNS servers}

{DONE -cNew : Added :NULL option for individual entries on following blacklists: Domains, FROM Emails, TO Emails}

{DONE -cFix : Blacklisted IP matches are not done anymore with substrings. i.e now local blacklisted ip of 1.2.3.4 does not trigger match on remote 1.2.3.45}

{DONE -cFix : Stack overflows using RegEx against Very long (100KB+) and only if containing emails with specific content }

{DONE -cFix : Spelling mistakes on some GUI labels}

{DONE -cNew : Changed order of filters to:}

{ AllowedDomains, LocalDomainBlackList, LocalEmailsBlacklist, LocalEmailsTOBlacklist, Not in AuthorizedTOEmails, CountryBlacklist, }

{ RejectNoReverse, RejectEmptyMailFrom, RejectSameToFrom, RejectSameToFromDomain, RecipientCount > MaxRCPTTO, MAPS check, Keywords}


// Spam Filter ISP - New to VersionNumber = '1.2.0.178';

{DONE -cFix : Access Violations processing outgoing queue and incoming messages}

{DONE -cFix : Memory leak when checking emails against huge keyword listings}

{DONE -cNew : Added FilterBase64html option in ini file to block emails with Content-Transfer-Encoding=base64 and Content-Type=text/html or text/plain }


// Spam Filter ISP - New to VersionNumber = '1.2.0.174';

{DONE -cFix : even if clear quarantine list was clicked, the grid would occasionally refresh anyways}


// Spam Filter ISP - New to VersionNumber = '1.2.0.173';

{DONE -cFix : Setting to 0 the delete expired quarantine interval cause e DivisionByZero error}


// Spam Filter ISP - New to VersionNumber = '1.2.0.172';

{DONE -cNew : Added button to clear quarantine grid to conserve memory, saving 100's of MEGS in case of large databases}

{DONE -cNew : Setting to 0 the delete expired quarantine interval diables such interval}


// Spam Filter ISP - New to VersionNumber = '1.2.0.169';

{DONE -cFix : RegEx searches in black/white lists incorrect}

{DONE -cFix : Possibly solved issues with SpamFilter settings being cleared}

{DONE -cNew : IP Blacklist now allows .0.0 and .0.0.0 matches for class B & class A address matches}


// Spam Filter ISP - New to VersionNumber = '1.2.0.167';

{DONE -cFix : Quarantine Refresh, Deliver, Delete buttons may remain grayed out when using MS Access}


// Spam Filter ISP - New to VersionNumber = '1.2.0.164';

{DONE -cFix : Corrupt attachments - Emails that had a <CRLF>. sequence were not replaced by <CRLF>.. following RFC rules}


// Spam Filter ISP - New to VersionNumber = '1.2.0.163';

{DONE -cFix : Access Violations when multiple msgs left in queue are re-delivered}

{DONE -cFix : Improved speed in recalculating country stats}

{DONE -cNew : Added option to customize interval for deleting expired email from database}


// Spam Filter ISP - New to VersionNumber = '1.2.0.162';

{DONE -cNew : Added tab to test if a RegEx (Regular Expression) triggers a match}

{DONE -cNew : Added tab to debug/view SMTP transactions between us and a remote host}

{DONE -cNew : Keyword search in Email headers now only works with Subject, all other headers are excluded to reduce false positives}

{DONE -cFix : "TO Emails" Blacklist Open File button was not working}

{DONE -cFix : Stopping SpamFilter service while servicing multiple incoming connections fails}

{DONE -cFix : Exception MarkQuarantineItemsForDelivery when manually deleting some items in quarantine}


// Spam Filter ISP - New to VersionNumber = '1.2.0.153';

{DONE -cFix : Different Access Violations when receiving email}

{DONE -cFix : Invalid date error when starting SpamFilter wih non-US date formats}

{DONE -cNew : Stats are now erased from ini file when option to save them is unchecked}


// Spam Filter ISP - New to VersionNumber = '1.2.0.152';

{DONE -cFix : "Path couldn't be found..." error when starting SpamFilter}


// Spam Filter ISP - New to VersionNumber = '1.2.0.151';

{DONE -cNew : Added RegEx support in keyword for body and headers in emails}

{DONE -cNew : Added Delete button and DEL key support to delete items in quarantine grid in GUI}

{DONE -cFix : In some databases the registration password was not delivered}

{DONE -cFix : Access Violation when re-delivering several emails in queue directory}

{DONE -cFix : Access Violations when interacting with the quarantine grid}

{DONE -cFix : Access Violations when receiving email}

{DONE -cFix : The quarantine Refresh button in Access remain disabled}


// Spam Filter ISP - New to VersionNumber = '1.2.0.148';

{DONE -cFix : Registration email notices to users who self-registered for web access were not being delivered}


// Spam Filter ISP - New to VersionNumber = '1.2.0.147';

{DONE -cNew : Changed the local white/black list reload interval from 1 minute to 3 minutes}

{DONE -cNew : Changed the country stats reload interval from 1 minute to 2 minutes}

{DONE -cNew : Added option to autoconfigure databases}

{DONE -cNew : Added startup check to ensure database structure is correct}

{DONE -cFix : various minor fixes to enable/disable archive spin-edit control and test if DB available/unavailable}

{DONE -cNew : Added ini parameter for max msg size above which no keyword scan is done - improve performance}

{DONE -cFix : CPU glued at 100% if email subject has incorrect encoding}

{DONE -cFix : if defined, Local Domains redirect not sorted and not redirecting to correct destination}


// Spam Filter ISP - New to VersionNumber = '1.2.0.133';

{DONE -cNew : Local Domain list is displayed sorted by domain}

{DONE -cFix : Blocked email counter not increasing when reject for keyword match}

{DONE -cNew : The local black/white/keyword file lists are reloaded only if their content is modified}

{DONE -cNew : Joe-Jobbing - added filter to reject if "Mail From" domain = "Mail To" domain}

{DONE -cNew : Added customized queue-reprocess interval}

{DONE -cNew : Added Flush NOW button}

{DONE -cNew : Quarantine is now stored in a Database}


// Spam Filter ISP - New to VersionNumber = '1.1.2.124';

{DONE -cFix : Whitelisted emails blocked if keyword match}

{DONE -cFix : The FQDN was not written in the welcome banner}

{DONE -cFix : Emails forwarded to default smtp rather than secondary fwding assigned to individual domains if multiple recipients}


// Spam Filter ISP - New to VersionNumber = '1.1.2.122';

{DONE -cFix : "Path couldn't be found..." error when starting SpamFilter}


// Spam Filter ISP - New to VersionNumber = '1.1.2.121';

{DONE -cFix : "Unfiltered emails" whitelist was not being saved}

{DONE -cFix : Again modified address recognition for emails in format "name"@domain.com }

{DONE -cFix : Queue directory was not being processed every 60 minutes }

{DONE -cDone : Added option to save stats }


// Spam Filter ISP - New to VersionNumber = '1.1.2.117';

{DONE -cFix : If local domains were entered in uppercase, a case-sensitive match was mistakenly performed}

{DONE -cFix : Changed EHLO response since mail servers running MailSite were not able to send us email}

{DONE -cNew : Added option to diable ESMTP (EHLO) by adding entry DisableEHLO=1 in section [server settings] in spamfilter.ini file}


// Spam Filter ISP - New to VersionNumber = '1.1.2.114';

{DONE -cDone : Added REGEX (Regular Expressions) support for any list that also allows wildcards}

{DONE -cFix : Emails with a line containing a single "." by itself were truncated}

{DONE -cDone : Placed LocalEMailsBlacklists and LocalEMailsTOBlacklists entries in separate file rather than in spamfilter.ini file }

{DONE -cDone : Modified address recognition for emails in format "name"@domain.com }

{DONE -cDone : Added limited ESMTP support}

{DONE -cFix : Violations when starting SpamFilter if thousands of messages present in queue folder}

{DONE -cFix : Some local black/white lists triggered a match if they contained blank lines}

{DONE -cFix : Exceptions and "list index out of bounds" occurred during RECEIVEMESSAGE if high traffic and large local balck/white lists}

{DONE -cFix : Fixed "List Index out of bounds" error while sorting items in the quarantine while it was still refreshing}


// Spam Filter ISP - New to VersionNumber = '1.1.0.91';

{DONE -cDone : Add option to quarantine/delete for each rejection filter}

{DONE -cDone : Email with RCPT TO domain not in allowed domains list is rejected immediately even if quarantine enabled}


// Spam Filter ISP - New to VersionNumber = '1.1.0.90';

{DONE -cDone : Add optional list of RCPT TO authorized emails - email will only be delivered if in list}

{DONE -cDone : Add whitelist of FROM emails in addition to domains}

{DONE -cDone : Disable Max RCPT TO by entering 0}

{DONE -cDone : Block emails with empty FROM field}

{DONE -cDone : Block emails when Email To is the same as Email From}

{DONE -cDone : Added customization response for blacklisted "Mail To" in addition to "Mail From"}

{DONE -cDone : Moved "Excluded Domains/IP entries from INI file to standalone file}

{DONE -cFix : Attempted to fix incorrect subject headers with non-ISO characters}

{DONE -cFix : Again - Exception occurred during RECEIVEMESSAGE and Exception occurred during TimerSecondTimer}

{DONE -cFix : Spelling mistakes}

{DONE -cFix : Invalid Packet Size exceptions on invalid reverse lookups}


// Spam Filter ISP - New to VersionNumber = '1.1.0.80';

{DONE -cFix : When in Service mode, edit fields in the Settings tab now accept keyboard input}

{DONE -cFix : changed all default error codes of 550 to 557 as some mail servers were not sending our rejection messages to users}

{DONE -cNew : Placed keywords in separate file, same as domain blacklist file}

{DONE -cNew : Added Blacklist of local TO emails}

{DONE -cNew : Wildcards are now allowed in most domain/email black/white lists}

{DONE -cNew : Quarantine tab - Select range of emails with shift-click}


// Spam Filter ISP - New to VersionNumber = '1.1.0.73';

{DONE -cNew : Removed the X-Library header since it was causing MessageWall to reject our emails considering them spam}

{DONE -cNew : Double-clicking on an item in the quarantine will display the email message in a window for convenience}

{DONE -cNew : Added a "Size" indication in the logs to show the received message size}

{DONE -cFix : Improved the quarantine refresh speed}

{DONE -cFix : Exception occurred during RECEIVEMESSAGE and Exception occurred during TimerSecondTimer}


// Spam Filter ISP - New to VersionNumber = '1.1.0.72';

{DONE -cFix : if email rejected by keyword match not sending correct error response to remote server}

{DONE -cFix : cannot edit custom responses}

{DONE -cFix : items quarantined even if quarantine days set to 0 if there is keyword filter match}


// Spam Filter ISP - New to VersionNumber = '1.1.0.71';

{DONE -cNew : Added option to permanently delete emails in quarantine}

{DONE -cFix : Keyword match was mistakenly case-sensitive}

{DONE -cFix : Email rejected due to content filter not quarantined}

{DONE -cFix : Ind temp files left in the TEMP directory}

{DONE -cFix : Emails are accepted again after 1st RCPT TO is rejected}



// Spam Filter ISP - New to VersionNumber = '1.1.0.70';

{DONE -cFix : Exception occurred during RECEIVEMESSAGE: Unknown Message Part Type}

{DONE -cFix : Exception - List Index out of bounds - issue when Content-Transfer-Encoding: quoted-printable and email contained only 4 dashes on a signle line}

{DONE -cFix : Keyword match was skipped if the email format was Plain Text}

{DONE -cNew : You can customize destination SMTP servers for each one of your local domains}

{DONE -cNew : Added another blacklist to block specific email addresses}

{DONE -cNew : Almost all reject responses to remote server can now be customized}

{DONE -cNew : You can now quarantine emails rather than rejecting them, allowing you to resend to users legitimate email classified as spam}


// Spam Filter ISP - New to VersionNumber = '1.0.3.63';

{DONE -cFix : Text-only email messages have several X-nnnn headers appear in the body of the email message}


// Spam Filter ISP - New to VersionNumber = '1.0.3.62';

{DONE -cNew : Always display in logs both the sender and the recipients email addresses for tracking}

{DONE -cNew : Block only if a user-selectable number of blacklists entries are found}

{DONE -cNew : Improved user interface}


// Spam Filter ISP - New to VersionNumber = '1.0.3.61';

{DONE -cNew : Filter based on country of origin.}

{DONE -cNew : Bypass keyword checking on uuencoded or base64 encoded attachments (mentioned previously).}

{DONE -cNew : Added option to whitelist IPs in addition to domains and specific emails}

{DONE -cFix : Only one attachement could be received if multiple were sent in a specific format}

{DONE -cFix : Certain emails with specific format could be left in the queue directory}


// Spam Filter ISP - New to VersionNumber = '1.0.3.54';

{DONE -cNew : Added the option to terminate connecitons if they issue more than nn number of RCPT TOs in a single session}

{DONE -cFix : Acess Violation logged right after starting SpamFilter service on NT4}

{DONE -cFix : "Excluded Domains" would still be filtered if there was a keyword match}

{DONE -cFix : SpamFilter could stop accepting all connections after they reach the maximum limit}

{DONE -cFix : Fixed several issues with SpamFilter not responding or Access Violations during shutdown}


// Spam Filter ISP - New to VersionNumber = '1.0.3.49';

{DONE -cNew : Added the option to add destination local email addresses that bypass SpamFilter's checks}

{DONE -cNew : Most settings can now be changed without stopping the SMTP listener}

{DONE -cFix : Fixed memory leaks evident after a few dozen thousand emails}


// Spam Filter ISP - New to VersionNumber = '1.0.3.40';

{DONE -cFix : Several changes to improve stability}

{DONE -cNew : Added option to disable monitoring of connections}


// Spam Filter ISP - New to VersionNumber = '1.0.3.21';

{DONE -cFix : SpamFilter Service GUI could freeze during reboot}

{DONE -cFix : Fixed EInvalidPointer crash on sites with extremely high traffic}

{DONE -cNew : Added vertical scrollbars to settings memo boxes}

{DONE -cNew : Added tray icon to show hidden service window}


// Spam Filter ISP - New to VersionNumber = '1.0.3.15';

{DONE -cFix : Missing file GeoIP.dat from distribution}


// Spam Filter ISP - New to VersionNumber = '1.0.3.14';

{DONE -cNew : We are detecting the Country of origin based on IP address and graphing email country stats}

{DONE -cNew : Settings edit boxes are no longer read-only when running as a service}

{DONE -cFix : Domains that were "whitelisted" but did not have a reverse DNS record were rejected}

{DONE -cFix : When starting SpamFilter (only occurred as service), existing msgs in queue were not processed}

{DONE -cFix : Fixed issues when stopping SpamFilter service}

{DONE -cFix : Fixed issues when logging off / loging on with SpamFilter service}

{DONE -cFix : Fixed access violations with high traffic i.e. > 200/300 concurrent connections}


// Spam Filter ISP - New to VersionNumber = '1.0.3.7';

{DONE -cFix : DNS servers running Windows' port of Bind DNS sometimes caused Invalid Packet Size exceptions on invalid reverse lookups}

{DONE -cFix : Range Check Exceptions on reverse lookup that return a NULL}


// Spam Filter ISP - New to VersionNumber = '1.0.3.1';

{DONE -cNew : We can now listen on specific IPs, just list them separated by commas, ex.: 209.26.140.2,209.26.140.3}

{DONE -cNew : Changed timeout to destination SMTP server from 5 to 60 seconds}

{DONE -cNew : Added option to filter based on domain in MAIL FROM}

{DONE -cNew : Added option to reject connections if they do not have a reverse DNS entry}

{DONE -cFix : Fixed failing to block "rcpt to" relay attempts with addresses containing a "!" if user mistakenly insert blank lines in the "Allowed Domains"}


// Spam Filter ISP - New to VersionNumber = '1.0.2.2';

{DONE -cFix : Senders were not notified if recipient email does not exist or is rejected by the destination (our own) SMTP server}


// Spam Filter ISP - New to VersionNumber = '1.0.2.1';

{DONE -cFix : Temp files in temp directory are not deleted - SpamFilter hangs after 65K files created and not deleted}

{DONE -cNew : Connections to SpamFilter are forcibly disconnected after 4 hours. Done to avoid stale idle connections}

{DONE -cNew : Added option to disable automatic online check of latest available version}

{DONE -cFix : Content Keywords with spaces are treated as if separated by commas}

{DONE -cFix : Removed "Beep" sound on exit...}


// Spam Filter ISP - New to VersionNumber = '1.0.1.77';

{DONE -cFix : Added option to log keyword rejections}

{DONE -cFix : The FQDN was being duplicated every time the settings were saved }


// Spam Filter ISP - New to VersionNumber = '1.0.1.74';

{DONE -cFix : Allow percent in address - this checkbox worked opposite as stated... }

{if checked now correctly rejects emails with % }


// Spam Filter ISP - New to VersionNumber = '1.0.1.72';

{DONE -cFix : Keyword Content Filtering - an empty line in the list would cause ALL emails to be rejected }


// Spam Filter ISP - New to VersionNumber = '1.0.1.70';

{DONE -cNew : Keyword Content Filtering - reject emails based on keywords and phrases }

{DONE -cNew : Moved logging in "logfiles" directory }


// Spam Filter ISP - New to VersionNumber = '1.0.1.58';

{DONE -cNew : Enforced minimum size for main window }

{DONE -cNew : Added more help hints }

{DONE -cNew : Added installation app. for Win32 version }


// Spam Filter ISP - New to VersionNumber = '1.0.1.57';

{DONE -cNew : Disable the Close button in service to avoid accidental closing of admin console }

{DONE -cFix : Possibly Fixed cases where duplicates emails are created by SpamFilter when fwding to smtp }


// Spam Filter ISP - New to VersionNumber = '1.0.1.54';

{DONE -cNew : Added Connections tab to view/disconnect current sessions }

{DONE -cFix : Activity log auto-returned to 1st line after 10,000 entries in log }


// Spam Filter ISP - New to VersionNumber = '1.0.1.53';

{DONE -cNew : Application teminates if access violation with listener rather than stops accepting requests }

{DONE -cFix : Emails received counter now reports correct number }

{DONE -cNew : Removed "Forward-Path" header before forwarding msg to dest smtp server }


// Spam Filter ISP - New to VersionNumber = '1.0.1.51';

{DONE -cFix : Fix Exception occurred during OnConnect on Windows98 machines }

{DONE -cFix : Changed error msg for "Closed Gracefully" - remote server disconnected us }


// Spam Filter ISP - New to VersionNumber = '1.0.1.44';

{DONE -cFix : Try to restart the SMTP threads after Access Violations }

{DONE -cFix : Added more meaningful descritptions for Error Exceptions }


// Spam Filter ISP - New to VersionNumber = '1.0.1.43';

{DONE -cFix : Again Attempted to Fix Access violation at address NNNNNNNN in module 'SpamFilterSvc.exe'. Read of address 00000000 }

{DONE -cFix : Temporarily Removed buggy Connections tab }


// Spam Filter ISP - New to VersionNumber = '1.0.1.41';

{DONE -cFix : Attempted to Fix Access violation at address NNNNNNNN in module 'SpamFilterSvc.exe'. Read of address 00000000 }


// Spam Filter ISP - New to VersionNumber = '1.0.1.40';

{DONE -cNew : Added option to run as an NT servcice (Win32 platform only) }

{DONE -cNew : Changed working library from CLX to VCL, removing need for qtinf.dll }

{DONE -cNew : Added feature to retry processing undeliverables in queue every hour }

{DONE -cFix : Added several Access Violation traps }

{DONE -cFix : Fixed problem failing to check build number online }

{DONE -cFix : Possibly Fixed a problem in processing mail with multiple "RCPT TO" headers }


// Spam Filter ISP - New to VersionNumber = '1.0.1.33';

{DONE -cFix : Fixed Socket error on checking build number online }

{DONE -cNew : Added check in local BlackList file for "Check if IP in ORBS" button }


// Spam Filter ISP - New to VersionNumber = '1.0.1.31';

{DONE -cNew : Added Max incoming SMTP connection option }

{DONE -cNew : Added Local Blacklist file in addition to DNS MAPS }

{DONE -cFix : Fixed duplicate entries in logfile }

{DONE -cNew : Check for latest build available online }