• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • C++Builder 4.0在線接收電子郵件

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    河南濮陽中原油田計算中心 李 東 我們在使用163、長通飛華等免費電子郵件的時候,會發現這些電子信箱具有在線收發的功能,即可以通過瀏覽器發送和接收電子郵件。這些功能一般是通過CGI 實現的,而CGI 技術正在逐漸被ISAPI/NSAPI 技術所取代,下面的例子使用C
    河南濮陽中原油田計算中心 李 東

      我們在使用163、長通飛華等免費電子郵件的時候,會發現這些電子信箱具有在線收發的功能,即可以通過瀏覽器發送和接收電子郵件。這些功能一般是通過CGI 實現的,而CGI 技術正在逐漸被ISAPI/NSAPI 技術所取代,下面的例子使用C ++Builder4.0 中的ISAPI/NSAPI 實現了電子郵件的在線接收。使用C ++Builder4 開發Web Server 程序是非常簡單的,C ++Builder 4 的VCL 提供了大量的元件和對象,支持Web Server 程序的開發。

      本程序由兩個文件構成,分別為:

      index.htm:接收電子郵件的瀏覽器界面,放到WEB 服務器的缺省目錄下(如:C:\.netpub\wwwroot);ReadMail.dll:在瀏覽器內顯示郵件列表以及指定郵件內容的Web Server Application。這個動態鏈結庫文件放在可執行文件路徑下(如C:\Inetpub\scripts)。

      用戶在瀏覽器內通過Web Server 瀏覽index.htm,輸入主機名、端口(一般是110)、用戶名、口令后,首先會看到用戶的郵件列表,單擊相應的郵件序號即可查看郵件內容。

      首先建立index.htm,其內容如下:

    < html >
    < head >
    < meta http -equiv="Content -Type"
    content="text/html; charset=gb_2312 -80" >
    < meta name="GENERATOR" content="Microsoft FrontPage Express 2.0" >
    < title > 郵件查看< /title >
    < /head >
    < body bgcolor=" #FFFFFF" >
    < form action=" /scripts/MailList.dll/MailList"
    method="POST" >
    < p > 主機:< input type="text" size="20" name="Host" >< /p >
    < p > 端口:< input type="text" size="20" name="Port" >< /p >
    < p > 用戶名:< input type="text" size="20" name="Name" >< /p >
    < p > 口令:< input type="password" size="20" name="Code" >< /p >
    < p >< input type="submit" name="B1" value=" 提交" >< input
      type="reset" name="B2" value=" 復原" >< /p >
    < /form >
    < /body >
    < /html >
      下面編寫ReadMail.dll:

      在C ++Builder 中新建一個基于ISAPI 的Web Server Application,手動增加NMPOP31,PageProducer1。在Unit1.h 頭文件中定義幾個變量:

    AnsiString HostName,HostPort,UserName,UserCode;
    TStrings *URLData;
     // 接受HTTP 請求傳遞的參數
    bool ConnectFlag;
    int EmailOrder;
      增加一個路徑為/MailList 的動作項,其代碼如下:

    void __fastcall TWebModule1::WebModule1
    WebActionItem1Action(TObject *Sender,
    TWebRequest *Request, TWebResponse
        ?。猂esponse,bool &Handled)
    {
      // 接受HTTP 請求傳遞的參數,
     從中獲取主機、端口、戶名和口令
    URLData = NULL;
    switch(Request ->MethodType)
      {case mtPost:
      URLData = Request ->ContentFields;
      break;
      case mtGet:
      URLData = Request ->QueryFields;
      break;
      }
    HostName = URLData ->Values["Host"];
    HostPort = URLData ->Values["Port"];
    UserName = URLData ->Values["Name"];
    UserCode = URLData ->Values["Code"];

      // 下面開始連接郵件服務器
    NMPOP31 ->AttachFilePath=".";
    // 存儲郵件路徑為當前路徑
    NMPOP31 ->DeleteOnRead=false;
    // 不刪除服務器上的副本
    NMPOP31 ->ReportLevel=Status_Basic;
    //Status 的詳細程度
    NMPOP31 ->TimeOut=20000;// 設定超時
    NMPOP31 ->Host=HostName;
    NMPOP31 ->Port=StrToInt(HostPort);
    NMPOP31 ->UserID=UserName;
    NMPOP31 ->Password=UserCode;
    ConnectFlag=true;
    NMPOP31 ->Connect();

    // 如果連接成功,
    則制作郵件列表的HTML 語句
    if(ConnectFlag)
    {PageProducer1 ->HTMLDoc ->Clear();
    PageProducer1 ->HTMLDoc ->Add
      ("< html >< body > ");
    PageProducer1 ->HTMLDoc ->Add
    (" 郵件個數" +IntToStr
      (NMPOP31 ->MailCount));
    if(NMPOP31 ->MailCount)
    for(int i=1;i<=NMPOP31 ->MailCount;i ++)
    {PageProducer1 ->HTMLDoc ->Add("< a href='");
    PageProducer1 ->HTMLDoc ->Add("ReadMail?Mx=");
    PageProducer1 ->HTMLDoc ->Add(IntToStr(i));
    PageProducer1 ->HTMLDoc ->Add("'>");
    PageProducer1 ->HTMLDoc ->Add(IntToStr(i));
    PageProducer1 ->HTMLDoc ->Add("< /a >");}
    }
    PageProducer1 ->HTMLDoc ->Add("< /body >< /html >");
    NMPOP31 ->Disconnect();}
    else
    {PageProducer1 ->HTMLDoc ->Clear();
    PageProducer1 ->HTMLDoc ->Add("< html >
    ");
    PageProducer1 ->HTMLDoc ->Add
      (" 連接服務器失??!");
    PageProducer1 ->HTMLDoc ->Add("< /body >
    < /html >");}
    // 將郵件列表的HTML 語句發送給瀏覽器
    Response ->Content = PageProducer1 ->Content( );
    }
    //?。?br>   以上部分程序完成了顯示郵件服務器郵件列表的功能。接下來,再增加一個路徑為/MailList 的動作項,它的功能是顯示指定的郵件內容。

    void __fastcall TWebModule1::WebModule1
    WebActionItem2Action(TObject *Sender,
    TWebRequest *Request, TWebResponse
      *Response,bool &Handled)
    {
    // 接受HTTP 請求傳遞的參數,
    從中獲取用戶名和口令、
    欲查看的郵件序號

    URLData = NULL;
    switch(Request ->MethodType)
      {case mtPost:
      URLData = Request ->ContentFields;
      break;
      case mtGet:
      URLData = Request ->QueryFields;
      break;}
    EmailOrder = StrToInt(URLData ->Values["Mx"]);

      // 下面開始連接郵件服務器
    NMPOP31 ->AttachFilePath=".";
      // 存儲郵件路徑為當前路徑
    NMPOP31 ->DeleteOnRead=false;
      // 不刪除服務器上的副本
    NMPOP31 ->ReportLevel=Status_Basic;
      //Status 的詳細程度
    NMPOP31 ->TimeOut=20000; // 設定超時
    NMPOP31 ->Host=HostName;
    NMPOP31 ->Port=StrToInt(HostPort);
    NMPOP31 ->UserID=UserName;
    NMPOP31 ->Password=UserCode;
    ConnectFlag=true;
    NMPOP31 ->Connect();

     // 如果連接成功,打開指定的郵件
    if(ConnectFlag)
    {PageProducer1 ->HTMLDoc ->Clear();
    PageProducer1 ->HTMLDoc ->Add
      ("< html >< body >");
    PageProducer1 ->HTMLDoc ->Add
    (" 第" +IntToStr(EmailOrder) +
      " 個郵件內容:");
    NMPOP31 ->GetMailMessage(EmailOrder);
    PageProducer1 ->HTMLDoc ->AddStrings
    (NMPOP31 ->MailMessage ->Head);
    PageProducer1 ->HTMLDoc ->AddStrings
     (NMPOP31 ->MailMessage ->Body);
    PageProducer1 ->HTMLDoc ->Add("< /body >
    < /html >");
    NMPOP31 ->Disconnect(); }
    else
    {PageProducer1 ->HTMLDoc ->Clear();
    PageProducer1 ->HTMLDoc ->Add
    ("< html >< body >");
    PageProducer1 ->HTMLDoc ->Add
    (" 連接服務器失??!");
    PageProducer1 ->HTMLDoc ->Add
    ("< /body >< /html >");}
    // 將顯示指定郵件內容的
    HTML 語句發送給瀏覽器
    Response ->Content = PageProducer1 ->
      Content( );
    }
    // -------------
    最后在NMPOP31 的ConnectionFailed
     事件中加入:
    void __fastcall TWebModule1::NMPOP31
    ConnectionFailed(TObject *Sender)
    {
    ConnectFlag=false;    
    }
    // -------------
      編譯完成后,將生成的DLL 文件更名為和HTML 文件相對應的名稱(如:ReadMail.dll),放在C:\Inetpub\scripts 即可。以上程序在Pwin98 +PWS4 上通過。

      此外,本程序還有不足之處,比如只能查看內容為純文本格式的郵件,沒有處理異常的能力。讀者感興趣的話,不妨改進?!?/p>

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>