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

📄 mailrcv1.cpp

📁 文件名称:新曦 我的资源 搜索软件 源程序(Borland Delphi 7)说明
💻 CPP
📖 第 1 页 / 共 2 页
字号:
void __fastcall TPOP3ExcercizerForm::Pop3ClientMessageLine(TObject *Sender)
{
    DisplayMemo->Lines->Add(((TPop3Cli *)Sender)->LastResponse);
}
//---------------------------------------------------------------------------
// This event handler is called when TPop3Client is about to receive a
// list line. The MsgNum property gives the message number.
void __fastcall TPOP3ExcercizerForm::Pop3ClientListBegin(TObject *Sender)
{
    DisplayMemo->Lines->Add("*** List begin ***");
}
//---------------------------------------------------------------------------
// This event handler is called when TPop3Client has received the last list
// line.
void __fastcall TPOP3ExcercizerForm::Pop3ClientListEnd(TObject *Sender)
{
    DisplayMemo->Lines->Add("*** List End ***");
}
//---------------------------------------------------------------------------
// This event handler is called for each list line received by TPop3Client.
void __fastcall TPOP3ExcercizerForm::Pop3ClientListLine(TObject *Sender)
{
    AnsiString Buffer;

    Buffer = "MsgNum = " + IntToStr(((TPop3Cli *)Sender)->MsgNum) + " " +
             "MsgSize = " + IntToStr(((TPop3Cli *)Sender)->MsgSize) + " " +
             "Line = """ + ((TPop3Cli *)Sender)->LastResponse + """";
    if (DisplayMemo->Lines->Count > 200)
         DisplayMemo->Clear();
    DisplayMemo->Lines->Add(Buffer);
}
//---------------------------------------------------------------------------
void __fastcall TPOP3ExcercizerForm::Pop3ClientUidlBegin(TObject *Sender)
{
    DisplayMemo->Lines->Add("*** Uidl begin ***");
}
//---------------------------------------------------------------------------
void __fastcall TPOP3ExcercizerForm::Pop3ClientUidlEnd(TObject *Sender)
{
    DisplayMemo->Lines->Add("*** Uidl end ***");
}
//---------------------------------------------------------------------------
void __fastcall TPOP3ExcercizerForm::Pop3ClientUidlLine(TObject *Sender)
{
    AnsiString Buffer;

    Buffer = "MsgNum = "  + IntToStr(((TPop3Cli *)Sender)->MsgNum) + " " +
             "MsgUidl = " + ((TPop3Cli *)Sender)->MsgUidl + """";
    if (DisplayMemo->Lines->Count > 200)
         DisplayMemo->Clear();
    DisplayMemo->Lines->Add(Buffer);
}
//---------------------------------------------------------------------------
void __fastcall TPOP3ExcercizerForm::MessageBegin(TObject *Sender)
{
    MessageForm->Caption = "Message " +
                           IntToStr(((TPop3Cli *)Sender)->MsgNum);
    MessageForm->Show();
}
//---------------------------------------------------------------------------
void __fastcall TPOP3ExcercizerForm::MessageLine(TObject *Sender)
{
    if (MessageForm->DisplayMemo->Lines->Count > 200)
         MessageForm->DisplayMemo->Clear();
    MessageForm->DisplayMemo->Lines->Add(((TPop3Cli *)Sender)->LastResponse);
}
//---------------------------------------------------------------------------
void __fastcall TPOP3ExcercizerForm::NextButtonClick(TObject *Sender)
{
    MessageForm->DisplayMemo->Clear();
    MessageForm->Caption       = "Message";
    Pop3Client->OnMessageBegin = MessageBegin;
    Pop3Client->OnMessageEnd   = NULL;
    Pop3Client->OnMessageLine  = MessageLine;
    Pop3Client->OnRequestDone  = NextMessageRequestDone;
    Pop3Client->MsgNum         = StrToInt(MsgNumEdit->Text);
    Pop3Client->Retr();
}
//---------------------------------------------------------------------------
void __fastcall TPOP3ExcercizerForm::NextMessageRequestDone(
    TObject      *Sender,
    TPop3Request RqType,
    WORD         Error)
{
    if (Error != 0)
        return;

    MsgNumEdit->Text = IntToStr(StrToInt(MsgNumEdit->Text) + 1);
}
//---------------------------------------------------------------------------
void __fastcall TPOP3ExcercizerForm::GetAllMessageLine(TObject *Sender)
{
    fprintf(FFile, "%s\n", ((TPop3Cli *)Sender)->LastResponse.c_str());
}
//---------------------------------------------------------------------------
// The function here after will start an event chain that will eventually
// download all messages for the POP3 server. We cannot simply loop because
// the POP3 compomnet is asynchronous: it will not wait for operation done
// before returning. We must "chain" operations one after the other using
// the OnRequestDone event handler. We use the variable FGetAllState to keep
// track of where we are.
// To get all messages, we must first call Stat to know how many messages
// are on the server, then for each message we call Uidl to get a unique
// identifier for each message to build a file name and know if we already
// have a message, then we retrieve the message, then we increment the
// message number and continue until the number of messages is reached.
// We should start a TTimer to handle timeout...
void __fastcall TPOP3ExcercizerForm::GetAllButtonClick(TObject *Sender)
{
    TIniFile *IniFile;

    // Get path from INI file
    IniFile  = new TIniFile(IniFileName);
    FMsgPath = IniFile->ReadString("Data", "MsgPath",
                                   ExtractFilePath(Application->ExeName));
    delete IniFile;

    // Be sure to have an ending backslash
    if ((FMsgPath.Length() > 0) && (FMsgPath[FMsgPath.Length()] != '\\'))
        FMsgPath = FMsgPath + "\\";

    FGetAllState = 0;
    FFileOpened  = FALSE;
    Pop3Client->OnRequestDone  = GetAllRequestDone;
    Pop3Client->OnMessageBegin = NULL;
    Pop3Client->OnMessageEnd   = NULL;
    Pop3Client->OnMessageLine  = GetAllMessageLine;
    Pop3Client->Stat();
}
//---------------------------------------------------------------------------
// This event handler is called when a request related to GetAll is done.
// We check for errors and our state variable FGetAllState which tells us
// where we are (stat, uidl or retr which are the 4 commands we use.
// Note that we also could use Dele to remove the messages from the server.
void __fastcall TPOP3ExcercizerForm::GetAllRequestDone(
    TObject      *Sender,
    TPop3Request RqType,
    WORD         Error)
{
    if (Error) {
        if (FFileOpened) {
            FFileOpened = FALSE;
            fclose(FFile);
        }
        DisplayMemo->Lines->Add("Error " + Pop3Client->ErrorMessage);
        return;
    }

    try {
        switch (FGetAllState) {
        case 0: // Comes from the Stat command
            if (Pop3Client->MsgCount < 1) {
                DisplayMemo->Lines->Add("No message to download->");
                return;
            }
            Pop3Client->MsgNum = 1;    // Start with first message
            FGetAllState = 1;
            Pop3Client->Uidl();
            break;
        case 1: // Comes from the Uidl command
            FFileName = FMsgPath + "Msg " + Pop3Client->MsgUidl + "->txt";
            if (FileExists(FFileName)) {
                DisplayMemo->Lines->Add("Message " + IntToStr(Pop3Client->MsgNum) + " already here");
                if (Pop3Client->MsgNum == Pop3Client->MsgCount) {
                    DisplayMemo->Lines->Add("Finished");
                    return;
                }
                Pop3Client->MsgNum = Pop3Client->MsgNum + 1;
                FGetAllState = 1;
                Pop3Client->Uidl();
            }
            else {
                DisplayMemo->Lines->Add("Message " + IntToStr(Pop3Client->MsgNum));
                FFile        = fopen(FFileName.c_str(), "w");
                if (FFile == NULL)
                    throw Exception("Can't open file " + FFileName);
                FFileOpened  = TRUE;
                FGetAllState = 2;
                Pop3Client->Retr();
            }
            break;
        case 2: // Comes from the Retr command
            FFileOpened = FALSE;
            fclose(FFile);
            if (Pop3Client->MsgNum == Pop3Client->MsgCount) {
                DisplayMemo->Lines->Add("Finished");
                return;
            }
            Pop3Client->MsgNum = Pop3Client->MsgNum + 1;
            FGetAllState = 1;
            Pop3Client->Uidl();
            break;
        default:
            DisplayMemo->Lines->Add("Invalid state");
            return;
        }
    } catch (Exception &E) {
        if (FFileOpened) {
            FFileOpened = FALSE;
            fclose(FFile);
        }
        DisplayMemo->Lines->Add("Error: " + E.Message);
    }
}
//---------------------------------------------------------------------------
void __fastcall TPOP3ExcercizerForm::Pop3ClientRequestDone(
    TObject      *Sender,
    TPop3Request RqType,
    WORD         Error)
{
    DisplayMemo->Lines->Add("Request Done Rq==" + IntToStr(Integer(RqType)) +
                            " Error==" + IntToStr(Error));

    if (RqType == pop3Stat) {
        InfoLabel->Caption = "Stat ok, " +
                             IntToStr(Pop3Client->MsgCount) + " messages " +
                             IntToStr(Pop3Client->MsgSize) + " bytes";
    }
    else if (RqType == pop3List) {
        InfoLabel->Caption = "List ok, " +
                             IntToStr(Pop3Client->MsgNum)  + " message " +
                             IntToStr(Pop3Client->MsgSize) + " bytes";
    }
    else if (RqType == pop3Last) {
        InfoLabel->Caption = "Last == " + IntToStr(Pop3Client->MsgNum);
    }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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