A POP3 adapter for BizTalk 2004: Phase I - Planning

A few days ago I suggested that if people were interested, I could explain how to write a BizTalk 2004 adapter and demonstrate the concepts by building a POP3 adapter.

BizTalk 2004 ships with the Adapter Framework (https://msdn.microsoft.com/library/en-us/sdk/htm/ebiz_prog_customadapt_zqbw.asp?frame=true) which allows the creation of custom adapters. In this post (and probably a few others), I explain how one could write a POP3 adapter. The RFC for the POP3 protocol is defined at https://www.faqs.org/rfcs/rfc1939.html.

Before implementing a custom adapter, we must decide how the adapter is going to behave. Is this adapter going to send, receive? Is it going to be a transport adapter or an application adapter? The most critical questions to answer are located at https://msdn.microsoft.com/library/en-us/sdk/htm/ebiz_prog_customadapt_ihse.asp?frame=true.

Our POP3 adapter will be a One-way Receive only Transport adapter hosted in-process. This means that we implement an adapter that communicates with the outside world using a specific protocol and only receive messages from the POP3 server (POP3 does not allow us to send messages to the server). Moreover, the adapter does not need to be hosted in an external process (IIS for instance) so it will be hosted by a BizTalk host.

The adapter will support Batch since all receive adapter support batch. Moreover, all receive adapters are Asynchronous for maximum performances. Our POP3 adapter will be Non transactional since POP3 does not support transactions. To support those features, the above link informs us that our adapter needs to implement the following interfaces:

IBTTransport

IBTTransportControl

IBTTransportConfig

IBaseComponent

IPersistPropertyBag

IBTBatchCallBack

POP3 allows many different type of authorization and the most common is USER/PASS. We will first implement this method without any loss of generality. USER/PASS requires the password to be sent in clear text to the server. To securely store this password, we will use Single Sign On (SSO) (https://msdn.microsoft.com/library/en-us/deploying/htm/ebiz_depl_sso_ifot.asp?frame=true). 

In the next phase, I will discuss how to implement those interfaces.