PTLib  Version 2.14.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
PSMTP Class Reference

A TCP/IP socket for the Simple Mail Transfer Protocol. More...

#include <inetmail.h>

Inheritance diagram for PSMTP:
Collaboration diagram for PSMTP:

Public Types

enum  Commands {
  HELO, EHLO, QUIT, HELP,
  NOOP, TURN, RSET, VRFY,
  EXPN, RCPT, MAIL, SEND,
  SAML, SOML, DATA, AUTH,
  NumCommands
}
 

Protected Member Functions

 PSMTP ()
 
- Protected Member Functions inherited from PInternetProtocol
 PInternetProtocol (const char *defaultServiceName, PINDEX cmdCount, char const *const *cmdNames)
 
virtual PINDEX ParseResponse (const PString &line)
 Parse a response line string into a response code and any extra info on the line. More...
 
- Protected Member Functions inherited from PIndirectChannel
virtual PBoolean OnOpen ()
 This callback is executed when the Open() function is called with open channels. More...
 
- Protected Member Functions inherited from PChannel
 PChannel (const PChannel &)
 
PChanneloperator= (const PChannel &)
 
virtual PBoolean ConvertOSError (P_INT_PTR libcReturnValue, ErrorGroup group=LastGeneralError)
 Convert an operating system error into platform independent error. More...
 
int ReadCharWithTimeout (PTimeInterval &timeout)
 Read a character with specified timeout. More...
 
PBoolean ReceiveCommandString (int nextChar, const PString &reply, PINDEX &pos, PINDEX start)
 
virtual int os_errno () const
 
PBoolean PXSetIOBlock (PXBlockType type, const PTimeInterval &timeout)
 
P_INT_PTR GetOSHandleAsInt () const
 
int PXClose ()
 
 PChannel ()
 Create the channel. More...
 
- Protected Member Functions inherited from PObject
 PObject ()
 Constructor for PObject, made protected so cannot ever create one on its own. More...
 

Additional Inherited Members

- Public Member Functions inherited from PInternetProtocol
virtual PBoolean Read (void *buf, PINDEX len)
 Low level read from the channel. More...
 
virtual int ReadChar ()
 Read a single 8 bit byte from the channel. More...
 
virtual PBoolean Write (const void *buf, PINDEX len)
 Low level write to the channel. More...
 
void SetReadLineTimeout (const PTimeInterval &t)
 Set the maximum timeout between characters within a line. More...
 
virtual PBoolean Connect (const PString &address, WORD port=0)
 Connect a socket to a remote host for the internet protocol. More...
 
virtual PBoolean Connect (const PString &address, const PString &service)
 
virtual PBoolean Accept (PSocket &listener)
 Accept a server socket to a remote host for the internet protocol. More...
 
const PStringGetDefaultService () const
 Get the default service name or port number to use in socket connections. More...
 
PIPSocketGetSocket () const
 Get the eventual socket for the series of indirect channels that may be between the current protocol and the actual I/O channel. More...
 
virtual PBoolean WriteLine (const PString &line)
 Write a string to the socket channel followed by a CR/LF pair. More...
 
virtual PBoolean ReadLine (PString &line, PBoolean allowContinuation=false)
 Read a string from the socket channel up to a CR/LF pair. More...
 
virtual void UnRead (int ch)
 Put back the characters into the data stream so that the next Read() function call will return them first. More...
 
virtual void UnRead (const PString &str)
 
virtual void UnRead (const void *buffer, PINDEX len)
 
virtual bool WriteCommand (PINDEX cmdNumber, const PString &param=PString::Empty())
 Write a single line for a command. More...
 
virtual bool WriteCommand (PINDEX cmdNumber, const PString &param, const PMIMEInfo &mime)
 
virtual PBoolean ReadCommand (PINDEX &num, PString &args)
 Read a single line of a command which ends with a CR/LF pair. More...
 
virtual PBoolean ReadCommand (PINDEX &num, PString &args, PMIMEInfo &mime)
 
virtual PBoolean WriteResponse (unsigned numericCode, const PString &info)
 Write a response code followed by a text string describing the response to a command. More...
 
virtual PBoolean WriteResponse (const PString &code, const PString &info)
 
virtual PBoolean ReadResponse ()
 Read a response code followed by a text string describing the response to a command. More...
 
virtual PBoolean ReadResponse (int &code, PString &info)
 
virtual PBoolean ReadResponse (int &code, PString &info, PMIMEInfo &mime)
 
virtual int ExecuteCommand (PINDEX cmdNumber)
 Write a command to the socket, using WriteCommand() and await a response using ReadResponse(). More...
 
virtual int ExecuteCommand (PINDEX cmdNumber, const PString &param)
 
int GetLastResponseCode () const
 Return the code associated with the last response received by the socket. More...
 
PString GetLastResponseInfo () const
 Return the last response received by the socket. More...
 
- Static Public Member Functions inherited from PChannel
static PString GetErrorText (Errors lastError, int osError=0)
 Get error message description. More...
 
- Static Public Member Functions inherited from PObject
static const char * Class ()
 Get the name of the class as a C string. More...
 
static __inline const PObjectPTraceObjectInstance (const char *)
 
static __inline const PObjectPTraceObjectInstance (const PObject *obj)
 
static Comparison InternalCompareObjectMemoryDirect (const PObject *obj1, const PObject *obj2, PINDEX size)
 Internal function caled from CompareObjectMemoryDirect() More...
 
- Protected Types inherited from PInternetProtocol
enum  StuffState {
  DontStuff, StuffIdle, StuffCR, StuffCRLF,
  StuffCRLFdot, StuffCRLFdotCR
}
 
- Protected Attributes inherited from PInternetProtocol
PString defaultServiceName
 
PStringArray commandNames
 
PCharArray unReadBuffer
 
PINDEX unReadCount
 
PTimeInterval readLineTimeout
 
enum PInternetProtocol::StuffState stuffingState
 
PBoolean newLineToCRLF
 
int lastResponseCode
 
PString lastResponseInfo
 
- Friends inherited from PObject

Detailed Description

A TCP/IP socket for the Simple Mail Transfer Protocol.

When acting as a client, the procedure is to make the connection to a remote server, then to send a message using the following procedure: PSMTPClient mail("mailserver"); if (mail.IsOpen()) { mail.BeginMessage("Me@here.com.au", "Fred@somwhere.com"); mail.Write(myMessage); if (!mail.EndMessage()) PError << "Mail send failed." << endl; } else PError << "Mail conection failed." << endl;

When acting as a server, a descendant class would be created to override at least the LookUpName() and HandleMessage() functions. Other functions may be overridden for further enhancement to the sockets capabilities, but these two will give a basic SMTP server functionality.

The server socket thread would continuously call the ProcessMessage() function until it returns false. This will then call the appropriate virtual function on parsing the SMTP protocol.

Member Enumeration Documentation

Enumerator
HELO 
EHLO 
QUIT 
HELP 
NOOP 
TURN 
RSET 
VRFY 
EXPN 
RCPT 
MAIL 
SEND 
SAML 
SOML 
DATA 
AUTH 
NumCommands 

Constructor & Destructor Documentation

PSMTP::PSMTP ( )
protected

The documentation for this class was generated from the following file: