Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Коннект через proxy используя сокеты

2.2K
21 марта 2004 года
csr
22 / / 22.06.2003
Собственно сабж. Не могу нормально разобраться как законнектиться к хосту через прокси для обмена инф-цией. В indy - можно используя iohandlersocket в TidTCPClient, но мне нужно это сделать юзая TClientSocket или лучше низкоур. сокеты. Желательно привести пример.
Пожалуйста, подскажите если можете. Очень важно! Вот код ф-ции отыслки письма. Что тут надо добавить, чтоб коннект к смтп серверу проходил через прокси (сокс напр) сервер! Благодарен заранее.

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;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог