SMTP.h
上传用户:geanq888
上传日期:2007-01-03
资源大小:316k
文件大小:5k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. /*
  2. Module : SMTP.H
  3. Purpose: Defines the interface for a MFC class encapsulation of the SMTP protocol
  4. Created: PJN / 22-05-1998
  5. History: None
  6. Copyright (c) 1998 by PJ Naughter.  
  7. All rights reserved.
  8. */
  9. #include <afxtempl.h>
  10. #include <afxpriv.h>
  11. /////////////////////////////// Defines ///////////////////////////////////////
  12. #ifndef __SMTP_H__
  13. #define __SMTP_H__
  14. #ifndef __AFXTEMPL_H__
  15. #pragma message("SMTP classes require afxtempl.h in your PCH")                                                                                
  16. #endif
  17. #ifndef _WINSOCKAPI_
  18. #pragma message("SMTP classes require afxsock.h or winsock.h in your PCH")
  19. #endif
  20. #ifndef __AFXPRIV_H__
  21. #pragma message("SMTP classes requires afxpriv.h in your PCH")
  22. #endif
  23.   
  24. /////////////////////////////// Classes ///////////////////////////////////////
  25. //Simple Socket wrapper class
  26. class CSMTPSocket
  27. {
  28. public:
  29. //Constructors / Destructors
  30.   CSMTPSocket();
  31.   ~CSMTPSocket();
  32. //methods
  33.   BOOL  Create();
  34.   BOOL  Connect(LPCTSTR pszHostAddress, int nPort = 110);
  35.   BOOL  Send(LPCSTR pszBuf, int nBuf);
  36.   void  Close();
  37.   int   Receive(LPSTR pszBuf, int nBuf);
  38.   BOOL  IsReadible(BOOL& bReadible);
  39. protected:
  40.   BOOL   Connect(const SOCKADDR* lpSockAddr, int nSockAddrLen);
  41.   SOCKET m_hSocket;
  42. };
  43. //Encapsulation of an SMTP email address, used for recipients and in the From: field
  44. class CSMTPAddress
  45. {
  46. public: 
  47. //Constructors / Destructors
  48.   CSMTPAddress() {};
  49. CSMTPAddress(const CString& sAddress);
  50. CSMTPAddress(const CString& sFriendly, const CString& sAddress);
  51. CSMTPAddress& operator=(const CSMTPAddress& r);
  52. //Methods
  53.   CString GetRegularFormat() const;
  54. //Data members
  55. CString m_sFriendlyName; //Would set it to contain something like "PJ Naughter"
  56.   CString m_sEmailAddress; //Would set it to contains something like "pjn@indigo.ie"
  57. };
  58. //Encapsulation of an SMTP File attachment
  59. class CSMTPAttachment
  60. {
  61. public:
  62. //Constructors / Destructors
  63. CSMTPAttachment();
  64.   ~CSMTPAttachment();
  65. //methods
  66.   BOOL Attach(const CString& sFilename);
  67.   CString GetFilename() const { return m_sFilename; };
  68.   const char* GetEncodedBuffer() const { return m_pszEncoded; };
  69.   int GetEncodedSize() const { return m_nEncodedSize; };
  70. protected:
  71.   int Base64BufferSize(int nInputSize);
  72.   BOOL EncodeBase64(const char* aIn, int aInLen, char* aOut, int aOutSize, int* aOutLen);
  73.   static char m_base64tab[];
  74.   CString  m_sFilename;    //The filename you want to send
  75.   char*    m_pszEncoded;   //The encoded representation of the file
  76.   int      m_nEncodedSize; //size of the encoded string
  77. };
  78. ////////////////// Forward declaration
  79. class CSMTPConnection;
  80. //Encapsulation of an SMTP message
  81. class CSMTPMessage
  82. {
  83. public:
  84. //Constructors / Destructors
  85.   CSMTPMessage(LPCSTR, BOOL, BOOL);
  86.   ~CSMTPMessage();
  87. //methods
  88. int              AddRecipient(CSMTPAddress& recipient);
  89. void             RemoveRecipient(int nIndex); 
  90. CSMTPAddress     GetRecipient(int nIndex) const;
  91. int              GetNumberOfRecipients() const;
  92. int              AddAttachment(CSMTPAttachment* pAttachment);
  93. void             RemoveAttachment(int nIndex);
  94. CSMTPAttachment* GetAttachment(int nIndex) const;
  95.   int              GetNumberOfAttachments() const;
  96.   virtual CString  GetHeader() const;
  97.   void             AddBody(const CString& sBody);
  98. //Data Members
  99. CSMTPAddress m_From;
  100. CString      m_sSubject;
  101.   CString      m_sXMailer;
  102. CSMTPAddress m_ReplyTo;
  103.   BOOL         m_bWithXMailer;
  104.   BOOL         m_bWithDate;
  105. protected:
  106.   void FixSingleDot(CString& sBody);
  107. CString m_sBody;
  108. CArray<CSMTPAddress, CSMTPAddress&> m_Recipients;
  109.   CArray<CSMTPAttachment*, CSMTPAttachment*&> m_Attachments;
  110.   friend class CSMTPConnection;
  111. };
  112. //The main class which encapsulates the SMTP connection
  113. class CSMTPConnection
  114. {
  115. public:
  116. //Constructors / Destructors
  117.   CSMTPConnection();
  118.   ~CSMTPConnection();
  119. //Methods
  120.   BOOL    Connect(LPCTSTR pszHostName, int nPort=25);
  121.   BOOL    Disconnect();
  122.   CString GetLastCommandResponse() const { return m_sLastCommandResponse; };
  123.   int     GetLastCommandResponseCode() const { return m_nLastCommandResponseCode; };
  124.   DWORD   GetTimeout() const { return m_dwTimeout; };
  125.   void    SetTimeout(DWORD dwTimeout) { m_dwTimeout = dwTimeout; };
  126. BOOL    SendMessage(CSMTPMessage& Message);
  127. protected:
  128. BOOL ReadCommandResponse(int nExpectedCode);
  129. BOOL ReadResponse(LPSTR pszBuffer, int nBuf, LPSTR pszTerminator, int nExpectedCode);
  130.   CSMTPSocket m_SMTP;
  131.   BOOL        m_bConnected;
  132.   CString     m_sLastCommandResponse;
  133. DWORD       m_dwTimeout;
  134.   int         m_nLastCommandResponseCode;
  135. };
  136. #endif //__SMTP_H__