Build 3333: Keyword support in IMAP and TNEF (winmail.dat) support in MIME parser

This build mostly adds features that didn't made it into the previous release.

Keyword support in IMAP

Support for keywords (also known as custom flags) has been added to Rebex IMAP component due to numerous user requests. New overloads for SetMessageInfo method were added and ImapMessageInfo class has new GetKeywords method. However, not all IMAP servers support custom flags, so make sure to check Imap object's CurrentFolder.SupportedFlags and PermanentFlags properties to make sure this feature is available.

TNEF (winmail.dat) support in MIME parser

Perhaps you receive an unreadable e-mail with the infamous winmail.dat attachment once in a while. This uses the Microsoft TNEF format that is unsupported by most mail clients - except Outlook. This release of Rebex Mail (and its Secure, POP3 and IMAP variants) adds experimental support for reading these e-mails. Next time you load an e-mail with a TNEF attachment, it should be parsed automatically. Please be aware that this is single-purpose winmail.dat parser, not a general-purpose TNEF parser.

Complete list of changes:

  • IMAP: Added support for keywords (custom flags).
  • IMAP: Added a workaround for qq.com IMAP server that advertises PLAIN authentication method support but only accepts LOGIN.
  • SMTP: Fixed a problem with sending messges using "binary" content transfer encoding and parsed using DoNotParseMimeTree option.
  • SMTP: Fixed a problem in ResolveDomainMX that caused it to 'resolve' domains that don't exist.
  • MIME: Added experimental TNEF (winmail.dat) support to MailMessage class.
  • MIME: Added MimeOptions.OnlyParseHeaders option to make it easily possible to parse message headers only.
  • MIME: Fixed a problem with badly-formed MailMessage that was produced after being parsed with DoNotParseMimeTree option.
  • MIME: It is now possible to set BodyHtml and BodyText to null.
  • FTP: When client certificate authentication is done with Tumbleweed FTP server, an automated login attempt is performed.
  • FTP: FileExists and DirectoryExists methods modified to return the result for "." and "/" arguments instantly without asking the server.
  • FTP: Fixed a workaround for problem with local IP address announced by the server when connecting through ActiveSync to an FTP server that runs on the same machine.
  • FTP: KeepAliveDuringTransfer option made compatible with more FTP servers.
  • SCP: Scp.Logger renamed to Scp.LogWriter to match the other objects including Sftp.
  • SCP: Fixed improper handling of the first success response.
  • SFTP: Detection of GlobalScape server enhanced to properly detect more versions.
  • SSH: Banner message is now logged when using the LogWriter fuctionality.
  • SSH: Added workaround for badly-formed DSA signature produced by SSH Secure Shell 3.1.0 (and possibly other versions).
  • SSH: Added a workaround to the Compact Framework version for VanDyke VShell server that sends primes that are one bit longer than expected.
  • All: Asynchronous operations now use a thread pool.
  • Terminal: Shell.Close method added to make it possible to gracefully close an SSH shell session.
  • Terminal: Added a variant of SendCommand method that makes it possible to send 'invisible' data such as passwords.
  • Terminal: Prompt-matching changed to make it possible to match beginning of a line.
  • SecureSocket: Exception thrown because of certificate hostname mismatch is more descriptive.
  • ProxySocket: Fixed a bug in Socks4/Socks5 proxy code that made it impossible to use active mode with these proxies.
  • Security: CertificateStore.FindCertificate overloads that accept DistinguishedName now search for certificates signed by intermediate CAs as well.
  • Security: Enhanced treatment of empty passwords in the PFX loader.
  • Security: Certificates with SubjectAlternativeName extension marked as critical are now treated as not having any e-mail address assigned to them if no e-mail address is found in the extension data.
  • Security: Fixed a bug in DiffeHellmanManaged.ImportParameters method that made it impossible to import key with all parameters filled.

Also, we would like some feedback on the recursive/wildcard transfers added in the previous release. If you have tried using this feature, please let us know about it!