Version: 3.0.3.2
Securely send, receive, preview, edit, sign/verify, and encrypt/decrypt email messages in any .NET project. 

PowerTCP Mail for .NET enables software developers to add mail capabilities to .NET Windows and ASP.NET applications. In addition, the option of securing the connection to the mail server ensures that data cannot be intercepted, while allowing servers and clients to be authenticated. Written in C#, the components and objects include support for SMTP, POP3, IMAP4, and S/MIME. The core MessageStream technology is designed for message creation and editing, while helper classes assist in managing email addresses. Security options include support for TLS, SSL 3.0, SSL 2.0, and PCT, plus the ability to auto-negotiate connections with secure mail servers. Support is also included for client and server authentication using x.509 digital certificates, and the ability to manage those certificates.  S/MIME signing, encryption and decryption is fully supported.

Background:
E-mail technology is based on three transfer protocols, SMTP, POP, and IMAP, plus protocols that describe the structure of mail messages. The MIME protocol defines complex message structure, several common encoding techniques such as Base64, Quoted-Printable, and Y-Encoding. The SMTP protocol is used for sending mail messages across the Internet, the POP protocol is used for downloading mail messages, and the IMAP protocol is advancement over POP for downloading messages. While mail protocols are most often used for traditional mail applications such as Outlook, they are also utilized for application notification systems, proxies, and automated e-mail scanning systems.

Modern mail servers support the ability to establish secure connections using public-key encryption. The PowerTCP Mail for .NET component supports both Explicit and Implicit techniques for establishing secure connections. Both methods allow users to be authenticated, and ensure that data is secure.

Technical Solution:
PowerTCP Mail for .NET includes three .NET components for SMTP, POP, and IMAP that enable sending, receiving, and managing messages on a remote server, while providing the options of x.509 certificate authentication and data encryption. The DartMessageStream class, which handles MIME encoding and decoding, is used for authoring new messages, or editing and reviewing received messages. Encoding of Base64, Quoted-Printable, UUencode, and Y-encoding is handled through an enumeration. E-mail address management is provided through helper classes that assist in manipulating large numbers of addresses, and provide for mail address verification.

To simplify complex message creation, HTML messages can be constructed by either passing the location of an HTML page, or the actual HTML data, to a constructor of the MessageStream class. Once initialized with the HTML data, the MessageStream will expose the different parts of the message in an object-oriented manner.

Multi-national character sets are supported for both encoding and decoding. This allows for the creation of messages that are targeted for other countries. By default, new messages use the character set of the operating system so using the product in any country is seamless.

The Smtp component supports DSN (Delivery Status Notification). Support for advanced mail features such as SIZE-(verifying the maximum message size a server will allow) is also included. For ease-of-use, the component can send a MessageStream object or just text. As a message is sent, MIME encoding occurs on the fly.

The Pop component simplifies session management by enabling the developer to choose whether to automate certain tasks such as message retrieval, message deletion, and automatic logout.. The component also lets a developer specify whether attachments should be automatically saved as files or placed into MemoryStreams. Other useful features include the ability to track the last message downloaded from a server, whether to download complete messages or just header information, and easy access to all downloaded messages as an array.

The Imap component is based on some of the latest revisions to the IMAP protocol. All major IMAP capabilities are included such as searching, listing, subscribing/unsubscribing, and retrieving message sections. Mailboxes are accessed as a collection and the Imap component tracks the currently active mailbox. Support for advanced features such as Idle, in which the server sends unsolicited updates about a mailbox, is included. The inclusion of such options as automatically retrieving mailbox listings after login, and automatically purging mailboxes of deleted messages, simplify session management.

Security can easily be turned on or off by setting a property, Certificates are managed through a convenient CertificateStore object that returns Certificate objects representing x.509 certificates. The CertificateStore object manages certificates in a specified location, and can be used to search for certificates that meet specific criteria. The Certificate object contains detailed information about a certificate, such as its Friendly Name and its serial number. After receiving a certificate, this information can be used to decide its validity. For example, if the domain name or the Certificate Authority does not meet security requirements, the application can choose to end the connection rather than authenticate the remote host.

For debugging help during the development process, the mail components include design-time Editors that allow you test connections to a mail servers without compiling. Properties set in the Editor are recorded directly in your code, and a real-time feedback window gives you a detailed view of client-server communications. All components also include the ability to output trace information and progress indicators.

Technical Innovation:
The Smtp, Pop, and Imap components are designed for ease-of-use, while preserving flexibility when requirements change. All components support Implicit and Explicit security, as servers can support both these implementations. Not all developers require both encryption and authentication, and to accommodate these requirements, authentication can be ignored by setting a property.

