?? bcb_n14.htm
字號(hào):
<html>
<head>
<title>C++Builder4.0實(shí)現(xiàn)在線接收電子郵件</title>
<meta http-equiv="目錄類(lèi)型" content="文本/html; 字符集=gb2312">
</head>
<body bgcolor="#FFFFFF">
<table width="100%" border="0" height="285">
<tr>
<td height="35">
<div align="center" class="p14"><font color="#000000">C++Builder4.0實(shí)現(xiàn)在線接收電子郵件</font></div>
</td>
</tr>
<tr valign="top">
<td>
<p align=center><strong>河南濮陽(yáng)中原油田計(jì)算中心 李東</strong></p>
<p> 我們?cè)谑褂?63、長(zhǎng)通飛華等免費(fèi)電子郵件的時(shí)候,會(huì)發(fā)現(xiàn)這些電子信箱具有在線收發(fā)的功能,即可以通過(guò)瀏覽器發(fā)送和接收郵件電子郵件。這些功能一般是通過(guò)CGI實(shí)現(xiàn)的,而CGI技術(shù)正在逐漸被ISAPI/NSAPI技術(shù)所取代,下面的例子使用C++Builder4.0中的ISAPI/NSAPI實(shí)現(xiàn)了電子郵件的在線接收。使用C++Builder4開(kāi)發(fā)Web
Server程序是非常簡(jiǎn)單的,C++Builder 4的VCL提供了大量的元件和對(duì)象,支持Web Server程序的開(kāi)發(fā)。<br>
本程序由兩個(gè)文件構(gòu)成,分別為index.htm:接收電子郵件的瀏覽器界面,放到WEB服務(wù)器的缺省目錄下(如:C:\Inetpub\wwwroot);ReadMail.dll:在瀏覽器內(nèi)顯示郵件列表以及指定郵件內(nèi)容的Web
Server Application。這個(gè)動(dòng)態(tài)鏈結(jié)庫(kù)文件放<br>
可執(zhí)行文件路徑下(如C:\Inetpub\scripts)。用戶(hù)在瀏覽器內(nèi)通過(guò)Web Server瀏覽index.htm,輸入主機(jī)名、端口(一般<br>
是110)、用戶(hù)名、口令后,首先會(huì)看到用戶(hù)的郵件列表,單擊相應(yīng)的郵件序號(hào)即可查看郵件內(nèi)容。<br>
<br>
首先建立index.htm,其內(nèi)容如下:<br>
<html><br>
<head><br>
<meta http-equiv="Content-Type"<br>
content="text/html; charset=gb_2312-80"><br>
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0"><br>
<title>郵件查看</title><br>
</head><br>
<body bgcolor="#FFFFFF"><br>
<form action=" /scripts/MailList.dll/MailList"<br>
method="POST"><br>
<p>主機(jī):<input type="text" size="20" name="Host"></p><br>
<p>端口:<input type="text" size="20" name="Port"></p><br>
<p>用戶(hù)名:<input type="text" size="20" name="Name"></p><br>
<p>口令:<input type="password" size="20" name="Code"></p><br>
<p><input type="submit" name="B1" value="提交"><input<br>
type="reset" name="B2" value="復(fù)原"></p><br>
</form><br>
</body><br>
</html><br>
下面編寫(xiě)ReadMail.dll<br>
在C++Builder中新建一個(gè)基于ISAPI的Web Server Application,手動(dòng)增加<br>
NMPOP31,PageProducer1。在Unit1.h頭文件中定義幾個(gè)變量:<br>
AnsiString HostName,HostPort,UserName,UserCode;<br>
TStrings *URLData; // 接受HTTP請(qǐng)求傳遞的參數(shù)<br>
bool ConnectFlag;<br>
int EmailOrder;<br>
增加一個(gè)路徑為/MailList的動(dòng)作項(xiàng),其代碼如下:<br>
void __fastcall TWebModule1::WebModule1WebActionItem1Action(<br>
TObject *Sender, TWebRequest *Request, TWebResponse *Response,<br>
bool &Handled)<br>
{<br>
//接受HTTP請(qǐng)求傳遞的參數(shù),從中獲取用主機(jī)、端口、戶(hù)名和口令<br>
URLData = NULL;<br>
switch(Request->MethodType)<br>
{case mtPost:<br>
URLData = Request->ContentFields;<br>
break;<br>
case mtGet:<br>
URLData = Request->QueryFields;<br>
break;<br>
}<br>
HostName = URLData->Values["Host"];<br>
HostPort = URLData->Values["Port"];<br>
UserName = URLData->Values["Name"];<br>
UserCode = URLData->Values["Code"];<br>
<br>
//下面開(kāi)始連接郵件服務(wù)器<br>
NMPOP31->AttachFilePath=".";//存儲(chǔ)郵件路徑為當(dāng)前路徑<br>
NMPOP31->DeleteOnRead=false;//不刪除服務(wù)器上的副本<br>
NMPOP31->ReportLevel=Status_Basic;//Status的詳細(xì)程度<br>
NMPOP31->TimeOut=20000;//設(shè)定超時(shí)<br>
NMPOP31->Host=HostName;<br>
NMPOP31->Port=StrToInt(HostPort);<br>
NMPOP31->UserID=UserName;<br>
NMPOP31->Password=UserCode;<br>
ConnectFlag=true;<br>
NMPOP31->Connect();<br>
<br>
//如果連接成功,則制作郵件列表的HTML語(yǔ)句<br>
if(ConnectFlag)<br>
{PageProducer1->HTMLDoc->Clear();<br>
PageProducer1->HTMLDoc->Add("<html><body>");<br>
PageProducer1->HTMLDoc->Add("郵件個(gè)數(shù)"+IntToStr(NMPOP31->MailCount));<br>
if(NMPOP31->MailCount)<br>
for(int i=1;i<=NMPOP31->MailCount;i++)<br>
{PageProducer1->HTMLDoc->Add("<a href='");<br>
PageProducer1->HTMLDoc->Add("ReadMail?Mx=");<br>
PageProducer1->HTMLDoc->Add(IntToStr(i));<br>
PageProducer1->HTMLDoc->Add("'>");<br>
PageProducer1->HTMLDoc->Add(IntToStr(i));<br>
PageProducer1->HTMLDoc->Add("</a>");}<br>
}<br>
PageProducer1->HTMLDoc->Add("</body></html>");<br>
NMPOP31->Disconnect();}<br>
else<br>
{PageProducer1->HTMLDoc->Clear();<br>
PageProducer1->HTMLDoc->Add("<html><body>");<br>
PageProducer1->HTMLDoc->Add("連接服務(wù)器失敗!");<br>
PageProducer1->HTMLDoc->Add("</body></html>");}<br>
//將郵件列表的HTML語(yǔ)句發(fā)送給瀏覽器<br>
Response->Content = PageProducer1->Content( );<br>
}<br>
//--------------------------------------------------------------<br>
以上部分程序完成了顯示郵件服務(wù)器郵件列表的功能。接下來(lái),再增加一<br>
個(gè)路徑為/MailList的動(dòng)作項(xiàng),它的功能是顯示指定的郵件內(nèi)容。<br>
void __fastcall TWebModule1::WebModule1WebActionItem2Action(<br>
TObject *Sender, TWebRequest *Request, TWebResponse *Response,<br>
bool &Handled)<br>
{<br>
//接受HTTP請(qǐng)求傳遞的參數(shù),從中獲取用戶(hù)名和口令、欲查看的郵件序號(hào)<br>
URLData = NULL;<br>
switch(Request->MethodType)<br>
{case mtPost:<br>
URLData = Request->ContentFields;<br>
break;<br>
case mtGet:<br>
URLData = Request->QueryFields;<br>
break;}<br>
EmailOrder = StrToInt(URLData->Values["Mx"]);<br>
<br>
//下面開(kāi)始連接郵件服務(wù)器<br>
NMPOP31->AttachFilePath=".";//存儲(chǔ)郵件路徑為當(dāng)前路徑<br>
NMPOP31->DeleteOnRead=false;//不刪除服務(wù)器上的副本<br>
NMPOP31->ReportLevel=Status_Basic;//Status的詳細(xì)程度<br>
NMPOP31->TimeOut=20000; //設(shè)定超時(shí)<br>
NMPOP31->Host=HostName;<br>
NMPOP31->Port=StrToInt(HostPort);<br>
NMPOP31->UserID=UserName;<br>
NMPOP31->Password=UserCode;<br>
ConnectFlag=true;<br>
NMPOP31->Connect();<br>
<br>
//如果連接成功,打開(kāi)指定的郵件<br>
if(ConnectFlag)<br>
{PageProducer1->HTMLDoc->Clear();<br>
PageProducer1->HTMLDoc->Add("<html><body>");<br>
PageProducer1->HTMLDoc->Add("第"+ IntToStr(EmailOrder)+ "個(gè)郵件內(nèi)容:");<br>
NMPOP31->GetMailMessage(EmailOrder);<br>
PageProducer1->HTMLDoc->AddStrings(NMPOP31->MailMessage->Head);<br>
PageProducer1->HTMLDoc->AddStrings(NMPOP31->MailMessage->Body);<br>
PageProducer1->HTMLDoc->Add("</body></html>");<br>
NMPOP31->Disconnect(); }<br>
else<br>
{PageProducer1->HTMLDoc->Clear();<br>
PageProducer1->HTMLDoc->Add("<html><body>");<br>
PageProducer1->HTMLDoc->Add("連接服務(wù)器失敗!");<br>
PageProducer1->HTMLDoc->Add("</body></html>");}<br>
//將顯示指定郵件內(nèi)容的HTML語(yǔ)句發(fā)送給瀏覽器<br>
Response->Content = PageProducer1->Content( );<br>
}<br>
//------------------------------------------------------------<br>
最后在NMPOP31的ConnectionFailed事件中加入:<br>
void __fastcall TWebModule1::NMPOP31ConnectionFailed(TObject *Sender)<br>
{<br>
ConnectFlag=false; <br>
}<br>
//------------------------------------------------------------<br>
編譯完成后,將生成的DLL文件更名為和HTML文件相對(duì)應(yīng)的名稱(chēng)<br>
(如:ReadMail.dll),放在C:\Inetpub\scripts即可。以上程序在Pwin98+PWS4上通過(guò)。此外,本程序還有不足之處,比如只能查看內(nèi)容為純文本格式的郵件,沒(méi)有處理異常的能力。讀者感興趣的話(huà),不妨改進(jìn)。</p>
<p> </p>
</td>
</tr>
</table>
<br>
</body>
</html>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -