Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Отправка e-mail на WinSock API c аттачем [Delphi] |

02.03.2008, 19:37
|
|
Познающий
Регистрация: 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..
|
|
|

02.03.2008, 22:03
|
|
Познающий
Регистрация: 01.03.2008
Сообщений: 68
Провел на форуме: 140772
Репутация:
72
|
|
Вот тема созданная мной на др. форуме по этому же вопросу:
хакер
Даю ссылку на форум хакера, т.к. немогу на этом форуме составить нормально пост причина описана мной выше.
|
|
|

03.03.2008, 23:35
|
|
Познающий
Регистрация: 01.03.2008
Сообщений: 68
Провел на форуме: 140772
Репутация:
72
|
|
неужели никто незнает в чем причина?, видать я ошибся форумом, нема тут кулц кодеров.
Или просто никто нехочет помогать? 
|
|
|

04.03.2008, 00:08
|
|
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
|
|
|

04.03.2008, 00:22
|
|
Познающий
Регистрация: 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
код?
|
|
|

04.03.2008, 20:51
|
|
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
|
|
|

04.03.2008, 23:05
|
|
Познающий
Регистрация: 05.06.2007
Сообщений: 50
Провел на форуме: 151281
Репутация:
259
|
|
Код корявый, но рабочий.. Видимо у тебя инет дохлый..
|
|
|

05.03.2008, 15:02
|
|
Познающий
Регистрация: 01.03.2008
Сообщений: 68
Провел на форуме: 140772
Репутация:
72
|
|
Сообщение от execom
Код корявый, но рабочий.. Видимо у тебя инет дохлый..
Так дело в том, что если отправлять без файла, то оно доходит нормально, а вот если прикрепляеш файл, то все труба, недоходит.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|