Форум: "Сети";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
ВнизОтправка файла на сервер с помощью WinApi Найти похожие ветки
← →
Lord of fear (2005-01-03 05:47) [0]мне нужно отправить файл на мыло , но нужно использовать только
WinApi.Подскажите...
← →
kaZaNoVa © (2005-01-03 11:24) [1]сокеты юзай, но лучше НЕ на мыло а на сайт
← →
Fktrc © (2005-01-14 23:39) [2]Посылка писем с вложением. Звиняй, что на си, но примера на дельфи просто не нашел. Но это перевести на дельфи будет несложно. Дерзай.
#include <winsock2.h> //обьявления
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
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<nReadBytes;i+=3)
{
p=ReadData[i+2]+ReadData[i+1]*256+ReadData[i]*65536;
for(unsigned char i1=0;i1<3;i1++)
{
tmpchar=p;
tmpchar<<=2;
tmpchar>>=2;//
ResData[j+3-i1]=tmpchar;
p>>=6;
}
ResData[j]=p;
j+=4;
}
len+=j+1;
if(len<=length)//если есть место в буффере
{
for(unsigned char i1=0;i1<j;i1++)
{
buffer[CurResBufferPos+i1]=base64[ResData[i1]];
}
buffer[CurResBufferPos+j]="\n";
CurResBufferPos+=j+1;
}
else return 0;
}
while(nReadBytes==57);
char pad=(3-SourceLen%3)%3;
while(pad>0)
{
buffer[CurResBufferPos-1-pad]="=";
pad--;
}
CloseHandle(FileData);
return len;
}
//для отправки писем надо знать протокол smtp для вложений используется кодировка UUE //(MIME) или base64 для изучения изложенного ниже достаточно в аутлуке сохранить письмо //в формате *.eml и открыть блокнотом...
int main() //здесь интереснее
{
char rcpt[50];
char smtp[50];
GetPrivateProfileString("Profile","to","loozer@mail.ru",rcpt,50,"mailer.ini");//берем из ini фаила
GetPrivateProfileString("Profile","smtp","smtp.mail.ru",smtp,50,"mailer.ini"); //кому и smtp сервер
printf("sending mail to %s , server: %s \n",rcpt,smtp);
long size;
char CodedData[150000];
size=base64encode("filename.exe",CodedData,150000); перекодируем фаил
err = WSAStartup( 0x101, &W );
if(err!=0) exit(1);
Sock=socket(AF_INET,SOCK_STREAM,0);//создаем сокет
Saddr.sin_family=AF_INET;
Saddr.sin_port=htons(25);//порт 25 - smtp
hostent *H=gethostbyname(smtp);//айпи сервера по имени
Saddr.sin_addr.s_addr=*((unsigned long *) H->h_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;//все !!!!
}
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.047 c