Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.04 c
14-1109613139
Petr V. Abramov
2005-02-28 20:52
2005.03.20
Ну хоть одной внешней угрозой стало меньше....


3-1108713713
AlexandrKu
2005-02-18 11:01
2005.03.20
Как в хранимой процедуре посчитать среднехронологические значения


3-1108438042
папик
2005-02-15 06:27
2005.03.20
Лог SQL запросов к MS SQL


3-1108547759
samalex
2005-02-16 12:55
2005.03.20
Сообщение об изменениях в БД


14-1109285890
Vasya.ru
2005-02-25 01:58
2005.03.20
Пятничные задачки или типа того





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский