![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отправка файла на сервер с помощью WinApi [D6, D7]
Lord of fear © (2005-01-03 05:47:00)мне нужно отправить файл на мыло , но нужно использовать только
WinApi.Подскажите...
Fktrc (2005-01-14 23:39:00) [1]Посылка писем с вложением. Звиняй, что на си, но примера на дельфи просто не нашел. Но это перевести на дельфи будет несложно. Дерзай.
#include //обьявления
#include
#include
#include
WSADATA W;//переменные
SOCKET Sock;
struct sockaddr_in Saddr;
int res,err;
unsigned long mask=127;
char text[1024];
HANDLE FileData;
DWORD nReadBytes;
const char base64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
long base64encode(const char* FileName, char* buffer,unsigned int length) //это я уже описывал ранее
{
unsigned char ReadData[57];
unsigned char ResData[76];
unsigned long p=0;
unsigned long len=0;
unsigned long SourceLen=0;
unsigned long CurResBufferPos=0;
unsigned int j;
unsigned char tmpchar;
FileData=CreateFile(FileName,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
if(FileData==INVALID_HANDLE_VALUE) return 0;
do
{
memset(ReadData,0,57);
ReadFile(FileData,ReadData,57,&nReadBytes,NULL);
if (nReadBytes==0)
{
CloseHandle(FileData);
return len;
}
j=0;
SourceLen+=nReadBytes;
for(unsigned int i=0;i=6;
}
ResData[j]=p;
j+=4;
}
len+=j+1;
if(lenh_addr);//берем
res=connect(Sock,(sockaddr*)&Saddr,sizeof(Saddr));//коннектимся
if (res!=0) return false; //далее общение все по протоколу smtp
printf("connected..\n");
res=recv(Sock,text,1024,0);
strcpy(text,"HELO smtp.mail.ru\r\n");
res=send(Sock,text,strlen(text),0);
res=recv(Sock,text,1024,0);
printf(" %s\n",text);
strcpy(text,"MAIL FROM:hacker@mail.ru \r\n");
res=send(Sock,text,strlen(text),0);
sprintf(text,"RCPT TO:%s \r\n",rcpt);
res=send(Sock,text,strlen(text),0);
res=recv(Sock,text,1024,0);
printf(" %s\n",text);
strcpy(text,"DATA\r\n");
res=send(Sock,text,strlen(text),0);
strcpy(text,"FROM: hacker@mail.ru\r\n");
res=send(Sock,text,strlen(text),0);
strcpy(text,"TO:\r\n");
res=send(Sock,text,strlen(text),0);
strcpy(text,"MESSAGE_ID:zzz \r\nSUBJECT:HI\r\n");
res=send(Sock,text,strlen(text),0);
send(Sock,"MIME-Version: 1.0\r\n",19,0);
strcpy(text,"Content-Type: multipart/mixed; boundary=\"--------bound--\"\r\n");
send(Sock,text,strlen(text),0);
send(Sock,"\r\n",2,0);
send(Sock,"----------bound--\r\n",19,0);
strcpy(text,"Content-Type: text/plain; charset=us-ascii\r\nContent-Transfer-Encoding: 7bit\r\n");
send(Sock,text,strlen(text),0);
send(Sock,"\r\n",2,0);
sprintf(text,"message_here");
res=send(Sock,text,strlen(text),0);
send(Sock,"----------bound--\r\n",19,0);
strcpy(text,"Content-Type: application/x-msdownload; name=\"file.exe\"\r\nContent-Transfer-Encoding: base64\r\nContent-Disposition: attachment; filename=\"file.exe\"\r\n");
res=send(Sock,text,strlen(text),0);
send(Sock,"\r\n",2,0);
if(size=base64encode("my_exe.exe",CodedData,150000))
{
send(Sock,CodedData,size,0);
}
else send(Sock,"FAILED",6,0);
send(Sock,"\r\n",2,0);
send(Sock,"----------bound--\r\n",19,0);
strcpy(text,"\r\n.\r\n");
res=send(Sock,text,strlen(text),0);
strcpy(text,"QUIT\r\n");
res=send(Sock,text,strlen(text),0);
res=recv(Sock,text,1024,0);
printf(" %s\n done..",text);
closesocket(Sock);//закрываем сокет
return 0;//все !!!!
}
kaZaNoVa (2005-01-03 11:24:00) [2]сокеты юзай, но лучше НЕ на мыло а на сайт