⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 20000725001.htm

📁 C++Builder教学大全
💻 HTM
字号:
<HTML>

<HEAD>



<TITLE>C++Builder4.0实现在线接收电子邮件</TITLE>



<META content="MSHTML 5.00.2314.1000" name=GENERATOR>

</HEAD>

<BODY aLink=#FF0000 bgColor=#ffffff leftMargin=0 link=#187800 topMargin=0 

vLink=#990099>



<div align="center">

  <table>

    <tr> 

      <td> 

        <p align=center><font size=5><strong><b><font size="3"><br>

          <br>

          C++Builder4.0实现在线接收电子邮件</font></b></strong></font></p>

        <p align=right>(文/李东)</p>

        <p class=sfont>&nbsp;&nbsp;&nbsp; 我们在使用163、长通飞华等免费电子邮件的时候,会发现这些电子信箱具有在线收发的功能,即可以通过浏览器发送和接收邮件电子邮件。这些功能一般是通过CGI实现的,而CGI技术正在逐渐被ISAPI/NSAPI技术所取代,下面的例子使用C++Builder4.0中的ISAPI/NSAPI实现了电子邮件的在线接收。 

          <br>

          &nbsp;&nbsp;&nbsp;   使用C++Builder4开发Web Server程序是非常简单的,C++Builder 4的VCL提供了大量的元件和对象,支持Web 

          Server程序的开发。本程序由两个文件构成,分别为index.htm:接收电子邮件的浏览器界面,放到WEB服务器的缺省目录下(如:C:\Inetpub\wwwroot);ReadMail.dll:在浏览器内显示邮件列表以及指定邮件内容的Web 

          Server Application。这个动态链结库文件放在可执行文件路径下(如C:\Inetpub\scripts)。用户在浏览器内通过Web 

          Server浏览index.htm,输入主机名、端口(一般是110)、用户名、口令后,首先会看到用户的邮件列表,单击相应的邮件序号即可查看邮件内容。 

        </p>

        <p>首先建立index.htm,其内容如下: <br>

          &lt;html&gt; <br>

          &lt;head&gt; <br>

          &lt;meta http-equiv=&quot;Content-Type&quot; <br>

          content=&quot;text/html; charset=gb_2312-80&quot;&gt; <br>

          &lt;meta name=&quot;GENERATOR&quot; content=&quot;Microsoft FrontPage 

          Express 2.0&quot;&gt; <br>

          &lt;title&gt;邮件查看&lt;/title&gt; <br>

          &lt;/head&gt; <br>

          &lt;body bgcolor=&quot;#FFFFFF&quot;&gt; <br>

          &lt;form action=&quot; /scripts/MailList.dll/MailList&quot; <br>

          method=&quot;POST&quot;&gt; <br>

          &nbsp;&nbsp;&nbsp; &lt;p&gt;主机:&lt;input type=&quot;text&quot; size=&quot;20&quot; 

          name=&quot;Host&quot;&gt;&lt;/p&gt; <br>

          &nbsp;&nbsp;&nbsp; &lt;p&gt;端口:&lt;input type=&quot;text&quot; size=&quot;20&quot; 

          name=&quot;Port&quot;&gt;&lt;/p&gt; <br>

          &nbsp;&nbsp;&nbsp; &lt;p&gt;用户名:&lt;input type=&quot;text&quot; size=&quot;20&quot; 

          name=&quot;Name&quot;&gt;&lt;/p&gt; <br>

          &nbsp;&nbsp;&nbsp; &lt;p&gt;口令:&lt;input type=&quot;password&quot; size=&quot;20&quot; 

          name=&quot;Code&quot;&gt;&lt;/p&gt; <br>

          &nbsp;&nbsp;&nbsp; &lt;p&gt;&lt;input type=&quot;submit&quot; name=&quot;B1&quot; 

          value=&quot;提交&quot;&gt;&lt;input <br>

          &nbsp;&nbsp;&nbsp; type=&quot;reset&quot; name=&quot;B2&quot; value=&quot;复原&quot;&gt;&lt;/p&gt; 

          <br>

          &lt;/form&gt; <br>

          &lt;/body&gt; <br>

          &lt;/html&gt; 

        <p>下面编写ReadMail.dll <br>

          在C++Builder中新建一个基于ISAPI的Web Server Application,手动增加 

        <p>NMPOP31,PageProducer1。在Unit1.h头文件中定义几个变量: <br>

          AnsiString HostName,HostPort,UserName,UserCode; <br>

          TStrings *URLData; // 接受HTTP请求传递的参数 <br>

          bool ConnectFlag; <br>

          int EmailOrder; 

        <p>增加一个路径为/MailList的动作项,其代码如下: <br>

          void __fastcall TWebModule1::WebModule1WebActionItem1Action( <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TObject *Sender, TWebRequest *Request, 

          TWebResponse *Response, <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool &amp;Handled) <br>

          { <br>

          //接受HTTP请求传递的参数,从中获取用主机、端口、户名和口令 <br>

          URLData = NULL; <br>

          switch(Request-&gt;MethodType) <br>

          &nbsp;&nbsp;&nbsp; {case mtPost: <br>

          &nbsp;&nbsp;&nbsp; URLData = Request-&gt;ContentFields; <br>

          &nbsp;&nbsp;&nbsp; break; <br>

          &nbsp;&nbsp;&nbsp; case mtGet: <br>

          &nbsp;&nbsp;&nbsp; URLData = Request-&gt;QueryFields; <br>

          &nbsp;&nbsp;&nbsp; break; <br>

          &nbsp;&nbsp;&nbsp; } <br>

          HostName = URLData-&gt;Values[&quot;Host&quot;]; <br>

          HostPort = URLData-&gt;Values[&quot;Port&quot;]; <br>

          UserName = URLData-&gt;Values[&quot;Name&quot;]; <br>

          UserCode = URLData-&gt;Values[&quot;Code&quot;]; 

        <p>//下面开始连接邮件服务器 <br>

          NMPOP31-&gt;AttachFilePath=&quot;.&quot;;//存储邮件路径为当前路径 <br>

          NMPOP31-&gt;DeleteOnRead=false;//不删除服务器上的副本 <br>

          NMPOP31-&gt;ReportLevel=Status_Basic;//Status的详细程度 <br>

          NMPOP31-&gt;TimeOut=20000;//设定超时 <br>

          NMPOP31-&gt;Host=HostName; <br>

          NMPOP31-&gt;Port=StrToInt(HostPort); <br>

          NMPOP31-&gt;UserID=UserName; <br>

          NMPOP31-&gt;Password=UserCode; <br>

          ConnectFlag=true; <br>

          NMPOP31-&gt;Connect(); 

        <p>//如果连接成功,则制作邮件列表的HTML语句 <br>

          if(ConnectFlag) <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {PageProducer1-&gt;HTMLDoc-&gt;Clear(); 

          <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;&lt;html&gt;&lt;body&gt;&quot;); 

          <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;邮件个数&quot;+IntToStr(NMPOP31-&gt;MailCount)); 

          <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(NMPOP31-&gt;MailCount) 

          <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=1;i&lt;=NMPOP31-&gt;MailCount;i++) 

          <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

          {PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;&lt;a href='&quot;); <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

          PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;ReadMail?Mx=&quot;); <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

          PageProducer1-&gt;HTMLDoc-&gt;Add(IntToStr(i)); <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

          PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;'&gt;&quot;); <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

          PageProducer1-&gt;HTMLDoc-&gt;Add(IntToStr(i)); <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

          PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;&lt;/a&gt;&quot;);} <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;&lt;/body&gt;&lt;/html&gt;&quot;); 

          <br>

          NMPOP31-&gt;Disconnect();} <br>

          else <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {PageProducer1-&gt;HTMLDoc-&gt;Clear(); 

          <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;&lt;html&gt;&lt;body&gt;&quot;); 

          <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;连接服务器失败!&quot;); 

          <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;&lt;/body&gt;&lt;/html&gt;&quot;);} 

          <br>

          //将邮件列表的HTML语句发送给浏览器 <br>

          Response-&gt;Content = PageProducer1-&gt;Content( ); <br>

          } <br>

          //-------------------------------------------------------------- <br>

          以上部分程序完成了显示邮件服务器邮件列表的功能。接下来,再增加一 <br>

          个路径为/MailList的动作项,它的功能是显示指定的邮件内容。 <br>

          void __fastcall TWebModule1::WebModule1WebActionItem2Action( <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TObject *Sender, TWebRequest *Request, 

          TWebResponse *Response, <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool &amp;Handled) <br>

          { <br>

          //接受HTTP请求传递的参数,从中获取用户名和口令、欲查看的邮件序号 <br>

          URLData = NULL; <br>

          switch(Request-&gt;MethodType) <br>

          &nbsp;&nbsp;&nbsp; {case mtPost: <br>

          &nbsp;&nbsp;&nbsp; URLData = Request-&gt;ContentFields; <br>

          &nbsp;&nbsp;&nbsp; break; <br>

          &nbsp;&nbsp;&nbsp; case mtGet: <br>

          &nbsp;&nbsp;&nbsp; URLData = Request-&gt;QueryFields; <br>

          &nbsp;&nbsp;&nbsp; break;} <br>

          EmailOrder = StrToInt(URLData-&gt;Values[&quot;Mx&quot;]); 

        <p>//下面开始连接邮件服务器 <br>

          NMPOP31-&gt;AttachFilePath=&quot;.&quot;;//存储邮件路径为当前路径 <br>

          NMPOP31-&gt;DeleteOnRead=false;//不删除服务器上的副本 <br>

          NMPOP31-&gt;ReportLevel=Status_Basic;//Status的详细程度 <br>

          NMPOP31-&gt;TimeOut=20000; //设定超时 <br>

          NMPOP31-&gt;Host=HostName; <br>

          NMPOP31-&gt;Port=StrToInt(HostPort); <br>

          NMPOP31-&gt;UserID=UserName; <br>

          NMPOP31-&gt;Password=UserCode; <br>

          ConnectFlag=true; <br>

          NMPOP31-&gt;Connect(); 

        <p>//如果连接成功,打开指定的邮件 <br>

          if(ConnectFlag) <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {PageProducer1-&gt;HTMLDoc-&gt;Clear(); 

          <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;&lt;html&gt;&lt;body&gt;&quot;); 

          <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;第&quot;+ 

          IntToStr(EmailOrder)+ &quot;个邮件内容:&quot;); <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NMPOP31-&gt;GetMailMessage(EmailOrder); 

          <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageProducer1-&gt;HTMLDoc-&gt;AddStrings(NMPOP31-&gt;MailMessage-&gt;Head); 

          <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageProducer1-&gt;HTMLDoc-&gt;AddStrings(NMPOP31-&gt;MailMessage-&gt;Body); 

          <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;&lt;/body&gt;&lt;/html&gt;&quot;); 

          <br>

          NMPOP31-&gt;Disconnect(); } <br>

          else <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {PageProducer1-&gt;HTMLDoc-&gt;Clear(); 

          <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;&lt;html&gt;&lt;body&gt;&quot;); 

          <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;连接服务器失败!&quot;); 

          <br>

          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;&lt;/body&gt;&lt;/html&gt;&quot;);} 

          <br>

          //将显示指定邮件内容的HTML语句发送给浏览器 <br>

          Response-&gt;Content = PageProducer1-&gt;Content( ); <br>

          } <br>

          //------------------------------------------------------------ <br>

          最后在NMPOP31的ConnectionFailed事件中加入: <br>

          void __fastcall TWebModule1::NMPOP31ConnectionFailed(TObject *Sender) 

          <br>

          { <br>

          ConnectFlag=false; <br>

          } <br>

          //------------------------------------------------------------ <br>

            编译完成后,将生成的DLL文件更名为和HTML文件相对应的名称(如:ReadMail.dll),放在C:Inetpub\scr<br>

          ipts即可。以上程序在Pwin98+PWS4上通过。此外,本程序还有不足之处,比如只能查看内容为纯文本格式的邮件, 没有处理异常的能力。读者感兴趣的话,不妨改进。 

        </p>

      </td>

    </tr>

  </table>

 

</div>

</BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -