Secure connections will automatically fall back to using TLS 1.2 if support for TLS 1.3 has not been enabled on the local system. Microsoft has not made TLS 1.3 generally available for the Schannel SSPI and is considered experimental.
The MIME content type application/vnd.microsoft.portable-executable is recognized for executable files and dynamic load libraries (DLLs) which are attached to messages.
Valid message attachments which do not explicitly specify a file name will be automatically assigned a default name based on the content type associated with the attachment.
Corrected an issue where a file attachment with a long file name would not be recognized by the MIME parser.
Corrected a potential buffer overrun if a MIME header field value was malformed.
Corrected an issue where assigning previously encoded text to a MIME message part could cause it to be re-encoded.
Text content which does not require base64 or quoted-printable encoding will not be automatically encoded when inserted into a MIME message part.
Relaxed validation of email addresses which contain extraneous whitespace but are otherwise valid.
Removed the deprecated "FAX" addressing scheme used in older versions of Outlook. These types of addresses will now be flagged as invalid.
Modified the automatic proxy detection to exclude specific protocols if configured in the exception list.
Corrected an issue where the local proxy configuration would be ignored if the proxy server was specified using a URL instead of a domain name.
When the user's proxy configuration bypasses local addresses, all hostnames which are not fully qualified will match the local exclusion rules. Previous versions would only bypass the proxy if the hostname was "localhost" or the IP address was 127.0.0.1.
Corrected an issue where internationalized domain names (IDNs) may not resolve correctly when used with a proxy server.
Corrected an issue where invoking the Reset method in the InternetMail ActiveX control would not clear the current user credentials.
Corrected an issue where the BearerToken property was not available in the InternetMail .NET class and ActiveX control.
Corrected an issue where context sensitive help would not display correctly in Visual Basic 6.0 for the FileTransfer and InternetMail ActiveX controls.
Modified the behavior of the HttpClient.PostData in the .NET class to always convert string payloads to UTF-8. The overloaded versions of the method which accept byte arrays are not affected by this change.
Updated Pascal and Visual Basic function declarations and constants for the Library Edition.
Support for Windows XP, Windows Vista and Windows Server 2003 has been officially deprecated.
The License Manager utility should display the option to check for product updates for all SocketTools editions.
The installer package (setup) will automatically check for new updates at the end of the installation process.
Minor updates and improvements to the HTML Help documentation.
Updated the .NET 5.0 assemblies for the .NET 5.0.3 runtime and made internal changes to support the .NET 6.0 preview release. Assemblies which target .NET 6.0 will be made available for testing and general availability is scheduled for November, 2021.
The FTP and HTTP server components will release unused memory when the server is restarted, recreating the private heap allocated for the server session. This addresses an issue where restarting the server multiple times could result in increased memory utilization.
Corrected an issue where the HTTP server components could throw an exception and cause the application to crash when attempting to stop or restart the server while processing a client a request.
Changed how FTP and HTTP server events are processed while the server is in the process of stopping or restarting. Client sessions will no longer be forcibly terminated while handling a request, however additional events will not be raised while the server is in its shutdown process.
The MIME components and library will now decode encoded text in a message part when it is designated as an attachment. Previous versions would not decode text in a file attachment and would always return the encoded data. This only affects text content and binary file attachments should be stored using the ExtractFile method or MimeExtractFile function.
The MimeGetMessageText function will explicitly fail if the buffer provided is not large enough to store the complete contents of the message, including a terminating NUL character. This mitigates a potential buffer overrun and prevents the API from returning truncated text.
Corrected an issue where the GeoIP location API would fail with an unexpected error when an IPv4 address could not be mapped to a valid Autonomous System Number (ASN).
Corrected an internal buffer overrun condition in the SMTP components and library which could occur when submitting an email message that contained a malformed address.
Corrected an issue that could prevent networking components from resolving certain internationalized domain names when using the Unicode version of the API or the .NET components.
The SocketTools Subscription and .NET Edition includes release builds of the .NET 5.0 assemblies as part of the base install. Install the latest release of Visual Studio 2019 which includes the .NET 5.0 Framework.
Corrected an issue that could prevent certain internationalized domain names from resolving correctly due to how they were being encoded. In this case, a valid domain name would return an error indicating that it was unknown and the connection would fail.
Modified the server related components to attempt to reduce the working set size of the process when the server is stopped or goes idle after all clients have disconnected. This should reduce the overall memory footprint of the server over time.
Corrected an issue where checking the unmanaged memory allocation of the FTP and HTTP server components could return an incorrect value. This also corrects an issue where the server could remain in a locked state after checking memory usage.
Corrected an issue where the CheckPath method in the HTTP server components could incorrectly indicate a client did not have permission to access a virtual path and the ResolvePath method would fail.
Corrected an issue with the HTTP client components and library which could cause a memory leak when returning the contents of a JSON or XML post as a memory object. The internal handle that was used would remain locked and not released after the data was returned to the caller.
Corrected an issue with the FTP and HTTP client components and libraries which could cause the client to wait for longer periods of time between transfers if a lower priority was specified. In some cases, subsequent transfers would take longer to complete than they should have, even with a lower transfer priority.
Changed how the OnProgress events are handled for the FTP and HTTP client components to update the application more reliably under higher latency conditions.
Corrected an issue with the IMAP components which could cause them to return an incorrect mailbox count under some circumstances. This would typically only occur with accounts that had a large number of mailboxes.
Corrected an issue with the IMAP components and library which could result in a read-only mailbox not being internally flagged as read-only. An incorrect error code would be returned if an attempt was made to delete or move a message from that mailbox.
Corrected an issue that could result in an internal buffer overrun in the MIME components and library when parsing messages which contain a large number of attachments.
Corrected an issue with the MIME components and library which could cause an exported message to be truncated if the message contained only HTML formatted text and multiple file attachments.
Corrected an issue with how non-Latin character sets were being detected and parsed by the MIME components and libraries, resulting in incorrect UTF-8 encoding under some circumstances.
Corrected an issue with the DNS components and library which could prevent mail exchange (MX) record query from resolving correctly under some circumstances. This also introduced a potential memory leak after incorrectly reporting a failure.
Relaxed certain strict checks made to validate email addresses with the MIME and SMTP components and libraries to improve compatibility with third-party email clients.
Corrected an issue with the SocketWrench components which could cause them to ignore the setting of the NoDelay property and would not set the TCP_NODELAY flag on the socket.
Corrected an issue with the Telnet client components and libraries which could cause them to report that there was no data available to read from the server when data had been received and buffered over a secure connection.
Corrected an issue with the NNTP client components and library which could cause very large article IDs to be truncated to 32-bit values and then returned as negative integers rather than the correct ID value.
Corrected a problem with the text messaging components and library which would prevent an application from sending a message where there was no known service provider, even when a provider was explicitly specified.
Changed the error codes returned by some text messaging functions to return more meaningful values, rather than always reporting the server returned an unexpected response.
Corrected an issue with the File Encoder components and library which could cause an internal buffer overrun when encoding or decoding a file using the uucode algorithm.
Minor corrections and updates to the technical reference documentation.
Added the .NET 5.0 RC1 assemblies to the SocketTools Subscription and .NET Edition installers as part of the base install. Now that .NET 5.0 is in the release candidate phase of the preview, the .NET 5.0 SocketTools classes are fully supported. Microsoft is planning for the official release of .NET 5.0 in November 2020.
Changes to the internal buffering algorithm used for HTTP and FTP file transfers which should increase file transfer speeds under certain conditions. This is a continuation of the optimizations being implemented to improve transfers over high-latency, low-bandwidth network connections.
Corrected a problem with the web storage and location APIs which could cause them to report an error indicating that the developer account is invalid. This could occur when a development license is used on a system where an evaluation license was previously installed.
Corrected a problem with the POP3 components which could cause an internal buffer overrun if a very large OAuth 2.0 bearer token was used. This was primarily an issue with Microsoft Office 365 accounts because Azure uses encoded Java Web Tokens for their bearer tokens.
Added internal support for some additional Windows code pages when parsing MIME formatted mail messages. This improves handling for some older versions of Outlook and applications which used Outlook automation to compose messages.
Corrected an issue with the MIME API that could cause messages composed using an ANSI character set to be returned as corrupted text. This affected the MimeGetMessageText function in the library, as well as the Text properties in the MailMessage .NET class and ActiveX control.
Updated the documentation to make it clear the ANSI version of the MimeGetMessageText function and CMailMessage::GetText method will always return the decoded message text as UTF-8 Unicode, not the original character set which was used to compose the message. It is recommended you use the Unicode version of the function whenever possible.
Documented the HttpPutDataEx and HttpPutTextEx functions. These functions were introduced with a previous release of SocketTools 10 but were never documented and the function prototypes were only included in the C/C++ header file. These functions allow the use of PUT with RESTful API services which use the PUT command to submit data, similar to how the POST command is used.
Minor corrections and updates to the technical reference documentation.
Added support OAuth 2.0 authentication to the HTTP, IMAP, POP3 and SMTP components and libraries. Please review the Frequently Asked Questions document for more information about OAuth 2.0.
New authentication methods were added for each of the libraries which support OAuth 2.0 OAuth 2.0 bearer tokens. For IMAP, POP3 and SMTP both the XOAUTH2 and OAUTHBEARER methods are supported. The technical reference documentation includes more information about these methods for each of the components and libraries.
New properties were added to the SocketTools.ImapClient, SocketTools.PopClient and SocketTools.SmtpClient .NET classes to support OAuth 2.0 authentication. The BearerToken property specifies the access token used to authenticate the client session.
The SocketTools.ImapClient and SocketTools.SmtpClient .NET classes have a new Authentication property which enables you to explicitly specify which authentication method you prefer to use.
New properties were added to the ImapClient, PopClient and SmtpClient ActiveX controls to support OAuth 2.0 authentication. The The BearerToken property specifies the access token used to authenticate the client session. The ImapClient and SmtpClient ActiveX controls also have a new AuthType property which allows you to explicitly specify which authentication method you prefer to use.
The HTTP API supports the HTTP_AUTH_BEARER authentication method and the new HttpSetBearerToken function can be used to specify the token value. The SocketTools.HttpClient .NET class and the HttpClient ActiveX control have a new BearerToken property which can be used to specify the OAuth 2.0 bearer token.
The IMAP API supports the IMAP_AUTH_XOAUTH2 and IMAP_AUTH_BEARER authentication methods. OAuth 2.0 authentication is performed by calling the ImapLogin function using one of those two authentication types.
The POP3 API supports the POP_AUTH_XOAUTH2 and POP_AUTH_BEARER authentication methods. OAuth 2.0 authentication is performed by calling the PopLogin function using one of those two authentication types.
The SMTP API supports the SMTP_AUTH_XOAUTH2 and SMTP_AUTH_BEARER authentication methods. OAuth 2.0 authentication is performed by calling the SmtpAuthenticate function using one of those two authentication types.
Updated the POP3 .NET class, ActiveX control and library to support SASL LOGIN and PLAIN authentication methods.
Updated the SMTP .NET class, ActiveX control and library to support SASL PLAIN authentication in addition to LOGIN.
Corrected an issue in the POP3 and IMAP components and libraries which could result in an internal buffer overrun if very large passwords or bearer tokens were specified.
Updated the .NET Core assemblies to use strong naming which enables string loading, requiring the assembly version to match what was referenced in the project. All .NET Framework assemblies already used strong naming.
Updated the .NET Framework 5.0 assemblies to use Preview 7. Using these assemblies requires you to install the .NET 5.0 preview and the latest preview release of Visual Studio 2019. Refer to the SocketTools .NET 5.0 Preview technical article for more information.
Improved the internal socket I/O buffering used by all networking components. This will increase throughput for most data transfers, particularly over higher latency connections.
Updates and corrections to the technical reference documentation for all components.
Added support for TLS session reuse for secure FTP connections. This option should only be used with servers that explicitly require it and is only supported on Windows 8.1 and Windows 2012 R2 and later platforms. Note this option will not work with servers compiled using OpenSSL 1.0.2 or earlier because they don't support EMS (extended master secret) which is required by Schannel.
Expanded support for additional character sets in the MIME API and SocketTools.MailMessage components. This update improves support for 8-bit character sets for languages which do not primarily use Latin characters, such as Japanese, Korean, Chinese, Arabic, Hebrew and Russian. The documentation has been expanded to provide additional information on all supported character sets.
Added a property named CodePage to several .NET classes and ActiveX controls to improve support for how 8-bit ANSI characters are converted to Unicode when sending and receiving text data using native String types. By default, text will be converted to Unicode using the active code page for the current locale, but this can be changed to specify UTF-8 or any other valid Windows code page as needed.
The WebLocation API and components have been changed to prefer using IPv6 addresses when detecting the current location because they tend to provide more accurate information than IPv4 addresses. If the local system does not have IPv6 configured, the API will revert back to using the system's IPv4 address to determine the location.
Updated the .NET Framework 5.0 assemblies to use Preview 6. Using these assemblies requires you to install the .NET 5.0 preview and the latest preview release of Visual Studio 2019. Refer to the SocketTools .NET 5.0 Preview technical article for more information.
Corrected an issue with the C++ MailMessage class where new messages would be created using UTF-8 encoding, but would export the message as though it was using ASCII text.
Corrected an issue where the Windows-1252 character set was not distinguished from the ISO-8859-1 character set. Although these character sets are similar, there are subtle differences that can affect how message contents are parsed.
Expanded support for certain character sets identified as Windows code pages, such as windows-1250. They will now be properly converted to Unicode using their specific code page, rather than attempting to process the text as using an ISO character set.
Corrected an issue with the SocketTools.MailMessage .NET class which would cause properties such as From, To and Subject to return incorrect values when certain character encodings were used.
Corrected an issue which would prevent the MIME parser from correctly processing message headers which used multiple encoding methods or different character sets within the same header value.
The default encoding for all character sets is now Base64 for UTF-8 and most other character sets. Quoted-printable encoding is only used by default for messages which do not use Unicode or extended ANSI characters.
Corrected an issue that could cause an internal buffer overrun when decoding UTF-8 encoded text which used certain Unicode characters.
Exported the MimeLocalizeText helper function from the MIME API. This function is used internally to assist with localizing UTF-8 text, and has been made available to developers using the Library Edition for projects using a multi-byte character set instead of Unicode.
Added the MimeDecodeTextEx and MimeEncodeTextEx functions to the Library Edition which enables the caller to specify the character set that was used to originally encode the text. The DecodeText and EncodeText methods were added to the MailMessage .NET class and ActiveX control.
Added the options FTP_OPTION_HIRES_TIMER and HTTP_OPTION_HIRES_TIMER to return transfer times in milliseconds rather than seconds. This can be useful when calculating transfer speeds of relatively small amounts of data over fast networks.
When checking if a data is available to read, the amount of time spent waiting for network activity using the default timeout period has been reduced from 250ms to 15ms.
The options to select IPv6 connections have been renamed to reflect what the option actually does. For the Library Edition, these options were named OPTION_IPV6ONLY and have been renamed to OPTION_PREFER_IPV6. Similar options exist for the .NET classes and ActiveX controls. When these options are used, the library or component will prioritize establishing a connection using IPv6, but will fall back to using IPv4 if no IPv6 address is available or IPv6 is not enabled on the local system.
Corrected an documentation issue where the MimeDecodeText and MimeEncodeText functions in the library were exported and prototyped, but not included in the technical reference.
Expanded support for two additional key exchange algorithms used with secure TLS connections. The components will now support the Diffie-Hellman store and forward and ephemeral elliptic curve key exchange algorithms.
Corrected an issue where some component libraries and ActiveX controls had incorrect version resource information.
Updated the technical reference documentation to include the HttpPatchData function in the Library Edition and the PatchData method in the .NET Edition.
Added the .NET Core and .NET 5.0 Preview 6 assemblies to the package for the stand-alone SocketWrench installer.
Corrected an issue which could prevent certain valid e-mail addresses from being used when installing SocketTools.
Minor corrections and updates to the technical reference documentation.
The SocketTools .NET Edition now includes assemblies which target .NET Core 2.1 LTS and .NET Core 3.1 for the Windows desktop and server platforms in addition to the complete .NET Framework.
Assemblies which target the .NET Framework 5.0 preview release from Microsoft have been included with this release. Using these assemblies requires you to install the .NET 5.0 preview and the latest preview release of Visual Studio 2019.
All HTTP and HTTPS client connections will default to using HTTP 1.1, including connections through proxy servers. This addresses an issue where some servers would reject connections from clients attempting to use HTTP 1.0 through a proxy server. It is still possible for clients to explicitly specify using HTTP 1.0 if needed with a legacy server.
Corrected an issue with the FtpGetMultipleFiles function and GetMultipleFiles methods which could cause internal heap corruption when called repeatedly.
Corrected an issue where memory usage reported by the FTP and HTTP server components could be incorrect immediately after multiple clients have disconnected from the server. This functionality was introduced in the previous update.
Corrected a rare condition in the MIME component which could result in an internal buffer overflow with specially crafted UTF-8 encoded strings in message headers.
The IP location client service should provide more accurate network information for some localities outside of North America and western Europe.
Improved the method used to map regional mobile service providers to the gateways that are used with the SMS components to send text messages.
Implements a new heap management system for the FTP and HTTP server components which reduces the overall memory utilization and addresses a memory leak that could occur with a large number of client sessions.
The FtpGetServerMemoryUsage and HttpGetServerMemoryUsage functions were added to the API, and the FtpServer and HttpServer .NET classes and ActiveX controls have a new MemoryUsage property which returns the amount of memory allocated by the server for the current client connections. Refer to the technical reference documentation for more information.
Corrected an issue which could prevent a secure HTTP session from being established with a server that used TLS 1.0 and required a client certificate. Note that TLS 1.0 is considered a deprecated version of the protocol, and by default SocketTools will TLS 1.2.
Corrected an issue that could cause DNS queries for multiple MX records to fail and the last error code for the current thread would not be updated, causing confusion as to the actual cause of the failure.
Corrected an issue with the MIME components and library where they would default to incorrect 7-bit encoding when creating new messages under certain circumstances. All new messages are created using UTF-8 encoding by default.
Corrected an issue with the HTTP client components and library which could result in incomplete data being returned with an HTTP 1.1 connection using chunked data. This was an edge case that arose from the new internal buffering implemented in version 10 and only occurred under specific conditions with large payloads.
Corrected an issue with the geo IP location components and API which could prevent location data for certain valid IPv6 addresses from being returned.
Corrected an issue with the internal caching mechanism for the geo IP location components and API that would cause stale location data to be returned for a local system where the IP address has changed.
Corrected an issue with the POP3 and IMAP4 components and libraries where the last error code for the current thread would not be updated correctly under certain conditions when a secure connection could not be established with the server.
Corrected an issue with the SMTP and Text Messaging libraries and components which resulted in additional memory being unnecessarily allocated for each client session. This memory would not be released until the library or component was uninitialized or the class instance disposed.
Corrected an issue with the NNTP library and .NET class that could prevent an article from being retrieved from the server when using a 64-bit article ID value.
Corrected a potential internal buffer overrun when encrypting and decrypting string data using the AesEncryptString and AesDecryptString functions. Additional checks are performed to ensure that the output buffer provided by the caller is large enough to store the entire encrypted or decrypted string, including the terminating null character.
Corrected an issue where some 64-bit integer values, handles and memory addresses would be reported in logfiles as truncated 32-bit values when targeting a 64-bit Windows platform.
Corrected an issue in the Library Edition documentation where some APIs could reference the incorrect header file and/or import library for individual functions.
Changed the functionality of unregistering a web services application ID so that it no longer revokes the internal API key associated with it. This allows the ID assigned by the developer to be reused at a later time. Although the AppID can be reused, the key that is associated with that ID will change, and all objects previously created using that ID will be orphaned and expunged from storage.
Corrected a problem that could prevent the SocketTools .NET 2.0 and 3.5 assemblies from loading on the 64-bit Windows XP platform.
Relaxed MIME address validation to accept email addresses that included whitespace between angle-brackets within an address string. These addresses can be parsed as long as the remaining components of the address are valid.
Added functions to the Library Edition that enable an application to enumerate the application IDs that have been allocated for the account. See the WebGetFirstApplication and WebGetNextApplication functions.
Updated the function declarations for C# and Visual Basic .NET to use the Unicode versions of functions, and corrected structure members to use UnmanagedType.LPTStr instead of UnmanagedType.LPWStr, which should only be used with COM interfaces.
Updated the function declarations for PowerBASIC to correct several cases where parameters were incorrectly declared as BYVAL instead of BYREF. Padding for certain structure members was added to address specific alignment issues.
Corrected an issue where some web services functions that should return a Boolean result would return a value of -1 if an error occurred. This would result in an operation appearing to succeed when it actually failed.
Relaxed installation requirements to allow for valid email addresses that would otherwise be rejected. It is still required for developers to register their SocketTools license using an individual email address, and not a generic corporate-wide email address.
Minor improvements and updates to the documentation.
A new private cloud storage component which enables applications to store and manage data remotely, without having to use public third-party providers or subscribe to another service. You can store configuration files or other data to the SocketTools storage service and then access that from within your application from any location. The data is stored securely, and all connections to the server use TLS 1.2 and AES 256-bit encryption. Because there are no public endpoints to the data that you store, it's not possible for another application to access your data using external links. The data you store is associated with your development license and can only be accessed by your software.
[.NET Edition] [ActiveX Edition] [Library Edition]
A new geographical IP location component which enables your application to obtain specific information about the physical location of the computer system your software is running on. This component uses the external IP address of the local computer to determine its location and will return general information such as the country, city name and what service provider they are using. It can also return more specific location information such as longitude, latitude and GPS coordinates.
[.NET Edition] [ActiveX Edition] [Library Edition]
New general-purpose encryption functionality that enables you to encrypt and decrypt data files or blocks of memory using AES 256-bit encryption and a SHA-256 hashed password to generate the encryption and decryption key. This can be combined with the storage service to encrypt the data that your application stores. There is also the ability to generate encrypted strings which are base64 encoded and safe to store as text.
[.NET Edition] [ActiveX Edition] [Library Edition]
Added support for TLS 1.3. When Microsoft makes it generally available for Windows 10 and Windows Server 2019, SocketTools will support the latest version of TLS. Because SocketTools uses Microsoft's CryptoAPI and Schannel provider, TLS 1.3 support will only work on those versions of Windows which are updated to use this version of the protocol. Currently, TLS 1.2 remains the default version used to establish secure connections. Earlier versions of TLS have been deprecated, but your applications can still use them if you need to connect to legacy servers which have not been updated.
Updated for the latest changes in Windows 10 Build 1903 and Windows Server 2019. Examples have been included for the current release of Visual Studio 2019 and the .NET Framework 4.8. SocketTools 10 continues to provide backwards compatibility for Windows XP SP3 and Windows Server 2003, however certain functionality has been deprecated, particularly in terms of secure connections. Those legacy platforms only support TLS 1.0 and applications running on them will be unable to establish secure connections to most modern services. Secure connections using TLS 1.2 require Windows 7 SP1 or Windows Server 2008 R2 or later.
Improved support for the use of TLS client certificates in combination with TLS 1.2 session renegotiation. Client certificates are typically used to authenticate the session, and this change supports servers which periodically attempt to renegotiate the cryptographic parameters throughout the client session.
Improved internal performance for HTTP and HTTPS connections, particularly when the client is making many repeated requests for relatively small amounts of data.
Added options to make it easier to handle error responses when requesting a resource or submitting data to a web server. When submitting XML or JSON formatted requests, you can request that any error messages be returned to your application on an individual basis, rather than the function or method always returning an error.
Improved general support for Unicode and the use of internationalized domain names. SocketTools will automatically convert domain names which contain Unicode characters to Punycode encoding. Several helper functions were added to the API to assist with conversion to UTF-8 encoding.
Improved support for the NNTP protocol to allow for article IDs that exceed the maximum value of a signed 32-bit integer. Extended functions allow for the use of unsigned 64-bit integers as article numbers.
Added support for generating base64 encoded HMAC message digests using SHA-256, SHA-384 and SHA-512. This can be useful for services which require the use of these digests.
Improved performance for the FTP and HTTP server components working over local intranets using shared folders that are not mapped to drives on the host system.
Numerous updates and corrections to issues reported with SocketTools 9 have been included with SocketTools 10, providing a cumulative update to those issues reported with the previous version.