Коннект через proxy используя сокеты
Пожалуйста, подскажите если можете. Очень важно! Вот код ф-ции отыслки письма. Что тут надо добавить, чтоб коннект к смтп серверу проходил через прокси (сокс напр) сервер! Благодарен заранее.
function SendMailEx(mail, from, dnshost: string;
dnstimeout: integer;
headers, body: string): boolean;
const EL = #13#10;
SMTPCMD : array [0..5] of string =
('HELO %s'+EL,
'MAIL FROM: %s'+EL,
'RCPT TO: %s'+EL,
'DATA'+EL,
'.'+EL,
'QUIT'+EL);
var wsadata : TWSAData;
sin : TSockAddrIn;
sock : TSocket;
iaddr: integer;
buf: array[0..255] of char;
mailhost, fromhost, mailserv: string;
procedure SendCmd(cmd:string);
var i:integer;
begin
for i:=1 to length(cmd) do
send(sock, cmd, 1, 0);
end;
begin
mailhost := copy(mail, pos('@', mail)+1, length(mail));
fromhost := copy(from, pos('@', from)+1, length(from));
mailserv := 'mymailserver.host.com';
WSAStartUp(MAKEWORD(2,0), wsadata);
try
sock:= socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
sin.sin_family := AF_INET;
sin.sin_port := htons(25);
sin.sin_addr.S_addr := ResolveHost(mailserv);
if connect(sock, sin, sizeof(sin)) < 0 then
exit;
recv(sock, buf, sizeof(buf), 0);
// HELO
SendCmd(Format(SMTPCMD[0], [fromhost]));
recv(sock, buf, sizeof(buf), 0);
// MAIL TO
SendCmd(Format(SMTPCMD[1], [mail]));
recv(sock, buf, sizeof(buf), 0);
.... CUT ....
И так далее идут команды СМТП
.... CUT ....
// QUIT
SendCmd(SMTPCMD[5]);
recv(sock, buf, sizeof(buf), 0);
finally
CloseSocket(sock);
WSACleanUp;
end;
end;