Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отправка почты без компонентов, Как????? 
:(
    Опции темы
Matematik
Дата 18.10.2006, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



Код дурацкий но зато работает

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, winsock;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function EncodeBase64(Value:string):string;
const Lkp64='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
var c:byte; n:integer; Count:integer; DOut:array[0..3] of Byte;
begin
  Result:=EmptyStr;
  Count:=1;
  while Count<=Length(Value) do
  begin
    c:=Ord(Value[Count]);
    Inc(Count);
    DOut[0]:=(c and $FC) shr 2;
    DOut[1]:=(c and $03) shl 4;
    if Count<=Length(Value) then
    begin
      c:=Ord(Value[Count]);
      Inc(Count);
      DOut[1]:=DOut[1]+(c and $F0) shr 4;
      DOut[2]:=(c and $0F) shl 2;
      if Count<=Length(Value) then
      begin
        c:=Ord(Value[Count]);
        Inc(Count);
        DOut[2]:=DOut[2]+(c and $C0) shr 6;
        DOut[3]:=(c and $3F);
      end
        else
      begin
        DOut[3]:=$40;
      end;
    end
      else
    begin
      DOut[2]:=$40;
      DOut[3]:=$40;
    end;
    for n:=0 to 3 do
      Result:=Result+Lkp64[DOut[n]+1];
  end;
end;

function SendMail(SmtpServer:string;
                  SmtpPort:integer;
                  IsAuth: boolean;
                  Login: string;
                  Password: string;
                  FromAddr: string;
                  ToAddr: string;
                  MessageText: string;
                  MemoLog: TMemo):boolean;

  {Определение IP-адреса по доменному имени }
  function LookupName(name:String): TInAddr;
  var
    HostEnt: PHostEnt;
    InAddr: TInAddr;
  begin
    if name[4]='.' then
      InAddr.s_addr := inet_addr(PChar(name))
    else
    begin
      HostEnt := gethostbyname(PChar(name));
      FillChar(InAddr, SizeOf(InAddr), 0);
      if HostEnt <> nil then
      begin
        with InAddr, HostEnt^ do
        begin
          S_un_b.s_b1 := h_addr^[0];
          S_un_b.s_b2 := h_addr^[1];
          S_un_b.s_b3 := h_addr^[2];
          S_un_b.s_b4 := h_addr^[3];
        end;
      end
    end;
    Result := InAddr;
  end;

  {Печать в лог}
  procedure mmLogPrint(LogStr: string);
  begin
    MemoLog.Lines.Add(LogStr);
  end;

  {Чтение текста из сокета}
  function RecvText(S: TSocket): string;
  const
    MAX_BUFF_SIZE = 1024;
  var
    Recvbuff: array[0..MAX_BUFF_SIZE-1] of char;
    iRecv: integer;
    TempStr: string;
  begin
    Result := '';
    ZeroMemory(@Recvbuff, sizeof(RecvBuff));
    iRecv := recv(S, RecvBuff, MAX_BUFF_SIZE, 0);
    if (iRecv = 0) then
      exit
    else
      if (iRecv = Socket_Error) then
      begin
        mmLogPrint('Ошибка получения данных с сервера');
        exit;
      end
      else
      begin
        TempStr := RecvBuff;
        Result := Copy(TempStr, 1, Pos(#13, TempStr));
      end;
    If not (Result='') then
      mmLogPrint('RECV ' + Result)
    else
      mmLogPrint('Ничего не воcстановлено');
  end;

  {Запись текста в сокет или посылка текста серверу}
  function SendText(S: TSocket; Text: String): boolean;
  const
    MAX_SEND_SIZE = 1024;
  var
    SendBuff: array[0..MAX_SEND_SIZE] of char;
    iSend: integer;
    SendStr: string;
  begin
    Result := false;
    SendStr := Text + #13#10;
    If Length(SendStr)>MAX_SEND_SIZE then
    begin
      mmLogPrint('Слишком большая строка для отправки');
      exit;
    end;
    CopyMemory(@SendBuff, PChar(SendStr), Length(SendStr));
    iSend := send(S, SendBuff, Length(SendStr), 0);
    if (iSend = SOCKET_ERROR) then
    begin
      mmLogPrint('Ошибка передачи данных');
      exit;
    end;
    mmLogPrint('SEND ' + Text);
    Result := true;
  end;

var
  WData: WSADATA;
  sMailSocket, sPOP3Socket: TSocket;
  saServerMail: SockAddr_In;
  RecvMailText, SendMailText: string;
begin
  Result := false;
  if WSAStartup(MAKEWORD(1,1), WData) <> 0 then
    begin
   mmLogPrint('Ошибка при загрузке WinSock');
   exit;
    end;
  mmLogPrint('WinSock загружен');
  sMailSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
  if sMailSocket = INVALID_SOCKET then
  begin
    mmLogPrint('Ошибка создания сокета');
    exit;
  end;
  mmLogPrint('Сокет создан');
  saServerMail.sin_addr.s_addr := htonl(INADDR_ANY);
  saServerMail.sin_family := AF_INET;
  saServerMail.sin_port := htons(SmtpPort);
  saServerMail.sin_addr := LookupName(SmtpServer);
  if (connect(sMailSocket, saServerMail, sizeof(saServerMail)) = SOCKET_ERROR) then
  begin
   mmLogPrint('Ошибка соединения с сервером');
   exit;
  end;
  mmLogPrint('Соединение с сервером SMTP удачно');
  RecvMailText := RecvText(sMailSocket);
  If Pos('220', RecvMailText)=0 then
  begin
    CloseSocket(sMailSocket);
    exit;
  end;
  mmLogPrint('Приветствие получено');
  SendMailText := 'HELO vingrad.ru';
  If not SendText(sMailSocket, SendMailText) then
  begin
    CloseSocket(sMailSocket);
    exit;
  end;
  RecvMailText := RecvText(sMailSocket);
  If Pos('250', RecvMailText)=0 then
  begin
    CloseSocket(sMailSocket);
    exit;
  end;
  If IsAuth then
  begin
    mmLogPrint('Авторизация...');
    SendMailText := 'AUTH LOGIN';
    If not SendText(sMailSocket, SendMailText) then
    begin
      CloseSocket(sMailSocket);
      exit;
    end;
    RecvMailText := RecvText(sMailSocket);
    If Pos('334', RecvMailText)=0 then
    begin
      CloseSocket(sMailSocket);
      exit;
    end;

    SendMailText := EncodeBase64(Login);
    If not SendText(sMailSocket, SendMailText) then
    begin
      CloseSocket(sMailSocket);
      exit;
    end;
    RecvMailText := RecvText(sMailSocket);
    If Pos('334', RecvMailText)=0 then
    begin
      CloseSocket(sMailSocket);
      exit;
    end;

    SendMailText := EncodeBase64(Password);
    If not SendText(sMailSocket, SendMailText) then
    begin
      CloseSocket(sMailSocket);
      exit;
    end;
    RecvMailText := RecvText(sMailSocket);
    If Pos('235', RecvMailText)=0 then
    begin
      CloseSocket(sMailSocket);
      exit;
    end;
  end;
  SendMailText := 'MAIL FROM:' + FromAddr;
  If not SendText(sMailSocket, SendMailText) then
  begin
    CloseSocket(sMailSocket);
    If IsAuth then
      CloseSocket(sPOP3Socket);
    exit;
  end;
  RecvMailText := RecvText(sMailSocket);
  If Pos('250', RecvMailText)=0 then
  begin
    CloseSocket(sMailSocket);
    If IsAuth then
      CloseSocket(sPOP3Socket);
    exit;
  end;
  SendMailText := 'RCPT TO:' + ToAddr;
  If not SendText(sMailSocket, SendMailText) then
  begin
    CloseSocket(sMailSocket);
    If IsAuth then
      CloseSocket(sPOP3Socket);
    exit;
  end;
  RecvMailText := RecvText(sMailSocket);
  If Pos('250', RecvMailText)=0 then
  begin
    CloseSocket(sMailSocket);
    If IsAuth then
      CloseSocket(sPOP3Socket);
    exit;
  end;
  SendMailText := 'DATA';
  If not SendText(sMailSocket, SendMailText) then
  begin
    CloseSocket(sMailSocket);
    If IsAuth then
      CloseSocket(sPOP3Socket);
    exit;
  end;
  RecvMailText := RecvText(sMailSocket);
  If Pos('354', RecvMailText)=0 then
  begin
    CloseSocket(sMailSocket);
    If IsAuth then
      CloseSocket(sPOP3Socket);
    exit;
  end;
  SendMailText := MessageText;
  If not SendText(sMailSocket, SendMailText) then
  begin
    CloseSocket(sMailSocket);
    If IsAuth then
      CloseSocket(sPOP3Socket);
    exit;
  end;
  SendMailText := #13#10 + '.';
  If not SendText(sMailSocket, SendMailText) then
  begin
    CloseSocket(sMailSocket);
    If IsAuth then
      CloseSocket(sPOP3Socket);
    exit;
  end;
  RecvMailText := RecvText(sMailSocket);
  If Pos('250', RecvMailText)=0 then
  begin
    CloseSocket(sMailSocket);
    If IsAuth then
      CloseSocket(sPOP3Socket);
    exit;
  end;
  SendMailText := 'QUIT';
  If not SendText(sMailSocket, SendMailText) then
  begin
    CloseSocket(sMailSocket);
    If IsAuth then
      CloseSocket(sPOP3Socket);
    exit;
  end;
  If Pos('221', RecvText(sMailSocket))=0 then
  begin
    CloseSocket(sMailSocket);
    If IsAuth then
      CloseSocket(sPOP3Socket);
    exit;
  end;
  mmLogPrint('Завершение работы с сервером');
  CloseSocket(sMailSocket);
  Result := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if SendMail('smtp.mail.ru',25,
              True,
              'login',
              'password',
              '[email protected]',
              '[email protected]',
              'сообщение',
              Memo1
             ) then
    ShowMessage('OK')
  else
  ShowMessage('False')
end;

end.

end.


PM MAIL WWW ICQ   Вверх
Dasha
Дата 19.10.2006, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 18.10.2006

Репутация: нет
Всего: нет



А по мне так самое оно! Спасибо  smile 

А почему дурацкий?
PM MAIL   Вверх
Matematik
Дата 19.10.2006, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



Цитата(Dasha @  19.10.2006,  02:15 Найти цитируемый пост)
А почему дурацкий? 

это просто мои тараканы.
вобщем нормально.
PM MAIL WWW ICQ   Вверх
Dmitry_177
Дата 27.10.2006, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



А почему мне приходят какие-то каракули(в Memo отображаю диалог с сервером)?

Код

function SMTPSendString(AMailSocket: TSocket; Str: String): Boolean;
var
  Buffer: Array[1..1024] Of Byte;
  Err: Integer;
Begin
  Result := false;
  ZeroMemory(@Buffer, SizeOf(Buffer));
  if Length(Str) > 1000 then Exit;
  for Err := 1 to Length(Str) do Buffer[Err] := Ord(Str[Err]);
  Buffer[Err] := 13;
  Buffer[Err+1] := 10;
  Err := Send(AMailSocket, Buffer, Err + 1, 0);
  if Err > 0 then Result := true;
End;

...

var
  WSAData: TWSAData;
  MailSock: TSocket;
  SMTPServer: TSockAddrIn;
  Buff: array[1..255] of Char;
begin
  WSAStartUp($0101, WSAData);
  MailSock := Socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
  if MailSock = INVALID_SOCKET then Exit;

  FillChar(SMTPServer, SizeOf(SMTPServer), 0);
  SMTPServer.sin_family := AF_INET;
  SMTPServer.sin_port := htons(25);
  SMTPServer.sin_addr.S_addr := inet_addr(PChar('smtp.mail.ru'));

  Connect(MailSock, SMTPServer, SizeOf(SMTPServer));

  SMTPSendString(MailSock, 'HELO mail.ru' + #13#10);
  Memo1.Lines.Add('Send: HELO mail.ru');
  recv(MailSock, Buff, SizeOf(Buff), 0);
  Memo1.Lines.Add('Recv: ' + Buff);


В Memo:
Код

Send: HELO mail.ru
Recv: Ш–|˜


функция recv почему-то равна -1
PM MAIL   Вверх
Matematik
Дата 27.10.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



Цитата(Dmitry_177 @  27.10.2006,  13:28 Найти цитируемый пост)
А почему мне приходят какие-то каракули(в Memo отображаю диалог с сервером)?

анализируй что возвращает recv
Цитата(Dmitry_177 @  27.10.2006,  13:28 Найти цитируемый пост)
функция recv почему-то равна -1 

Попробуй справку почитать.

SMTPSendString- изврат 
Код

function SMTPSendString(AMailSocket: TSocket; Str: String): Boolean;
var Err:Integer;
Begin
  Str := Str + #13#10;
  Err := Send(AMailSocket, Str[1], Length(str), 0);
  if Err > 0 then Result := true;
End;
{...}
SMTPSendString(MailSock, 'HELO mail.ru'{НЕ НАДО + #13#10});



Это сообщение отредактировал(а) Matematik - 27.10.2006, 12:50
PM MAIL WWW ICQ   Вверх
Dmitry_177
Дата 27.10.2006, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Спасибо за код функции SMTPSendString, вы очень добры..

Пробовал читать справку... Не пойму никак почему каракули какие-то приходят... Должно же быть число и через пробел текст...
PM MAIL   Вверх
Dmitry_177
Дата 27.10.2006, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Пробовал эту функцию
Код

function SMTPRecvString(AMailSock: TSocket): string;
const
  MAX_BUFF_SIZE = 1024;
var
  RecvBuff: array[0..MAX_BUFF_SIZE - 1] of Char;
  iRecv: integer;
  TempStr: string;
begin
  Result := '';
  ZeroMemory(@RecvBuff, SizeOf(RecvBuff));
  iRecv := recv(AMailSock, RecvBuff, MAX_BUFF_SIZE, 0);
  if (iRecv = 0) then
    Exit
  else
    if iRecv = SOCKET_ERROR then
      Exit
    else
      begin
        TempStr := RecvBuff;
        Result := Copy(TempStr, 1, Pos(#13, TempStr));
      end;
end;


так вообще ничего не приходит...
PM MAIL   Вверх
Matematik
Дата 27.10.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



Цитата(Dmitry_177 @  27.10.2006,  14:17 Найти цитируемый пост)
так вообще ничего не приходит... 

Что не проходит?
Отладчиком пробывал проходить код?
PM MAIL WWW ICQ   Вверх
Dmitry_177
Дата 27.10.2006, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



с сервера не приходило ничего... я переделал немного, и так вроде заработало

было так:
Код

var
  SMTPServer: TSockAddrIn;
begin
...
  SMTPServer.sin_family := AF_INET;
  SMTPServer.sin_port := htons(25);
  SMTPServer.sin_addr.S_addr := inet_addr(PChar('smtp.mail.ru'));


а переделал так:
Код

function LookupName(name:String): TInAddr;
var
  HostEnt: PHostEnt;
  InAddr: TInAddr;
begin
  if name[4]='.' then
    InAddr.s_addr := inet_addr(PChar(name))
  else
    begin
      HostEnt := gethostbyname(PChar(name));
      FillChar(InAddr, SizeOf(InAddr), 0);
      if HostEnt <> nil then
        begin
          with InAddr, HostEnt^ do
            begin
              S_un_b.s_b1 := h_addr^[0];
              S_un_b.s_b2 := h_addr^[1];
              S_un_b.s_b3 := h_addr^[2];
              S_un_b.s_b4 := h_addr^[3];
            end;
        end
    end;
  Result := InAddr;
end;

...
  SMTPServer.sin_addr.S_addr := htonl(INADDR_ANY);
  SMTPServer.sin_family := AF_INET;
  SMTPServer.sin_port := htons(25);
  SMTPServer.sin_addr := LookupName('smtp.mail.ru');

PM MAIL   Вверх
Dmitry_177
Дата 27.10.2006, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



А как можно "подождать" ответ от сервера? Тут везде в примерах после отправки Send идет сразу прием Recv, а вдруг сервер не успеет отправить информацию? Мне кажется тогда зависнет программа в ожидании ответа от сервера... как можно с этим справиться?
PM MAIL   Вверх
drkot
Дата 27.10.2006, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 0
Всего: 8



Цитата(Dmitry_177 @  27.10.2006,  17:57 Найти цитируемый пост)
Recv,

как раз и ждет ответа


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Matematik
Дата 27.10.2006, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



Читай данные из сокета в цикле в глобальный буфер пока не встретишь управляющие символы
PM MAIL WWW ICQ   Вверх
Dmitry_177
Дата 27.10.2006, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Я разобрался в чем у меня была проблема... Я после посылки серверу "DATA", начала письма, слал "From", "To", "Sabject", так вот я после посылки каждого сообщения всегда делал recv, оказывается ненадо этого делать, т.к. сервер ждет конца письма (#13#10+'.'+#13#10). Все работает ))) Всем спасибо за помощь... Если не трудно, подскажите пожалуйста как к письму прицепить аттачмент? Как прикрепить файл к письму который лежит в c:\file.txt пробовал что-то вроде этого но так не работает, я наверно что-то не так делаю... Подскажите пожалуйста, в интернете искал информацию по этому поводу но там очень мало ее и ничего не понятно... Много примеров с использованием MAPI но это не то...

Код

SMTPSendString('Content-Type: application/octet-stream; name="c:\file.txt"');
SMTPSendString('Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding:   8bit');
SMTPSendString('Content-Disposition: attachment; filename="c:\file.txt"');

PM MAIL   Вверх
Dmitry_177
Дата 28.10.2006, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Читал я... но как послать файл не пойму никак, толи в Base64 надо слать толи еще как, не понятно, если в Base64 то как в него файл перевести и отправить? Правильно ли я задаю параметр boundary? Шлю письмо я так:
Код

function SMTPSendString(AMailSocket: TSocket; Str: String): Boolean;
var
 Err: integer;
begin
 Str := Str + #13#10;
 Err := Send(AMailSocket, Str[1], Length(str), 0);
 if Err > 0 then Result := true;
end;

...

SMTPSendString(MailSock, 'MIME-Version: 1.0');
SMTPSendString(MailSock, 'Content-Type: multipart/mixed; boundary=MyBoundary');  // какой должен быть параметр "boundary"? Правильно ли я его задал?
SMTPSendString(MailSock, '--MyBoundary');  // Надо ли слать эту строку?
SMTPSendString(MailSock, 'Content-Type: text/plain; charset=Windows-1251');

SMTPSendString(MailSock, 'Test E-Mail ' + DateTimeToStr(Now));

SMTPSendString(MailSock, '--MyBoundary');  // Надо ли слать эту строку?
SMTPSendString(MailSock, 'Content-Type: application/octet-stream; name="1.txt"');
SMTPSendString(MailSock, 'Content-Disposition: attachment; filename="1.txt"');

// Как послать файл???

SMTPSendString(MailSock, '--MyBoundary--');  // Надо ли слать эту строку?

PM MAIL   Вверх
Dmitry_177
Дата 30.10.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Подскажите пожалуйста что не так? Файл присылается, но занимает 0 байт. Помогите...
Код

var
hFile: THandle;
Str: String;
BytesRead: DWord;
...

hFile := CreateFile('c:\1.txt', GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
ReadFile(hFile, Str[1], 54, BytesRead, nil);
CloseHandle(hFile);
SMTPSendString(MailSock, EncodeBase64(Str));


Добавлено @ 13:51 
и так пробовал, тоже самое...

ReadFile(hFile, Str[1], GetFileSize(hFile, nil), BytesRead, nil);
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0598 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.