Главная страница
    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.047 c
1-1110099467
Checist [root]
2005-03-06 11:57
2005.03.20
Maximized form


3-1108978313
juice
2005-02-21 12:31
2005.03.20
Типа вычисляемое поле


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


4-1108026880
Mac
2005-02-10 12:14
2005.03.20
Есть хендл окна. Как с этого окна (грида) скопировать даные ?


1-1109698082
Shnabs
2005-03-01 20:28
2005.03.20
Компонент типа TComboBox





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