ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Отправка e-mail на WinSock API c аттачем [Delphi]
  #1  
Старый 02.03.2008, 19:37
Аватар для Dr.KoD
Dr.KoD
Познающий
Регистрация: 01.03.2008
Сообщений: 68
Провел на форуме:
140772

Репутация: 72
По умолчанию Отправка e-mail на WinSock API c аттачем [Delphi]

Собсно вопрос, что не так, в каком месте ошибка...
Код:
program Project2;
uses
  Windows,
  WinSock,
  Dialogs,
  SysUtils;
const
  TimeOut = 10;
type
  TAByte = array [0..maxInt-1] of byte;
  TPAByte = ^TAByte;
  TARR = array of string;
const
  CtrlF = #13#10;
var
  WSA:TWSAData;
  MailSocket:TSocket;
  SMTPServer:TSockAddr;
  k,r:integer;
  mBody:TARR;
  s:string;
const
   b64 : array [0..63] of char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

function B64Encode(data:string) : string; overload;
var
  ic,len : integer;
  pi, po : TPAByte;
  c1 : dword;
begin
  len:=length(data);
  if len > 0 then
    begin
      SetLength(result, ((len + 2) div 3) * 4);
      pi := pointer(data);
      po := pointer(result);
      for ic := 1 to len div 3 do
        begin
          c1 := pi^[0] shl 16 + pi^[1] shl 8 + pi^[2];
          po^[0] := byte(b64[(c1 shr 18) and $3f]);
          po^[1] := byte(b64[(c1 shr 12) and $3f]);
          po^[2] := byte(b64[(c1 shr 6) and $3f]);
          po^[3] := byte(b64[(c1 ) and $3f]);
          inc(dword(po), 4);
          inc(dword(pi), 3);
        end;
      case len mod 3 of
        1:
          begin
            c1 := pi^[0] shl 16;
            po^[0] := byte(b64[(c1 shr 18) and $3f]);
            po^[1] := byte(b64[(c1 shr 12) and $3f]);
            po^[2] := byte('=');
            po^[3] := byte('=');
          end;
        2 :
          begin
            c1 := pi^[0] shl 16 + pi^[1] shl 8;
            po^[0] := byte(b64[(c1 shr 18) and $3f]);
            po^[1] := byte(b64[(c1 shr 12) and $3f]);
            po^[2] := byte(b64[(c1 shr 6) and $3f]);
            po^[3] := byte('=');
          end;
      end;
    end
  else
    result := '';
end;
function _Server(host: string): TInAddr;
var
  HostEnt: PHostEnt;
  InAddr: TInAddr;
begin
  HostEnt := gethostbyname(PChar(host));
  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;
  Result := InAddr;
end;

function SMTPRecvReply(MailSocket:TSocket):string;
var
  t: integer;
  Buffer:Array[0..255] of char;
begin
  ZeroMemory(@Buffer,256);
  t:=GetTickCount;
    repeat
    until
      (Recv(MailSocket,Buffer,SizeOf(Buffer),0)>0)or(GetTickCount - t >= TimeOut);
  result := buffer+CTRLF;
end;
procedure SMTPSendString(MailSocket:TSocket;Str:string);
var
  Buffer:Array[0..255] of char;
  s:Array[0..255] of string;
begin
  inc(k);
  StrPCopy(Buffer,Str);
  Send(MailSocket,Buffer,length(Str),0);
  s[k]:=SMTPRecvReply(MailSocket);
end;
procedure Base64Send(FileName: string);
var
 afile: File;
 i:     longint;
 quads: integer;
 b:     array[0..2279] of byte;
 j,k,l,m:integer;
 stream:string[76];
begin
 AssignFile(afile,filename);
 Reset(afile,1);
 SMTPSendString(mailsocket, '--========sdfgsagg======'+ CTRLF);
 SMTPSendString(mailsocket, 'Content-Type: application/octet-stream; name="'+ExtractFileName(FileName)+'"'+ CTRLF);
 SMTPSendString(mailsocket, 'Content-Transfer-Encoding: base64'+ CTRLF);
 SMTPSendString(mailsocket, 'Content-Disposition: attachment; filename="'+ExtractFileName(FileName)+'"'+ CTRLF);
 SMTPSendString(mailsocket, 'Content-Description: attachment'+ CTRLF);
 SMTPSendString(mailsocket, ''+ CTRLF);
 stream:='';
 quads:=0;
 j:=Filesize(afile) div 2280;
 for i:=1 to j do
  begin
   BlockRead(afile,b,2280);
   for m:=0 to 39 do
    begin
     for k:=0 to 18 do
      begin
       l:=57*m+3*k;
       stream[quads+1]:=b64[(b[l]div 4)+1];
       stream[quads+2]:=b64[(b[l] mod 4)*16 +(b[l+1] div 16)+1];
       stream[quads+3]:=b64[(b[l+1] mod 16)*4 +(b[l+2] div 64)+1];
       stream[quads+4]:=b64[b[l+2] mod 64+1];
       Inc(quads,4);

       if quads=76 then
        begin
         stream[0]:=#76;
         SMTPSendString(mailsocket, stream);
         quads:=0;
        end;
      end;
    end;
  end;

 j:=(Filesize(afile) mod 2280) div 3;

 for i:=1 to j do
  begin
   BlockRead(afile,b,3);
   stream[quads+1]:=b64[(b[0]div 4)+1];
   stream[quads+2]:=b64[(b[0] mod 4)*16 +(b[1] div 16)+1];
   stream[quads+3]:=b64[(b[1] mod 16)*4 +(b[2] div 64)+1];
   stream[quads+4]:=b64[b[2] mod 64+1];
   Inc(quads,4);

   if quads=76 then
    begin
     stream[0]:=#76;
     SMTPSendString(mailsocket, stream);
     quads:=0;
    end;
  end;

 if (Filesize(afile) mod 3) = 2 then
  begin
   BlockRead(afile,b,2);
   stream[quads+1]:=b64[(b[0]div 4)+1];
   stream[quads+2]:=b64[(b[0] mod 4)*16 +(b[1] div 16)+1];
   stream[quads+3]:=b64[(b[1] mod 16)*4 +1];
   stream[quads+4]:='=';
   Inc(quads,4);
  end;

 if (Filesize(afile) mod 3) = 1 then
  begin
   BlockRead(afile,b,1);
   stream[quads+1]:=b64[(b[0]div 4)+1];
   stream[quads+2]:=b64[(b[0] mod 4)*16 +1];
   stream[quads+3]:='=';
   stream[quads+4]:='=';
   Inc(quads,4);
  end;
 stream[0]:=Chr(quads);

 if quads>0 then
  SMTPSendString(mailsocket, stream);

 CloseFile(afile);
end;


function StrPCopy(Dest: PChar; const Source: string): PChar;
begin
  Result := StrLCopy(Dest, PChar(Source), Length(Source));
end;

function Mailik(smtp:string;port:integer;login:string;pass:string;from:string;dest:string;FileName: string):boolean;     
var
  i: integer;
begin
  WSAStartup(MAKEWORD(1,0),WSA);
  MailSocket:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP    );
  ZeroMemory(@SMTPServer,SizeOf(SMTPServer));
  SMTPServer.sin_family:=AF_INET;
  SMTPServer.sin_port:=htons(25);
  SMTPServer.sin_addr:=_Server(smtp);
  if Connect(MailSocket,SMTPServer,SizeOf(SMTPServer))=    0 then
    begin
      SMTPSendString(mailsocket,'EHLO server '+ CTRLF);
      SMTPSendString(mailsocket,'AUTH LOGIN ' + CTRLF + b64encode(login) + CTRLF + b64encode(pass) + CTRLF);
      SMTPSendString(mailsocket,'MAIL FROM:' + from + CTRLF + 'RCPT TO:' + dest + CTRLF);
      SMTPSendString(mailsocket,'DATA' + CTRLF);
      SMTPSendString(mailsocket, 'TESTING7777hello'+ CTRLF); 
      SMTPSendString(mailsocket, '----------dasdsadsui--------'+ CTRLF);
      Base64Send(FileName);
      SMTPSendString(mailsocket, '----------dasdsadsui--------'+ CTRLF);
      SMTPSendString(mailsocket,''+ CTRLF);

      SMTPSendString(mailsocket,'.'+CTRLF+'QUIT'+CTRLF);
 end;
  CloseSocket(MailSocket);
  WSACleanup;
