亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? smtpprot.pas

?? 包含常用Internet協議TCP,UDP、HTTP、FTP、Telnet等
?? PAS
?? 第 1 頁 / 共 5 頁
字號:

{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.CheckReady;
begin
    if not (FState in [smtpReady, smtpInternalReady]) then
        raise SmtpException.Create('SMTP component not ready');
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.TriggerStateChange;
begin
    if Assigned(FOnStateChange) then
        FOnStateChange(Self);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.TriggerSessionConnected(Error : Word);
begin
    if Assigned(FOnSessionConnected) then
        FOnSessionConnected(Self, Error);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.TriggerSessionClosed(Error : Word);
begin
    if Assigned(FOnSessionClosed) then
        FOnSessionClosed(Self, Error);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.TriggerRequestDone(Error: Word);
begin
    if not FRequestDoneFlag then begin
        FRequestDoneFlag := TRUE;
        if (Error = 0) and Assigned(FNextRequest) then begin
            if FState <> smtpAbort then
                StateChange(smtpInternalReady);
            FNextRequest;
        end
        else begin
            StateChange(smtpReady);
            { Restore the lastresponse saved before quit command }
            if FHighLevelFlag and (FStatusCodeSave >= 0) then begin
                 FLastResponse := FLastResponseSave;
                 FStatusCode   := FStatusCodeSave;
            end;
            FHighLevelFlag := FALSE;
            PostMessage(Handle, WM_SMTP_REQUEST_DONE, 0, Error);
        end;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.StateChange(NewState : TSmtpState);
begin
    if FState <> NewState then begin
        FState := NewState;
        TriggerStateChange;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.TriggerDisplay(Msg : String);
begin
    if Assigned(FOnDisplay) then
        FOnDisplay(Self, Msg);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.DisplayLastResponse;
begin
     TriggerDisplay('< ' + FLastResponse);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.WSocketDataAvailable(Sender: TObject; Error: Word);
var
    Len : Integer;
    I   : Integer;
    p   : PChar;
begin
    Len := FWSocket.Receive(@FReceiveBuffer[FReceiveLen],
                            sizeof(FReceiveBuffer) - FReceiveLen);

    if Len <= 0 then
        Exit;

    FReceiveBuffer[FReceiveLen + Len] := #0;
    FReceiveLen := FReceiveLen + Len;

    while FReceiveLen > 0 do begin
        I := Pos(#13#10, FReceiveBuffer);
        if I <= 0 then
            break;
        if I > FReceiveLen then
            break;

        FLastResponse := Copy(FReceiveBuffer, 1, I - 1);
        TriggerResponse(FLastResponse);

{$IFDEF DUMP}
        FDumpBuf := '>|';
        FDumpStream.WriteBuffer(FDumpBuf[1], Length(FDumpBuf));
        FDumpStream.WriteBuffer(FLastResponse[1], Length(FLastResponse));
        FDumpBuf := '|' + #13#10;
        FDumpStream.WriteBuffer(FDumpBuf[1], Length(FDumpBuf));
{$ENDIF}
{$IFDEF VER80}
        { Add a nul byte at the end of string for Delphi 1 }
        FLastResponse[Length(FLastResponse) + 1] := #0;
{$ENDIF}
        FReceiveLen := FReceiveLen - I - 1;
        if FReceiveLen > 0 then
            Move(FReceiveBuffer[I + 1], FReceiveBuffer[0], FReceiveLen + 1);

        if FState = smtpWaitingBanner then begin
            DisplayLastResponse;
            p := GetInteger(@FLastResponse[1], FStatusCode);
            if p^ = '-' then
                Continue;  { Continuation line, ignore }
            if FStatusCode <> 220 then begin
                SetErrorMessage;
                FRequestResult := FStatusCode;
                FWSocket.Close;
                Exit;
            end;

            StateChange(smtpConnected);
            TriggerSessionConnected(Error);

            if Assigned(FWhenConnected) then
                FWhenConnected
            else begin
                TriggerRequestDone(0);
            end;
        end
        else if FState = smtpWaitingResponse then begin
            if Assigned(FNext) then
                FNext
            else
                raise SmtpException.Create('Program error: FNext is nil');
        end
        else begin
            { Unexpected data received }
            DisplayLastResponse;
        end;
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.WSocketSessionConnected(Sender: TObject; Error: Word);
begin
    { Do not trigger the client SessionConnected from here. We must wait }
    { to have received the server banner.                                }
    if Error <> 0 then begin
        FLastResponse := '500 ' + WSocketErrorDesc(Error) +
                         ' (Winsock error #' + IntToStr(Error) + ')';
        FStatusCode   := 500;
        FConnected    := FALSE;
        SetErrorMessage;
        TriggerRequestDone(Error);
        FWSocket.Close;
        StateChange(smtpReady);
    end
    else begin
        FConnected := TRUE;
        StateChange(smtpWaitingBanner);
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.WSocketDnsLookupDone(Sender: TObject; Error: Word);
begin
    if Error <> 0 then begin
        FLastResponse := '500 ' + WSocketErrorDesc(Error) +
                         ' (Winsock error #' + IntToStr(Error) + ')';
        FStatusCode   := 500;
        SetErrorMessage;
        TriggerRequestDone(Error);
    end
    else begin
        FWSocket.Addr  := FWSocket.DnsResult;
        FWSocket.Proto := 'tcp';
        FWSocket.Port  := FPort;
        FWSocket.OnSessionConnected := WSocketSessionConnected;
        FWSocket.OnDataAvailable    := WSocketDataAvailable;
        StateChange(smtpConnecting);
        try
            FWSocket.Connect;
        except
            on E:Exception do begin
                FLastResponse  := '500 ' + E.ClassName + ': ' + E.Message;
                FStatusCode    := 500;
                FRequestResult := FStatusCode;
                SetErrorMessage;
                TriggerRequestDone(FStatusCode);
            end;
        end
    end;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.SendCommand(Cmd : String);
begin
    TriggerCommand(Cmd);
    TriggerDisplay('> ' + Cmd);
    if FWSocket.State = wsConnected then
        FWSocket.SendStr(Cmd + #13 + #10);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.ExecAsync(
    RqType      : TSmtpRequest;
    Cmd         : String;         { Command to execute                      }
    OkResponses : array of Word;  { List of responses like '200 221 342'    }
    DoneAsync   : TSmtpNextProc); { What to do when done                    }
var
    I : Integer;
begin
    CheckReady;

    if not FConnected then
        raise SmtpException.Create('SMTP component not connected');

    if not FHighLevelFlag then
        FRequestType := RqType;

    for I := 0 to High(OkResponses) do
        FOkResponses[I] := OkResponses[I];
    FOkResponses[High(OkResponses) + 1] := 0;

    FRequestDoneFlag  := FALSE;
    FNext             := NextExecAsync;
    FDoneAsync        := DoneAsync;
    StateChange(smtpWaitingResponse);
    SendCommand(Cmd);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.NextExecAsync;
var
    I : Integer;
    p : PChar;
begin
    DisplayLastResponse;
    p := GetInteger(@FLastResponse[1], FStatusCode);
    if p^ = '-' then
        Exit; { Continuation line, nothing to do }

    if FOkResponses[0] = 0 then begin
        { The list of ok responses is empty }
        if FStatusCode >= 500 then begin
            { Not a good response }
            FRequestResult := FStatusCode;
            SetErrorMessage;
        end
        else
            FRequestResult := 0;
    end
    else begin
        { We have a list of ok response codes }
        for I := 0 to High(FOkResponses) do begin
            if FOkResponses[I] = 0 then begin
                { No good response found }
                FRequestResult := FStatusCode;
                SetErrorMessage;
                break;
            end;
            if FOkResponses[I] = FStatusCode then begin
                { Good response found }
                FRequestResult := 0;
                Break;
            end;
        end;
    end;

    if Assigned(FDoneAsync) then
        FDoneAsync
    else
        TriggerRequestDone(FRequestResult);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.Helo;
begin
    FFctPrv := smtpFctHelo;
    if FSignOn = '' then
        ExecAsync(smtpHelo, 'HELO ' + LocalHostName, [250], nil)
    else
        ExecAsync(smtpHelo, 'HELO ' + FSignOn, [250], nil);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.Vrfy;
begin
    FFctPrv := smtpFctVrfy;
    ExecAsync(smtpVrfy, 'VRFY ' + FHdrTo, [250], nil);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.MailFrom;
begin
    FFctPrv := smtpFctMailFrom;
    if (Pos('<', FFromName) <> 0) and (Pos('>', FFromName) <> 0) then
        ExecAsync(smtpMailFrom, 'MAIL FROM:' + Trim(FFromName), [250], nil)
    else
        ExecAsync(smtpMailFrom,
                  'MAIL FROM:<' + Trim(FFromName) + '>', [250], nil)
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.Rset;
begin
    FFctPrv := smtpFctRset;
    ExecAsync(smtpRset, 'RSET', [250], nil);
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.RcptTo;
begin
    if FRcptName.Count <= 0 then
        raise SmtpException.Create('RcptName list is empty');

    FItemCount := -1;
    RcptToNext;
end;


{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomSmtpClient.RcptToNext;
var
    WhenDone : TSmtpNextProc;
begin
    Inc(FItemCount);
    if FItemCount >= (FRcptName.Count - 1) then
        WhenDone := nil
    else
        WhenDone := RcptToDone;
    FFctPrv    := smtpFctRcptTo;
    if (Pos('<', FRcptName.Strings[FItemCount]) <> 0) and

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日免费三级在线| 亚洲精品视频在线观看免费| 国产精品久久久久久久午夜片 | 国产情人综合久久777777| 亚洲日本韩国一区| 激情综合色综合久久| 色综合中文字幕国产 | 亚洲综合视频在线| 久草在线在线精品观看| 欧美性色黄大片手机版| 国产精品乱码妇女bbbb| 日韩va亚洲va欧美va久久| 91理论电影在线观看| 国产亚洲欧美日韩俺去了| 日韩二区三区在线观看| 91成人免费在线视频| 中文字幕精品一区二区三区精品| 亚洲国产精品一区二区久久| 99热99精品| 国产精品免费免费| 国产aⅴ综合色| 久久中文字幕电影| 精品制服美女丁香| 91精品国产免费久久综合| 亚洲综合另类小说| hitomi一区二区三区精品| 国产网红主播福利一区二区| 韩国v欧美v日本v亚洲v| 欧美不卡一二三| 免费欧美日韩国产三级电影| 欧美精选午夜久久久乱码6080| 一区二区三区四区国产精品| 色综合视频一区二区三区高清| 国产欧美视频一区二区三区| 国产福利一区在线| 国产日韩欧美不卡在线| 丰满放荡岳乱妇91ww| 国产精品青草久久| 成人免费看片app下载| 国产精品网站在线观看| 99久久久精品免费观看国产蜜| 国产精品区一区二区三区| 成人午夜电影网站| 亚洲男同1069视频| 欧美色爱综合网| 日韩二区三区在线观看| 欧美videos大乳护士334| 精品无人码麻豆乱码1区2区| 91精品国产麻豆国产自产在线| 亚洲午夜激情网站| 欧美日韩视频在线观看一区二区三区 | 色综合久久综合| 《视频一区视频二区| 一本一道久久a久久精品综合蜜臀| 亚洲欧美国产三级| 337p亚洲精品色噜噜噜| 国产老妇另类xxxxx| 国产精品久久免费看| 色综合视频在线观看| 日本人妖一区二区| 久久久久99精品国产片| 色老汉一区二区三区| 丝袜美腿成人在线| 精品国偷自产国产一区| 99视频一区二区| 婷婷综合另类小说色区| 久久久国产午夜精品| 99精品视频在线免费观看| 午夜精品福利一区二区三区蜜桃| 精品国产乱码久久久久久浪潮| www.成人网.com| 日韩av在线发布| 日韩毛片一二三区| 日韩三级视频中文字幕| www.爱久久.com| 久久激情五月婷婷| 亚洲精品亚洲人成人网在线播放| 日韩欧美国产电影| 色天使色偷偷av一区二区| 精品一区二区三区免费| 亚洲裸体xxx| 久久综合色之久久综合| 在线亚洲精品福利网址导航| 国产精品伊人色| 青青青爽久久午夜综合久久午夜 | 亚洲精品免费播放| 欧美成人bangbros| 欧美视频在线播放| 99精品桃花视频在线观看| 精品无人码麻豆乱码1区2区| 亚洲高清视频的网址| 中文字幕亚洲区| 久久嫩草精品久久久久| 8x8x8国产精品| 97se亚洲国产综合自在线不卡| 99久久777色| 国产精品福利电影一区二区三区四区| 欧美酷刑日本凌虐凌虐| 99久久精品国产毛片| 国产乱妇无码大片在线观看| 日韩国产高清影视| 亚洲成人自拍网| 亚洲色图制服诱惑 | 欧美日韩国产天堂| 日本韩国欧美三级| 91亚洲国产成人精品一区二三| 粉嫩欧美一区二区三区高清影视| 蜜桃一区二区三区在线观看| 天天色 色综合| 午夜激情一区二区| 亚洲第一主播视频| 亚洲制服丝袜一区| 一区二区在线观看视频| ...中文天堂在线一区| 国产精品午夜免费| 国产精品嫩草久久久久| 中文字幕精品三区| 国产精品人妖ts系列视频| 国产精品久久久久桃色tv| 中文字幕av一区二区三区免费看| 久久久777精品电影网影网| 精品成人一区二区| 久久日韩粉嫩一区二区三区| 久久免费视频一区| 欧美高清在线视频| 亚洲欧洲精品成人久久奇米网| 综合激情网...| 一二三区精品视频| 日韩中文字幕一区二区三区| 首页亚洲欧美制服丝腿| 奇米影视7777精品一区二区| 日本欧美大码aⅴ在线播放| 免播放器亚洲一区| 国内精品久久久久影院薰衣草| 国产在线精品免费| 成人黄色电影在线| 欧美亚洲另类激情小说| 日韩三级在线观看| 中日韩av电影| 亚洲大型综合色站| 国产在线视视频有精品| 成人h版在线观看| 欧美网站一区二区| 欧美成人综合网站| 国产精品久久久久久久岛一牛影视 | 亚洲美女偷拍久久| 日韩精品一级中文字幕精品视频免费观看 | 日韩一卡二卡三卡四卡| 日本一区二区三区在线不卡| 国产精品超碰97尤物18| 五月激情综合婷婷| 国产成a人亚洲| 欧美日韩中文字幕一区二区| 欧美一级片免费看| 国产精品欧美一级免费| 午夜a成v人精品| 精品一区二区三区久久| 国产精品资源网站| 91激情五月电影| 久久综合五月天婷婷伊人| 亚洲免费伊人电影| 久久成人免费电影| 在线日韩国产精品| 久久综合色一综合色88| 伊人开心综合网| 国产成人亚洲精品青草天美| 欧美三级视频在线观看| 国产日韩精品一区| 免费人成精品欧美精品| 99精品1区2区| 久久久国际精品| 五月激情六月综合| 91丨九色丨蝌蚪富婆spa| 2021国产精品久久精品| 五月婷婷色综合| 91视频免费播放| 国产亚洲一区二区三区| 蜜臀av亚洲一区中文字幕| 99r国产精品| 中文字幕高清不卡| 国产综合久久久久影院| 91精品国产综合久久福利| 一区二区在线观看视频| 成人黄色小视频在线观看| 久久婷婷色综合| 久久激情综合网| 51午夜精品国产| 香蕉加勒比综合久久| 99精品欧美一区二区三区综合在线| 久久久亚洲欧洲日产国码αv| 天天爽夜夜爽夜夜爽精品视频| 欧美在线观看视频一区二区| 亚洲欧洲日产国码二区| 激情丁香综合五月| 日韩久久久久久| 精品一区免费av| 欧美成人一级视频| 国产自产高清不卡| 久久这里只有精品首页| 国产一区二区三区美女|