Главная страница
    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.046 c
1-1110167611
X-Disa
2005-03-07 06:53
2005.03.20
Компонент для выбора цвета


3-1108972304
BeginerEmpty
2005-02-21 10:51
2005.03.20
ID записи при добавлении в базу при использовании IBX


3-1108716191
msguns
2005-02-18 11:43
2005.03.20
Дата в IB


14-1109653830
begin...end
2005-03-01 08:10
2005.03.20
С Днём рождения! 1 марта


6-1104720471
Lord of fear
2005-01-03 05:47
2005.03.20
Отправка файла на сервер с помощью WinApi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский