private void Initialise(object mailItem, bool bUseCache, bool disableAccessToDOMAttachments)
        {
            if (null == mailItem)
                throw new ArgumentNullException("mailItem");

			m_outlookMail = mailItem as MSOutlook.MailItem;
			if (null == m_outlookMail)
				throw new ArgumentNullException("m_outlookMail");

			m_oif = new OutlookIImplFactory();
			m_mailItem = m_oif.CreateWSMail(m_outlookMail);

			m_outlookRecipientTableProxy = new RedemptionRecipientTableProxy(m_outlookMail, bUseCache);

			m_outlookToRecipientsProxy = new RedemptionRecipientsProxy(m_outlookRecipientTableProxy, OutlookRecipientTypes.ToRecipient);
			m_outlookCcRecipientsProxy = new RedemptionRecipientsProxy(m_outlookRecipientTableProxy, OutlookRecipientTypes.CcRecipient);
			m_outlookBccRecipientsProxy = new RedemptionRecipientsProxy(m_outlookRecipientTableProxy, OutlookRecipientTypes.BccRecipient);
            m_outlookAttachmentsProxy = new RedemptionAttachmentsProxy(m_outlookMail, disableAccessToDOMAttachments);

			m_bIsValid = true;
		}
		private void Dispose(bool disposing)
		{
			if (m_Disposed)
				return;

			m_Disposed = true;

			if (disposing)
			{
			}

			if (m_outlookAttachmentsProxy != null)
			{
				m_outlookAttachmentsProxy.Dispose();
				m_outlookAttachmentsProxy = null;
			}
			if (m_outlookToRecipientsProxy != null)
			{
				m_outlookToRecipientsProxy.Dispose();
				m_outlookToRecipientsProxy = null;
			}
			if (m_outlookCcRecipientsProxy != null)
			{
				m_outlookCcRecipientsProxy.Dispose();
				m_outlookCcRecipientsProxy = null;
			}
			if (m_outlookBccRecipientsProxy != null)
			{
				m_outlookBccRecipientsProxy.Dispose();
				m_outlookBccRecipientsProxy = null;
			}
			if (m_outlookRecipientTableProxy != null)
			{
				m_outlookRecipientTableProxy.Dispose();
				m_outlookRecipientTableProxy = null;
			}

			if (m_mailItem != null)
			{
				m_mailItem.Dispose();
				m_mailItem = null;
			}

			m_outlookMail = null;
		}