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

📄 lc_bcb_11.html

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



<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

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

</head>



<body>



<p align="center"><big><strong>C++Builder4.0实现在线接收电子邮件<br>

<br>

河南濮阳中原油田计算中心 李东</strong></big></p>



<p><br>

我们在使用163、长通飞华等免费电子邮件的时候,会发现这些电子信箱具有在线收发的功能,即可以通过<br>

浏览器发送和接收邮件电子邮件。这些功能一般是通过CGI实现的,而CGI技术正在逐渐被ISAPI/NSAPI技术<br>

所取代,下面的例子使用C++Builder4.0中的ISAPI/NSAPI实现了电子邮件的在线接收。使用C++Builder4开<br>

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

Server程序的开<br> 

发。<br> 

本程序由两个文件构成,分别为<br> 

index.htm:接收电子邮件的浏览器界面,放到WEB服务器的缺省目录下(如:C:\Inetpub\wwwroot);<br> 

ReadMail.dll:在浏览器内显示邮件列表以及指定邮件内容的Web Server  

Application。这个动态链结库<br> 

文件放在可执行文件路径下(如C:\Inetpub\scripts)。<br> 

用户在浏览器内通过Web Server浏览index.htm,输入主机名、端口(一般是110)、用户名、口令后,首<br> 

先会看到用户的邮件列表,单击相应的邮件序号即可查看邮件内容。<br> 

<br> 

首先建立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> 

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

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

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

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

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

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

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

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

&lt;p&gt;&lt;input type=&quot;submit&quot; name=&quot;B1&quot; value=&quot;提交&quot;&gt;&lt;input<br> 

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;<br> 

下面编写ReadMail.dll<br> 

在C++Builder中新建一个基于ISAPI的Web Server Application,手动增加NMPOP31,PageProducer1。在<br> 

Unit1.h头文件中定义几个变量:<br> 

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

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

bool ConnectFlag;<br> 

int EmailOrder;<br> 

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

void __fastcall TWebModule1::WebModule1WebActionItem1Action(<br> 

TObject *Sender, TWebRequest *Request, TWebResponse *Response,<br> 

bool &amp;Handled)<br> 

{<br> 

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

URLData = NULL;<br> 

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

{case mtPost:<br> 

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

break;<br> 

case mtGet:<br> 

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

break;<br> 

}<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;];<br> 

<br> 

//下面开始连接邮件服务器<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();<br> 

<br> 

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

if(ConnectFlag)<br> 

{PageProducer1-&gt;HTMLDoc-&gt;Clear();<br> 

PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;&lt;html&gt;&lt;body&gt;&quot;);<br> 

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

if(NMPOP31-&gt;MailCount)<br> 

for(int i=1;i&lt;=NMPOP31-&gt;MailCount;i++)<br> 

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

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

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

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

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

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

}<br> 

PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;&lt;/body&gt;&lt;/html&gt;&quot;);<br> 

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

else<br> 

{PageProducer1-&gt;HTMLDoc-&gt;Clear();<br> 

PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;&lt;html&gt;&lt;body&gt;&quot;);<br> 

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

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> 

以上部分程序完成了显示邮件服务器邮件列表的功能。接下来,再增加一个路径为/MailList的动作项,<br> 

它的功能是显示指定的邮件内容。<br> 

void __fastcall TWebModule1::WebModule1WebActionItem2Action(<br> 

TObject *Sender, TWebRequest *Request, TWebResponse *Response,<br> 

bool &amp;Handled)<br> 

{<br> 

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

URLData = NULL;<br> 

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

{case mtPost:<br> 

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

break;<br> 

case mtGet:<br> 

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

break;}<br> 

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

<br> 

//下面开始连接邮件服务器<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();<br> 

<br> 

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

if(ConnectFlag)<br> 

{PageProducer1-&gt;HTMLDoc-&gt;Clear();<br> 

PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;&lt;html&gt;&lt;body&gt;&quot;);<br> 

PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;第&quot;+ IntToStr(EmailOrder)+ &quot;个邮件内容:&quot;);<br> 

NMPOP31-&gt;GetMailMessage(EmailOrder);<br> 

PageProducer1-&gt;HTMLDoc-&gt;AddStrings(NMPOP31-&gt;MailMessage-&gt;Head);<br> 

PageProducer1-&gt;HTMLDoc-&gt;AddStrings(NMPOP31-&gt;MailMessage-&gt;Body);<br> 

PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;&lt;/body&gt;&lt;/html&gt;&quot;);<br> 

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

else<br> 

{PageProducer1-&gt;HTMLDoc-&gt;Clear();<br> 

PageProducer1-&gt;HTMLDoc-&gt;Add(&quot;&lt;html&gt;&lt;body&gt;&quot;);<br> 

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

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\<br> 

scripts即可。以上程序在Pwin98+PWS4上通过。<br> 

此外,本程序还有不足之处,比如只能查看内容为纯文本格式的邮件,没有处理异常的能力。读者感兴趣<br> 

的话,不妨改进</p> 

 

</body> 

</html> 

⌨️ 快捷键说明

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