打印本文 打印本文 关闭窗口 关闭窗口
直接用WinSock API 发E-mail.
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2543  更新时间:2009/4/23 18:30:24  文章录入:mintao  责任编辑:mintao
Writeln(mfout, Command);
  Result := stat;
end;

function SendCommandWin(Command: string): string;
begin
  
Writeln(mfout, Command + #13);
  Result := stat;
end;

function FillBlank(Source: string; number: Integer): string;
var
  
a: Integer;
begin
  
Result := '''''''';
  for a := Length(trim(Source)) to number do
    
Result := Result + '''' '''';
end;

function IpToLong(ip: string): Longint;
var
  
x, i: Byte;
  ipx: array[0..3] of Byte;
  v: Integer;
begin
  
Result := 0;
  Longint(ipx) := 0;
  i := 0;
  for x := 1 to Length(ip) do
    if 
ip[x] = ''''.'''' then
    begin
      
Inc(i);
      if i = 4 then Exit;
    end
  else
  begin
    if not 
(ip[x] in [''''0''''..''''9'''']) then Exit;
    v := ipx[i] * 10 + Ord(ip[x]) - Ord(''''0'''');
    if v > 255 then Exit;
    ipx[i] := v;
  end;
  Result := Longint(ipx);
end;

function HostToLong(AHost: string): Longint;
var
  
Host: PHost;
begin
  
Result := IpToLong(AHost);
  if Result = 0 then
  begin
    
Host := GetHostByName(PChar(AHost));
    if Host <> nil then Result := Longint(Host^.Addr^^);
  end;
end;

function LongToIp(Long: Longint): string;
var
  
ipx: array[0..3] of Byte;
  i: Byte;
begin
  
Longint(ipx) := long;
  Result       := '''''''';
  for i := 0 to do Result := Result + IntToStr(ipx[i]) + ''''.'''';
  SetLength(Result, Length(Result) - 1);
end;

procedure Disconnect(Socket: Integer);
begin
  
ShutDown(Socket, 1);
  CloseSocket(Socket);
end;

function CallServer(Server: string; Port: Word): Integer;
var
  
SockAddr: TSockAddr;
begin
  
Result := socket(Internet, Stream, 0);
  if Result = -1 then Exit;
  FillChar(SockAddr, SizeOf(SockAddr), 0);
  SockAddr.Family := Internet;
  SockAddr.Port := swap(Port);
  SockAddr.Addr := HostToLong(Server);
  if Connect(Result, SockAddr, SizeOf(SockAddr)) <> 0 then
  begin
    
Disconnect(Result);
    Result := -1;
  end;
end;

function OutputSock(var F: TTextRec): Integer; far;
begin
  if 
F.BufPos <> 0 then
  begin
    
Send(F.Handle, F.BufPtr^, F.BufPos, 0);
    F.BufPos := 0;
  end;
  Result := 0;
end;

function InputSock(var F: TTextRec): Integer; far;
var
  
Size: Longint;
begin
  
F.BufEnd := 0;
  F.BufPos := 0;
  Result := 0;
  repeat
    if 
(IoctlSocket(F.Handle, fIoNbRead, Size) < 0) then
    begin
      
EofSock := True;
      Exit;
    end;
  until (Size >= 0);
  F.BufEnd := Recv(F.Handle, F.BufPtr, F.BufSize, 0);
  EofSock  := (F.Bufend = 0);
end;


function CloseSock(var F: TTextRec): Integer; far;
begin
  
Disconnect(F.Handle);
  F.Handle := -1;
  Result   := 0;
end;

function OpenSock(var F: TTextRec): Integer; far;
begin
  if 
F.Mode = fmInput then
  begin
    
EofSock := False;
    F.BufPos := 0;
    F.BufEnd := 0;
    F.InOutFunc := @InputSock;
    F.FlushFunc := nil;
  end
  else
  begin
    
F.Mode := fmOutput;
    F.InOutFunc := @OutputSock;
    F.FlushFunc := @OutputSock;
  end;
  F.CloseFunc := @CloseSock;
  Result := 0;
end;

procedure AssignCrtSock(Socket:integer; Var Input,Output:TextFile);
 begin
  with 
TTextRec(Input) do
  begin
    
Handle := Socket;
    Mode := fmClosed;
    BufSize := SizeOf(Buffer);
    BufPtr := @Buffer;
    OpenFunc := @OpenSock;
  end;
  with TTextRec(Output) do
  begin
    
Handle := Socket;
    Mode := fmClosed;
    BufSize := SizeOf(Buffer);
    BufPtr := @Buffer;
    OpenFunc := @OpenSock;
  end;
  Reset(Input);
  Rewrite(Output);
 end;

function ConnectServer(mhost: string; mport: Integer): Integer;
var
  
tmp: string;
begin
  
mClient := TTcpClient.Create(nil);
  mClient.RemoteHost := mhost;
  mClient.RemotePort := IntToStr(mport);
  mClient.Connect;
  mconnhandle := callserver(mhost, mport);
  if (mconnHandle<>-1) then
  begin
    
AssignCrtSock(mconnHandle, mFin, MFout);
    tmp := stat;
    tmp := SendCommand(''''HELO bellona.com.tr'''');
    if Copy(tmp, 1, 3) = ''''250'''' then
    begin
      
Result := StrToInt(Copy(tmp, 1, 3));
    end;
  end;
end;

function ConnectServerWin(mhost: string; mport: Integer): Integer;
var
  
tmp: string;
begin
  
mClient := TTcpClient.Create(nil);
  mClient.RemoteHost := mhost;
  mClient.RemotePort := IntToStr(mport);
  mClient.Connect;
  mconnhandle := callserver(mhost, mport);
  if (mconnHandle<>-1) then
  begin
    
AssignCrtSock(mconnHandle, mFin, MFout);
    tmp := stat;
    tmp := SendCommandWin(''''HELO bellona.com.tr'''');
    if Copy(tmp, 1, 3) = ''''250'''' then
    begin
      
Result := StrToInt(Copy(tmp, 1, 3));
    end;
  end;
end;

function DisConnectServer: Integer;
begin
  
closesocket(mconnhandle);
  mClient.Disconnect;
  mclient.Free;
end;

function 

上一页  [1] [2] [3]  下一页

打印本文 打印本文 关闭窗口 关闭窗口