Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отправка файла на сервер с помощью 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]

сокеты юзай, но лучше НЕ на мыло а на сайт


Наверх

Титульная страница Поиск, карта сайта Написать письмо