www.pudn.com > popmail.zip > Pop3.h


/* 
Module : POP3.H 
Purpose: Defines the interface for a MFC class encapsulation of the POP3 protocol 
Created: PJN / 04-05-1998 
 
  Copyright (c) 1998 - 2001 by PJ Naughter.  (Web: www.naughter.com, Email: pjna@naughter.com) 
   
	All rights reserved. 
	 
	  Copyright / Usage Details: 
	   
		You are allowed to include the source code in any product (commercial, shareware, freeware or otherwise)  
		when your product is released in binary form. You are allowed to modify the source code in any way you want  
		except you cannot modify the copyright details at the top of each module. If you want to distribute source  
		code with your application, then you are only allowed to distribute versions released by the author. This is  
		to maintain a single distribution point for the source code.  
		 
*/ 
 
 
/////////////////////////////// Defines /////////////////////////////////////// 
#ifndef __POP3_H__ 
#define __POP3_H__ 
 
#ifndef __AFXTEMPL_H__ 
#pragma message("POP3 classes require afxtempl.h in your PCH")																				   
#endif 
 
#ifndef _WINSOCKAPI_ 
#pragma message("POP3 classes require afxsock.h or winsock.h in your PCH") 
#endif 
 
 
/////////////////////////////// Classes /////////////////////////////////////// 
 
////// forward declaration 
class CPop3Connection; 
 
//Encapsulation of a POP3 message 
class CPop3Message 
{ 
public: 
	//Constructors / Destructors 
	CPop3Message(); 
	~CPop3Message(); 
	 
	//Methods 
	LPCSTR	GetMessageText() const { return m_pszMessage; }; 
	CString GetHeader() const; 
	CString GetHeaderItem(const CString& sName, int nItem = 0) const; 
	CString GetBody() const; 
	LPCSTR	GetRawBody() const; 
	CString GetSubject() const { return GetHeaderItem(_T("Subject")); } 
	CString GetFrom() const 	 { return GetHeaderItem(_T("From")); } 
	CString GetDate() const 	 { return GetHeaderItem(_T("Date")); } 
	CString GetTo() const	 { return GetHeaderItem(_T("To")); } 
	CString GetCC() const		 { return GetHeaderItem(_T("CC")); } 
	CString GetReplyTo() const; 
	CString GetContentType() const; 
	CString GetBoundary() const; 
 
	//protected: 
	char* m_pszMessage; 
	 
	friend class CPop3Connection; 
}; 
 
 
//Simple Socket wrapper class 
class CPop3Socket 
{ 
public: 
	//Constructors / Destructors 
	CPop3Socket(); 
	~CPop3Socket(); 
	 
	//methods 
	BOOL	Create(); 
	BOOL	Connect(LPCTSTR pszHostAddress, int nPort = 110); 
	BOOL	Send(LPCSTR pszBuf, int nBuf); 
	void	Close(); 
	int		Receive(LPSTR pszBuf, int nBuf); 
	BOOL	IsReadible(BOOL& bReadible); 
	 
protected: 
	BOOL		Connect(const SOCKADDR* lpSockAddr, int nSockAddrLen); 
	SOCKET		m_hSocket; 
	 
	friend class CPop3Connection; 
}; 
 
 
//The main class which encapsulates the POP3 connection 
class CPop3Connection 
{ 
public: 
	//Constructors / Destructors 
	CPop3Connection(); 
	~CPop3Connection(); 
	 
	//Methods 
	BOOL		Connect(LPCTSTR pszHostName, LPCTSTR pszUser, LPCTSTR pszPassword, int nPort = 110); 
	BOOL		Disconnect(); 
	BOOL		Statistics(int& nNumberOfMails, int& nTotalMailSize); 
	BOOL		Delete(int nMsg); 
	BOOL		GetMessageSize(int nMsg, DWORD& dwSize); 
	BOOL		GetMessageID(int nMsg, CString& sID); 
	BOOL		Retrieve(int nMsg, CPop3Message& message); 
	BOOL		GetMessageHeader(int nMsg, CPop3Message& message); 
	BOOL		Reset(); 
	BOOL		UIDL(); 
	BOOL		Noop(); 
	CString 	GetLastCommandResponse() const { return m_sLastCommandResponse; }; 
	DWORD		GetTimeout() const { return m_dwTimeout; }; 
	void		SetTimeout(DWORD dwTimeout) { m_dwTimeout = dwTimeout; }; 
	 
protected: 
	virtual BOOL	ReadStatResponse(int& nNumberOfMails, int& nTotalMailSize); 
	virtual BOOL	ReadCommandResponse(); 
	virtual BOOL	ReadListResponse(int nNumberOfMails); 
	virtual BOOL	ReadUIDLResponse(int nNumberOfMails); 
	virtual BOOL	ReadReturnResponse(CPop3Message& message, DWORD dwSize); 
	virtual BOOL	ReadResponse(LPSTR pszBuffer, int nInitialBufSize, LPSTR pszTerminator, LPSTR* ppszOverFlowBuffer, int nGrowBy=4096); 
	BOOL			List(); 
	LPSTR			GetFirstCharInResponse(LPSTR pszData) const; 
	 
	CPop3Socket		m_Pop; 
	int 			m_nNumberOfMails; 
	BOOL			m_bListRetrieved; 
	BOOL			m_bStatRetrieved; 
	BOOL			m_bUIDLRetrieved; 
	CDWordArray		m_msgSizes; 
	CStringArray	m_msgIDs; 
	BOOL			m_bConnected; 
	CString			m_sLastCommandResponse; 
	DWORD			m_dwTimeout; 
}; 
 
 
#endif //__POP3_H__