The heart of PowerTCP Mail for .NET is the MessageStream class. This class is designed to represent a message and is architected as a stream with all its parts also represented as streams. This architecture provides easy interoperation with other .NET streams and objects that consume streams, increasing flexibility. The MessageStream handles MIME encoding/decoding and performs these operations on-the-fly when passed to the Smtp component, or retrieved from the Pop or Imap components. The different characteristics of a message are represented in an object-oriented manner through properties, with all parts recursive. This means that if a message has an attachment which is itself a message, that message is also represented as a MessageStream. Parts are kept as collections of none-MIME text, non-MIME attachments, simple in-line MIME parts, MIME attachments, and complex (multi-part) MIME parts. This allows for the fine-tuning of the message structure. If such low-level control is not required, a higher-level collection of general attachments is also available.

The MessageStream class also has the ability to save a message to disk. The resulting message can easily be loaded using Outlook Express or any other mail client that supports ASCII mail messages. Conversely, , a message (such as one saved with Outlook Express) can be loaded into a MessageStream from disk The save and load capabilities perform an automatic encoding and decoding operation respectively.

The Imap component is designed to present a local representation of a remote server while preserving the hierarchical structure of the mailboxes in an object-oriented manner. This means that the structure of an account on a remote server is represented as a collection of mailboxes that can be queried for their messages and child mailboxes. The architecture is recursive, allowing for access to every subordinate level of mailboxes. At any time, a mailbox can be added, deleted, or modified.

Developers can choose to write code in a blocking manner, meaning that execution of code does not proceed until a function call (such as getting all the messages from a server) completes. Alternatively, code can be written in a non-blocking manner, in which case an event will be raised when the method completes. Allowing for both approaches enables users to choose their preferred method of development, based on the needs of their application. These techniques use a multi-threaded design, which can increase application performance by avoiding bottlenecks.

Usage Scenarios
Typical usage of PowerTCP Mail for .NET includes the creation of custom mail client applications, as well as the incorporation of mail handling capabilities into different types of applications. These applications include Web Mail client implementations designed to work with corporate mail servers. E-mail protocols are also useful as notification mechanisms. An application can send communiques to specific individuals when notable situations occur, or check the mail server for messages that indicate a need to take certain actions. Imap is often used for automated management tasks, such as checking messages in a particular mailbox for spam. Often a higher level of security or authentication is required, beyond the standard mail login technique. The secure components of Mail for .NET provides the means for implementing this security.

Details:

Feature PowerTCP Major Competitors Native .NET
Standards Compliance Follows RFC 822, 821, 2060, 1939, 1869, 1891 Follow RFC 822, 821, 1939, 1869, 1891, and parts of 2060. Supports 822 and 821.
Licensing Per Developer/Royalty Free Per Developer/Royalty Free Simple SMTP part of Framework
HTML Mail Support Can be created from a file location or a stream using the MessageStream constructor. Varies. Limited
Support for Mail Security Supports both Implicit and Explicit security. Usually only support a single option or no security. Not Available
Certificate Management A CertificateStore object returns certificates as Certificate objects that can be queried for information. Varies. Not Available
Encoding Support Base64, Quoted-Printable, UUEncode, and Y-Encoding. Varies. Base64 and UUEncode
Message Handling A MessageStream class that represents a message in an object-oriented manner and allows for messages to be saved/loaded to/from disk. Can be used with all mail components. As a string that requires manual parsing or limited object support. Allows for simple message construction
Part Handling Parts are handled as recursive collections of streams, segregated by the type of part, but also include higher-level attachment support. Varies from simple arrays to a collection of attachments. Allows simple file attachments represented as an array.
Mail Address Handling MailAddress object breaks apart an address into pieces while the MailAddresses collection provides for address verification and list management. A text string or an array of strings. Text string
IMAP Capabilities Supports latest IMAP capabilities and a local representation of a remote server while preserving the hierarchical structure of the mailboxes. Limited IMAP feature support and limited ability to transverse a Mailbox structure. Not Available
POP Capabilities Presents messages as an array or MessageStreams and includes numerous code-saving features. Little code-saving features and often requires users to parse for specific information. Not Available
SMTP Capabilities Supports DSN and other modern features such as SIZE. Varies. Simple message sending. No advanced features.
Methodology for Sending Commands to the Server Data is sent using methods and can be received in either a method for synchronous operations or an Event for asynchronous operation. Data is sent using methods and received in an Event No event notification for sending. Other commands not supported.
Architecture Both Synchronous (blocking) and Asynchronous (non-blocking) using multi-threading. Asynchronous Only (non-blocking) Synchronous only.
Samples Ships with ASP.NET, C#, and VB.NET samples Varies .NET Documentation
Design Data is managed using overloaded methods that support different datatypes, plus full access is granted to the underlying TCP connection for advanced usage. Data is handled with strings or bytes through different methods. Designed for sending basic messages.
Documentation Comprehensive help that is integrated with the Visual Studio IDE using the Help 2.0 engine with full dynamic help and tutorials. Use the Help 1.3 engine and provide minimal documentation. Limited