Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2011, 17:05   #1
legendary
Форумчанин
 
Аватар для legendary
 
Регистрация: 21.04.2010
Сообщений: 125
По умолчанию Ошибка подключения к smtp

Код:
function mail(smtp: string; port: integer; from, dest, subject,
  body: string): bool;
const
  cl = #13#10;
var
WSAData: TWSAData;
  Host: TSockAddrIn;
  Sock: TSocket;
  res: Integer;
  buff: array[1..255] of Char;

procedure senddata(str: string);
var  i: integer;
begin
  for i := 1 to Length(str) do
    if send(Sock, str[i], 1, 0) = SOCKET_ERROR then
      begin
        showmessage('SOCKET_ERROR');
        exit;
      end;
end;

function recvdata(accept: string): bool;
var  buff: array[1..255] of Char;
begin
  res := recv(Sock, buff, SizeOf(buff), 0);
  Result := (Res = SOCKET_ERROR) or (Copy(buff, 1, 3) = accept);
end;

begin
  try
    result := false;
    WSAStartUp(257, WSAData);
    Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    if Sock = INVALID_SOCKET then
      begin
        showmessage('INVALID_SOCKET');
        Exit;
      end;

    res := inet_addr(PChar(smtp));
    if res <= 0 then
      begin
        showmessage('error smtp');
        exit;
      end;

    Host.sin_family := AF_INET;
    Host.sin_port := htons(port);
    Host.sin_addr.S_addr := res;

    if connect(Sock, Host, SizeOf(Host)) > 0 then
      begin
        showmessage('INVALID_CONNECT');
        Exit;
      end;

    if not recvdata('220') then
      begin
        showmessage('NOT 220');
        Exit;
      end;

    { EHLO }
    senddata('EHLO' + cl);
    if not recvdata('250') then
      begin
        showmessage('NOT 250(ehlo)');
        Exit;
      end;

    { MAIL FROM: }
    senddata('MAIL FROM:' + from + cl);
    if not recvdata('250') then
      begin
        showmessage('NOT 250(mail from)');
        Exit;
      end;

    { RCPT TO: }
    senddata('RCPT TO:' + dest + cl);
    if not recvdata('250') then
      begin
        showmessage('NOT 250(rcpt to)');
        Exit;
      end;

    { DATA }
    senddata('DATA' + cl);
    if not recvdata('354') then
      begin
        showmessage('NOT 354)');
        Exit;
      end;

    senddata('Subject:' + subject + cl + cl + body + cl + '.');
    if not recvdata('250') then
      begin
        showmessage('NOT 250(sub)');
        Exit;
      end;

    senddata('QUIT' + cl);

    result := true;
  finally
    closesocket(sock);
    WSACleanup;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if mail('mail.ru',25,'shit_bug@mail.ru','shit_bug@mail.ru','re','text of mail')
then showmessage('ok') else showmessage('fuck');
end;
Почему потоянно 'error smtp'? Код не мой. Менял WSAStartUp(257, WSAData) на WSAStartup(makeword(1,1), WSAData) - не помогло.
legendary вне форума Ответить с цитированием
Старый 01.02.2011, 17:57   #2
legendary
Форумчанин
 
Аватар для legendary
 
Регистрация: 21.04.2010
Сообщений: 125
По умолчанию

сам разабрался. тема офф.
legendary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка..наверно подключения Domanoff БД в Delphi 32 18.04.2010 17:26
Ошибка На Indy SMTP в Delphi 2007 combays Помощь студентам 1 22.03.2009 03:08
Ошибка в драйверах после подключения к TV Saladin Операционные системы общие вопросы 3 21.02.2009 21:28
Ошибка после подключения в инет V.N.Ermak Безопасность, Шифрование 3 27.12.2008 19:29
Ошибка подключения к БД CruiserD БД в Delphi 5 26.10.2007 14:42