end;
begin
 mailik('smtp.inbox.ru',25,'prog','xxxxxx','progr@inbox .ru','kod@xaker.ru','C:\WinLog.txt');    
end.

Последний раз редактировалось Jes; 02.03.2008 в 22:26..
 
Ответить с цитированием

  #2  
Старый 02.03.2008, 22:03
Аватар для Dr.KoD
Dr.KoD
Познающий
Регистрация: 01.03.2008
Сообщений: 68
Провел на форуме:
140772

Репутация: 72
По умолчанию

Вот тема созданная мной на др. форуме по этому же вопросу:
хакер

Даю ссылку на форум хакера, т.к. немогу на этом форуме составить нормально пост причина описана мной выше.
 
Ответить с цитированием

  #3  
Старый 03.03.2008, 23:35
Аватар для Dr.KoD
Dr.KoD
Познающий
Регистрация: 01.03.2008
Сообщений: 68
Провел на форуме:
140772

Репутация: 72
Angry

неужели никто незнает в чем причина?, видать я ошибся форумом, нема тут кулц кодеров.
Или просто никто нехочет помогать?
 
Ответить с цитированием

  #4  
Старый 04.03.2008, 00:08
Аватар для desTiny
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме:
3008839

Репутация: 1502


По умолчанию

совсем на тру WinAPI:

http://forum.sources.ru/index.php?showtopic=103983&hl=%CF%C8%D1%DC%CC%CE,a nd,%C0%D2%D2%C0%D7
__________________
Bedankt euch dafür bei euch selbst.

H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
 
Ответить с цитированием

  #5  
Старый 04.03.2008, 00:22
Аватар для Dr.KoD
Dr.KoD
Познающий
Регистрация: 01.03.2008
Сообщений: 68
Провел на форуме:
140772

Репутация: 72
По умолчанию

Цитата:
Сообщение от desTiny  
совсем на тру WinAPI:

http://forum.sources.ru/index.php?showtopic=103983&hl=%CF%C8%D1%DC%CC%CE,a nd,%C0%D2%D2%C0%D7
У меня вопрос анологичный ответу, вы вопрос читали?, и я вообще не просил дать мне исходник, я просил посмотреть, что не так в моем исходнике и при том он на делфи, а не на асемблере, только ненадо говорить про асемблерные вставки.
Мда интересно где в том исходнике находится WinAPI
код?
 
Ответить с цитированием

  #6  
Старый 04.03.2008, 20:51
Аватар для desTiny
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме:
3008839

Репутация: 1502


По умолчанию

Dr.KoD, пойми: никто никогда не имеет никакого желания разбираться в чужом коде, и никто, если его не заставляют обязанности, этого делать не будет. Это как преподаватель: какой ему смысл искать ошибку в решении ученика/студента, если он может рассказать проверенное много раз правильное решение?
Цитата:
Мда интересно где в том исходнике находится WinAPI код?
Ну вообще-то импорты из виндовских библиотек идут
__________________
Bedankt euch dafür bei euch selbst.

H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
 
Ответить с цитированием

  #7  
Старый 04.03.2008, 23:05
Аватар для execom
execom
Познающий
Регистрация: 05.06.2007
Сообщений: 50
Провел на форуме:
151281

Репутация: 259
Отправить сообщение для execom с помощью ICQ
По умолчанию

Код корявый, но рабочий.. Видимо у тебя инет дохлый..
 
Ответить с цитированием

  #8  
Старый 05.03.2008, 15:02
Аватар для Dr.KoD
Dr.KoD
Познающий
Регистрация: 01.03.2008
Сообщений: 68
Провел на форуме:
140772

Репутация: 72
По умолчанию

Цитата:
Сообщение от execom  
Код корявый, но рабочий.. Видимо у тебя инет дохлый..
Так дело в том, что если отправлять без файла, то оно доходит нормально, а вот если прикрепляеш файл, то все труба, недоходит.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