📄 classpsmtpserver.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>PSMTPServer class Reference</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.2.18 --><center><a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="namespaces.html">Namespace List</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> </center><hr><h1>PSMTPServer Class Reference</h1><code>#include <<a class="el" href="inetmail_8h-source.html">inetmail.h</a>></code><p><p>Inheritance diagram for PSMTPServer:<p><center><img src="classPSMTPServer.png" usemap="#PSMTPServer_map" border="0" alt=""></center><map name="PSMTPServer_map"><area href="classPSMTP.html" alt="PSMTP" shape="rect" coords="0,224,109,248"><area href="classPInternetProtocol.html" alt="PInternetProtocol" shape="rect" coords="0,168,109,192"><area href="classPIndirectChannel.html" alt="PIndirectChannel" shape="rect" coords="0,112,109,136"><area href="classPChannel.html" alt="PChannel" shape="rect" coords="0,56,109,80"><area href="classPObject.html" alt="PObject" shape="rect" coords="0,0,109,24"></map><a href="classPSMTPServer-members.html">List of all members.</a><table border=0 cellpadding=0 cellspacing=0><tr><td></td></tr><tr><td colspan=2><br><h2>Public Types</h2></td></tr><tr><td nowrap align=right valign=top>enum </td><td valign=bottom><a class="el" href="classPSMTPServer.html#s7">ForwardResult</a> { <a class="el" href="classPSMTPServer.html#s7s0">LocalDomain</a>, <a class="el" href="classPSMTPServer.html#s7s1">WillForward</a>, <a class="el" href="classPSMTPServer.html#s7s2">CannotForward</a> }</td></tr><tr><td nowrap align=right valign=top>enum </td><td valign=bottom><a class="el" href="classPSMTPServer.html#s8">LookUpResult</a> { <a class="el" href="classPSMTPServer.html#s8s3">ValidUser</a>, <a class="el" href="classPSMTPServer.html#s8s4">AmbiguousUser</a>, <a class="el" href="classPSMTPServer.html#s8s5">UnknownUser</a>, <a class="el" href="classPSMTPServer.html#s8s6">LookUpError</a> }</td></tr><tr><td colspan=2><br><h2>Public Methods</h2></td></tr><tr><td nowrap align=right valign=top> </td><td valign=bottom><a class="el" href="classPSMTPServer.html#a0">PSMTPServer</a> ()</td></tr><tr><td nowrap align=right valign=top>BOOL </td><td valign=bottom><a class="el" href="classPSMTPServer.html#a1">ProcessCommand</a> ()</td></tr><tr><td nowrap align=right valign=top>void </td><td valign=bottom><a class="el" href="classPSMTPServer.html#a2">ServerReset</a> ()</td></tr><tr><td nowrap align=right valign=top>virtual <a class="el" href="classPSMTPServer.html#s7">ForwardResult</a> </td><td valign=bottom><a class="el" href="classPSMTPServer.html#a3">ForwardDomain</a> (<a class="el" href="classPCaselessString.html">PCaselessString</a> &userDomain, <a class="el" href="classPCaselessString.html">PCaselessString</a> &forwardDomainList)</td></tr><tr><td nowrap align=right valign=top>virtual <a class="el" href="classPSMTPServer.html#s8">LookUpResult</a> </td><td valign=bottom><a class="el" href="classPSMTPServer.html#a4">LookUpName</a> (const <a class="el" href="classPCaselessString.html">PCaselessString</a> &name, <a class="el" href="classPString.html">PString</a> &expandedName)</td></tr><tr><td nowrap align=right valign=top>virtual BOOL </td><td valign=bottom><a class="el" href="classPSMTPServer.html#a5">HandleMessage</a> (<a class="el" href="classPCharArray.html">PCharArray</a> &buffer, BOOL starting, BOOL completed)</td></tr><tr><td colspan=2><br><h2>Protected Types</h2></td></tr><tr><td nowrap align=right valign=top>enum </td><td valign=bottom>{ <a class="el" href="classPSMTPServer.html#t4t0">WasMAIL</a>, <a class="el" href="classPSMTPServer.html#t4t1">WasSEND</a>, <a class="el" href="classPSMTPServer.html#t4t2">WasSAML</a>, <a class="el" href="classPSMTPServer.html#t4t3">WasSOML</a> }</td></tr><tr><td colspan=2><br><h2>Protected Methods</h2></td></tr><tr><td nowrap align=right valign=top>BOOL </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b0">OnOpen</a> ()</td></tr><tr><td nowrap align=right valign=top>virtual void </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b1">OnHELO</a> (const <a class="el" href="classPCaselessString.html">PCaselessString</a> &remoteHost)</td></tr><tr><td nowrap align=right valign=top>virtual void </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b2">OnEHLO</a> (const <a class="el" href="classPCaselessString.html">PCaselessString</a> &remoteHost)</td></tr><tr><td nowrap align=right valign=top>virtual void </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b3">OnQUIT</a> ()</td></tr><tr><td nowrap align=right valign=top>virtual void </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b4">OnHELP</a> ()</td></tr><tr><td nowrap align=right valign=top>virtual void </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b5">OnNOOP</a> ()</td></tr><tr><td nowrap align=right valign=top>virtual void </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b6">OnTURN</a> ()</td></tr><tr><td nowrap align=right valign=top>virtual void </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b7">OnRSET</a> ()</td></tr><tr><td nowrap align=right valign=top>virtual void </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b8">OnVRFY</a> (const <a class="el" href="classPCaselessString.html">PCaselessString</a> &name)</td></tr><tr><td nowrap align=right valign=top>virtual void </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b9">OnEXPN</a> (const <a class="el" href="classPCaselessString.html">PCaselessString</a> &name)</td></tr><tr><td nowrap align=right valign=top>virtual void </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b10">OnRCPT</a> (const <a class="el" href="classPCaselessString.html">PCaselessString</a> &recipient)</td></tr><tr><td nowrap align=right valign=top>virtual void </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b11">OnMAIL</a> (const <a class="el" href="classPCaselessString.html">PCaselessString</a> &sender)</td></tr><tr><td nowrap align=right valign=top>virtual void </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b12">OnSEND</a> (const <a class="el" href="classPCaselessString.html">PCaselessString</a> &sender)</td></tr><tr><td nowrap align=right valign=top>virtual void </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b13">OnSAML</a> (const <a class="el" href="classPCaselessString.html">PCaselessString</a> &sender)</td></tr><tr><td nowrap align=right valign=top>virtual void </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b14">OnSOML</a> (const <a class="el" href="classPCaselessString.html">PCaselessString</a> &sender)</td></tr><tr><td nowrap align=right valign=top>virtual void </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b15">OnDATA</a> ()</td></tr><tr><td nowrap align=right valign=top>virtual BOOL </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b16">OnUnknown</a> (const <a class="el" href="classPCaselessString.html">PCaselessString</a> &command)</td></tr><tr><td nowrap align=right valign=top>virtual void </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b17">OnSendMail</a> (const <a class="el" href="classPCaselessString.html">PCaselessString</a> &sender)</td></tr><tr><td nowrap align=right valign=top>virtual BOOL </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b18">OnTextData</a> (<a class="el" href="classPCharArray.html">PCharArray</a> &buffer, BOOL &completed)</td></tr><tr><td nowrap align=right valign=top>virtual BOOL </td><td valign=bottom><a class="el" href="classPSMTPServer.html#b19">OnMIMEData</a> (<a class="el" href="classPCharArray.html">PCharArray</a> &buffer, BOOL &completed)</td></tr><tr><td colspan=2><br><h2>Protected Attributes</h2></td></tr><tr><td nowrap align=right valign=top>BOOL </td><td valign=bottom><a class="el" href="classPSMTPServer.html#n0">extendedHello</a></td></tr><tr><td nowrap align=right valign=top>BOOL </td><td valign=bottom><a class="el" href="classPSMTPServer.html#n1">eightBitMIME</a></td></tr><tr><td nowrap align=right valign=top><a class="el" href="classPString.html">PString</a> </td><td valign=bottom><a class="el" href="classPSMTPServer.html#n2">fromAddress</a></td></tr><tr><td nowrap align=right valign=top><a class="el" href="classPString.html">PString</a> </td><td valign=bottom><a class="el" href="classPSMTPServer.html#n3">fromPath</a></td></tr><tr><td nowrap align=right valign=top><a class="el" href="classPStringList.html">PStringList</a> </td><td valign=bottom><a class="el" href="classPSMTPServer.html#n4">toNames</a></td></tr><tr><td nowrap align=right valign=top><a class="el" href="classPStringList.html">PStringList</a> </td><td valign=bottom><a class="el" href="classPSMTPServer.html#n5">toDomains</a></td></tr><tr><td nowrap align=right valign=top>PINDEX </td><td valign=bottom><a class="el" href="classPSMTPServer.html#n6">messageBufferSize</a></td></tr><tr><td nowrap align=right valign=top>enum PSMTPServer:: { ... } </td><td valign=bottom><a class="el" href="classPSMTPServer.html#n7">sendCommand</a></td></tr><tr><td nowrap align=right valign=top><a class="el" href="classPInternetProtocol.html#t6">StuffState</a> </td><td valign=bottom><a class="el" href="classPSMTPServer.html#n8">endMIMEDetectState</a></td></tr></table><hr><a name="_details"></a><h2>Detailed Description</h2>A TCP/IP socket for the Simple Mail Transfer Protocol.<p>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: <pre><code> PSMTPSocket mail("mailserver"); if (mail.IsOpen()) { mail.BeginMessage("<a href="mailto:Me@here.com.au">Me@here.com.au</a>", "<a href="mailto:Fred@somwhere.com">Fred@somwhere.com</a>"); mail.Write(myMessage); if (!mail.EndMessage()) PError << "Mail send failed." << endl; } else PError << "Mail conection failed." << endl; </pre></code><p>When acting as a server, a descendant class would be created to override at least the <A><a class="el" href="classPSMTPServer.html#a4">LookUpName()</a> and <A><a class="el" href="classPSMTPServer.html#a5">HandleMessage()</a> functions. Other functions may be overridden for further enhancement to the sockets capabilities, but these two will give a basic SMTP server functionality.<p>The server socket thread would continuously call the <A>ProcessMessage() function until it returns FALSE. This will then call the appropriate virtual function on parsing the SMTP protocol. <p><hr><h2>Member Enumeration Documentation</h2><a name="t4" doxytag="PSMTPServer::@18"></a><p><table width="100%" cellpadding="2" cellspacing="0" border="0"> <tr> <td class="md"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top"> anonymous enum<code> [protected]</code> </table> </td> </tr></table><table cellspacing=5 cellpadding=0 border=0> <tr> <td> </td> <td><p><dl compact><dt><b>Enumeration values: </b></dt><dd><table border=0 cellspacing=2 cellpadding=0><tr><td valign=top><em><a name="t4t0" doxytag="WasMAIL"></a><em>WasMAIL</em></em> </td><td></td></tr><tr><td valign=top><em><a name="t4t1" doxytag="WasSEND"></a><em>WasSEND</em></em> </td><td></td></tr><tr><td valign=top><em><a name="t4t2" doxytag="WasSAML"></a><em>WasSAML</em></em> </td><td></td></tr><tr><td valign=top><em><a name="t4t3" doxytag="WasSOML"></a><em>WasSOML</em></em> </td><td></td></tr></table></dl> </td> </tr></table><a name="s7" doxytag="PSMTPServer::ForwardResult"></a><p><table width="100%" cellpadding="2" cellspacing="0" border="0"> <tr> <td class="md"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top"> enum PSMTPServer::ForwardResult </table> </td> </tr></table><table cellspacing=5 cellpadding=0 border=0> <tr> <td> </td> <td><p><dl compact><dt><b>Enumeration values: </b></dt><dd><table border=0 cellspacing=2 cellpadding=0><tr><td valign=top><em><a name="s7s0" doxytag="LocalDomain"></a><em>LocalDomain</em></em> </td><td></td></tr><tr><td valign=top><em><a name="s7s1" doxytag="WillForward"></a><em>WillForward</em></em> </td><td></td></tr><tr><td valign=top><em><a name="s7s2" doxytag="CannotForward"></a><em>CannotForward</em></em> </td><td></td></tr></table></dl> </td> </tr></table><a name="s8" doxytag="PSMTPServer::LookUpResult"></a><p><table width="100%" cellpadding="2" cellspacing="0" border="0"> <tr> <td class="md"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top"> enum PSMTPServer::LookUpResult </table> </td> </tr></table><table cellspacing=5 cellpadding=0 border=0> <tr> <td> </td> <td><p><dl compact><dt><b>Enumeration values: </b></dt><dd><table border=0 cellspacing=2 cellpadding=0><tr><td valign=top><em><a name="s8s3" doxytag="ValidUser"></a><em>ValidUser</em></em> </td><td></td></tr><tr><td valign=top><em><a name="s8s4" doxytag="AmbiguousUser"></a><em>AmbiguousUser</em></em> </td><td></td></tr><tr><td valign=top><em><a name="s8s5" doxytag="UnknownUser"></a><em>UnknownUser</em></em> </td><td></td></tr><tr><td valign=top><em><a name="s8s6" doxytag="LookUpError"></a><em>LookUpError</em></em> </td><td></td></tr></table></dl> </td> </tr></table><hr><h2>Constructor & Destructor Documentation</h2><a name="a0" doxytag="PSMTPServer::PSMTPServer"></a><p><table width="100%" cellpadding="2" cellspacing="0" border="0"> <tr> <td class="md"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top"> PSMTPServer::PSMTPServer </td> <td class="md" valign="top">( </td> <td class="mdname1" valign="top" nowrap> </td> <td class="md" valign="top">) </td> <td class="md" nowrap></td> </tr> </table> </td> </tr></table><table cellspacing=5 cellpadding=0 border=0> <tr> <td> </td> <td><p>Create a TCP/IP SMPTP 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. </td> </tr></table><hr><h2>Member Function Documentation</h2><a name="a3" doxytag="PSMTPServer::ForwardDomain"></a><p><table width="100%" cellpadding="2" cellspacing="0" border="0"> <tr> <td class="md"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top"> virtual <a class="el" href="classPSMTPServer.html#s7">ForwardResult</a> PSMTPServer::ForwardDomain </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top"><a class="el" href="classPCaselessString.html">PCaselessString</a> & </td> <td class="mdname" nowrap> <em>userDomain</em>, </td> </tr> <tr> <td></td> <td></td> <td class="md" nowrap><a class="el" href="classPCaselessString.html">PCaselessString</a> & </td> <td class="mdname" nowrap> <em>forwardDomainList</em></td> </tr> <tr> <td></td> <td class="md">) </td> <td class="md" colspan="2"><code> [virtual]</code></td> </tr> </table> </td> </tr></table><table cellspacing=5 cellpadding=0 border=0> <tr> <td> </td> <td><p>Determine if a user for this domain may be on the local system, or should be forwarded.<p><dl compact><dt><b>Returns: </b></dt><dd> Result of forward check operation. </dl> </td> </tr></table><a name="a5" doxytag="PSMTPServer::HandleMessage"></a><p><table width="100%" cellpadding="2" cellspacing="0" border="0"> <tr> <td class="md"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top"> virtual BOOL PSMTPServer::HandleMessage </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top"><a class="el" href="classPCharArray.html">PCharArray</a> & </td> <td class="mdname" nowrap> <em>buffer</em>, </td> </tr> <tr> <td></td> <td></td> <td class="md" nowrap>BOOL </td> <td class="mdname" nowrap> <em>starting</em>, </td> </tr> <tr> <td></td> <td></td> <td class="md" nowrap>BOOL </td> <td class="mdname" nowrap> <em>completed</em></td> </tr> <tr> <td></td> <td class="md">) </td> <td class="md" colspan="2"><code> [virtual]</code></td> </tr> </table> </td> </tr></table><table cellspacing=5 cellpadding=0 border=0> <tr> <td> </td> <td><p>Handle a received message. The <code>buffer</code> parameter contains the partial or complete message received, depending on the <code>completed</code> parameter.<p>The default behaviour is to simply return FALSE;<p><dl compact><dt><b>Returns: </b></dt><dd> TRUE if message was handled, FALSE if an error occurs. </dl> </td> </tr></table><a name="a4" doxytag="PSMTPServer::LookUpName"></a><p><table width="100%" cellpadding="2" cellspacing="0" border="0"> <tr> <td class="md"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top"> virtual <a class="el" href="classPSMTPServer.html#s8">LookUpResult</a> PSMTPServer::LookUpName </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top">const <a class="el" href="classPCaselessString.html">PCaselessString</a> & </td> <td class="mdname" nowrap> <em>name</em>, </td> </tr> <tr> <td></td> <td></td> <td class="md" nowrap><a class="el" href="classPString.html">PString</a> & </td> <td class="mdname" nowrap> <em>expandedName</em></td> </tr> <tr> <td></td> <td class="md">) </td> <td class="md" colspan="2"><code> [virtual]</code></td> </tr> </table> </td> </tr></table><table cellspacing=5 cellpadding=0 border=0> <tr> <td> </td> <td><p>Look up a name in the context of the SMTP server.<p>The default bahaviour simply returns FALSE.<p><dl compact><dt><b>Returns: </b></dt><dd> Result of name look up operation. </dl> </td> </tr></table><a name="b15" doxytag="PSMTPServer::OnDATA"></a><p><table width="100%" cellpadding="2" cellspacing="0" border="0"> <tr> <td class="md"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top"> virtual void PSMTPServer::OnDATA </td> <td class="md" valign="top">( </td> <td class="mdname1" valign="top" nowrap> </td> <td class="md" valign="top">) </td> <td class="md" nowrap><code> [protected, virtual]</code></td> </tr> </table> </td> </tr></table><table cellspacing=5 cellpadding=0 border=0> <tr> <td> </td> <td><p> </td> </tr></table><a name="b2" doxytag="PSMTPServer::OnEHLO"></a><p><table width="100%" cellpadding="2" cellspacing="0" border="0"> <tr> <td class="md"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top"> virtual void PSMTPServer::OnEHLO </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top">const <a class="el" href="classPCaselessString.html">PCaselessString</a> & </td> <td class="mdname1" valign="top" nowrap> <em>remoteHost</em> </td> <td class="md" valign="top">) </td> <td class="md" nowrap><code> [protected, virtual]</code></td> </tr> </table> </td> </tr></table><table cellspacing=5 cellpadding=0 border=0> <tr> <td> </td> <td><p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -