📄 inetmail.h
字号:
); virtual void OnSendMail( const PCaselessString & sender // Name of sender. ); // Common code for OnMAIL(), OnSEND(), OnSOML() and OnSAML() funtions. /** Read a standard text message that is being received by the socket. The text message is terminated by a line with a '.' character alone. The default behaviour is to read the data into the <CODE>buffer</CODE> parameter until either the end of the message or when the <CODE>messageBufferSize</CODE> bytes have been read. @return TRUE if partial message received, FALSE if the end of the data was received. */ virtual BOOL OnTextData(PCharArray & buffer, BOOL & completed); /** Read an eight bit MIME message that is being received by the socket. The MIME message is terminated by the CR/LF/./CR/LF sequence. The default behaviour is to read the data into the <CODE>buffer</CODE> parameter until either the end of the message or when the <CODE>messageBufferSize</CODE> bytes have been read. @return TRUE if partial message received, FALSE if the end of the data was received. */ virtual BOOL OnMIMEData(PCharArray & buffer, BOOL & completed); // Member variables BOOL extendedHello; BOOL eightBitMIME; PString fromAddress; PString fromPath; PStringList toNames; PStringList toDomains; PINDEX messageBufferSize; enum { WasMAIL, WasSEND, WasSAML, WasSOML } sendCommand; StuffState endMIMEDetectState;};//////////////////////////////////////////////////////////////////////////////// PPOP3/** A TCP/IP socket for the Post Office Protocol version 3. When acting as a client, the procedure is to make the connection to a remote server, then to retrieve a message using the following procedure: <PRE><CODE> PPOP3Client mail("popserver"); if (mail.IsOpen()) { if (mail.LogIn("Me", "password")) { if (mail.GetMessageCount() > 0) { PUnsignedArray sizes = mail.GetMessageSizes(); for (PINDEX i = 0; i < sizes.GetSize(); i++) { if (mail.BeginMessage(i+1)) mail.Read(myMessage, sizes[i]); else PError << "Error getting mail message." << endl; } } else PError << "No mail messages." << endl; } else PError << "Mail log in failed." << endl; } else PError << "Mail conection failed." << endl; </PRE></CODE> When acting as a server, a descendant class would be created to override at least the <A>HandleOpenMailbox()</A>, <A>HandleSendMessage()</A> and <A>HandleDeleteMessage()</A> functions. Other functions may be overridden for further enhancement to the sockets capabilities, but these will give a basic POP3 server functionality. The server socket thread would continuously call the <A>ProcessMessage()</A> function until it returns FALSE. This will then call the appropriate virtual function on parsing the POP3 protocol. */class PPOP3 : public PInternetProtocol{ PCLASSINFO(PPOP3, PInternetProtocol) public: enum Commands { USER, PASS, QUIT, RSET, NOOP, STATcmd, LIST, RETR, DELE, APOP, TOP, UIDL, NumCommands }; protected: PPOP3(); /** Parse a response line string into a response code and any extra info on the line. Results are placed into the member variables <CODE>lastResponseCode</CODE> and <CODE>lastResponseInfo</CODE>. The default bahaviour looks for a space or a '-' and splits the code and info either side of that character, then returns FALSE. @return Position of continuation character in response, 0 if no continuation lines are possible. */ virtual PINDEX ParseResponse( const PString & line // Input response line to be parsed ); // Member variables static PString okResponse; static PString errResponse;};/** A TCP/IP socket for the Post Office Protocol version 3. When acting as a client, the procedure is to make the connection to a remote server, then to retrieve a message using the following procedure: <PRE><CODE> PPOP3Client mail; if (mail.Connect("popserver")) { if (mail.LogIn("Me", "password")) { if (mail.GetMessageCount() > 0) { PUnsignedArray sizes = mail.GetMessageSizes(); for (PINDEX i = 0; i < sizes.GetSize(); i++) { if (mail.BeginMessage(i+1)) mail.Read(myMessage, sizes[i]); else PError << "Error getting mail message." << endl; } } else PError << "No mail messages." << endl; } else PError << "Mail log in failed." << endl; } else PError << "Mail conection failed." << endl; </PRE></CODE> */class PPOP3Client : public PPOP3{ PCLASSINFO(PPOP3Client, PPOP3) public: /** Create a TCP/IP POP3 protocol socket channel. The parameterless form creates an unopened socket, the form with the <CODE>address</CODE> parameter makes a connection to a remote system, opening the socket. The form with the <CODE>socket</CODE> parameter opens the socket to an incoming call from a "listening" socket. */ PPOP3Client(); /** Destroy the channel object. This will close the channel and as a client, QUIT from remote POP3 server. */ ~PPOP3Client(); // Overrides from class PChannel. /** Close the socket, and if connected as a client, QUITs from server. @return TRUE if the channel was closed and the QUIT accepted by the server. */ virtual BOOL Close(); // New functions for class. /** Log into the POP server using the mailbox and access codes specified. @return TRUE if logged in. */ BOOL LogIn( const PString & username, // User name on remote system. const PString & password // Password for user name. ); /** Get a count of the number of messages in the mail box. @return Number of messages in mailbox or -1 if an error occurred. */ int GetMessageCount(); /** Get an array of a integers representing the sizes of each of the messages in the mail box. @return Array of integers representing the size of each message. */ PUnsignedArray GetMessageSizes(); /** Get an array of a strings representing the standard internet message headers of each of the messages in the mail box. Note that the remote server may not support this function, in which case an empty array will be returned. @return Array of strings continaing message headers. */ PStringArray GetMessageHeaders(); /* Begin the retrieval of an entire message. The application may then use the <A>PApplicationSocket::ReadLine()</A> function with the <CODE>unstuffLine</CODE> parameter set to TRUE. Repeated calls until its return valus is FALSE will read the message headers and body. @return Array of strings continaing message headers. */ BOOL BeginMessage( PINDEX messageNumber /** Number of message to retrieve. This is an integer from 1 to the maximum number of messages available. */ ); /** Delete the message specified from the mail box. @return Array of strings continaing message headers. */ BOOL DeleteMessage( PINDEX messageNumber /* Number of message to retrieve. This is an integer from 1 to the maximum number of messages available. */ ); protected: BOOL OnOpen(); // Member variables BOOL loggedIn;};/** A TCP/IP socket for the Post Office Protocol version 3. When acting as a server, a descendant class would be created to override at least the <A>HandleOpenMailbox()</A>, <A>HandleSendMessage()</A> and <A>HandleDeleteMessage()</A> functions. Other functions may be overridden for further enhancement to the sockets capabilities, but these will give a basic POP3 server functionality. The server socket thread would continuously call the <A>ProcessMessage()</A> function until it returns FALSE. This will then call the appropriate virtual function on parsing the POP3 protocol. */class PPOP3Server : public PPOP3{ PCLASSINFO(PPOP3Server, PPOP3) public: /** Create a TCP/IP POP3 protocol socket channel. The parameterless form creates an unopened socket, the form with the <CODE>address</CODE> parameter makes a connection to a remote system, opening the socket. The form with the <CODE>socket</CODE> parameter opens the socket to an incoming call from a "listening" socket. */ PPOP3Server(); // New functions for class. /** Process commands, dispatching to the appropriate virtual function. This is used when the socket is acting as a server. @return TRUE if more processing may be done, FALSE if the QUIT command was received or the <A>OnUnknown()</A> function returns FALSE. */ BOOL ProcessCommand(); /** Log the specified user into the mail system and return sizes of each message in mail box. The user override of this function is expected to populate the protected member fields <CODE>messageSizes</CODE> and <CODE>messageIDs</CODE>. @return TRUE if user and password were valid. */ virtual BOOL HandleOpenMailbox( const PString & username, // User name for mail box const PString & password // Password for user name ); /** Handle the sending of the specified message to the remote client. The data written to the socket will automatically have the '.' character stuffing enabled. @return TRUE if successfully sent message. */ virtual void HandleSendMessage( PINDEX messageNumber, // Number of message to send. const PString & id, // Unique id of message to send. PINDEX lines // Nuumber of lines in body of message to send. ); /** Handle the deleting of the specified message from the mail box. This is called when the OnQUIT command is called for each message that was deleted using the DELE command. @return TRUE if successfully sent message. */ virtual void HandleDeleteMessage( PINDEX messageNumber, // Number of message to send. const PString & id // Unique id of message to send. ); protected: BOOL OnOpen(); virtual void OnUSER( const PString & name // Name of user. ); // Specify user name (mailbox). virtual void OnPASS( const PString & passwd // Password for account. ); // Specify password and log user in. virtual void OnQUIT(); // End connection, saving all changes (delete messages). virtual void OnRSET(); // Reset connection (undelete messages). virtual void OnNOOP(); // Do nothing. virtual void OnSTAT(); // Get number of messages in mailbox. /** Get the size of a message in mailbox. If <CODE>msg</CODE> is 0 then get sizes of all messages in mailbox. */ virtual void OnLIST( PINDEX msg // Number of message. ); virtual void OnRETR( PINDEX msg // Number of message. ); // Retrieve a message from mailbox. virtual void OnDELE( PINDEX msg // Number of message. ); // Delete a message from mailbox. virtual void OnTOP( PINDEX msg, // Number of message. PINDEX count // Count of messages ); // Get the message header and top <CODE>count</CODE> lines of message. /** Get unique ID for message in mailbox. If <CODE>msg</CODE> is 0 then get all IDs for all messages in mailbox. */ virtual void OnUIDL( PINDEX msg // Number of message. ); /** Handle an unknown command. @return TRUE if more processing may be done, FALSE if the <A>ProcessCommand()</A> function is to return FALSE. */ virtual BOOL OnUnknown( const PCaselessString & command // Complete command line received. ); // Member variables PString username; PUnsignedArray messageSizes; PStringArray messageIDs; PBYTEArray messageDeletions;};#endif // _PMAILPROTOCOL// End Of File ///////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -