Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   отправка писем (http://forum.oszone.net/showthread.php?t=59928)

XCodeR 23-01-2006 23:51 396401

отправка писем
 
как средствами winApi "или" С++ Builder отрпавить письмо по протоколу SMTP?...

XCodeR 23-01-2006 23:52 396402

забыл написать...
неообходимо отправлять в формате HTML...
+ в теле письма должны быть картинки...

lehha 24-01-2006 00:40 396423

Если кратко то:
1. Создешь сокет.
2. Коннектишся к SNTP серверу на 25 порт
Посылаешь ему последовательность команд
helo - приветствие
mail from: - адрес отправителя
rcpt to: - получатель адрес
data - после этого идет твое сообщение, кода зашлешь все что тебе надо отправляешь
.
quit - закрыть ссесию с SMTP сервером.
На счет HTML и картинок почитай протокол MIMIE

XCodeR 24-01-2006 09:31 396486

lehha
спасибо, но я бы от исходника не отказался..;)

и еще интересно, как использовать в теле пиьсма картинки???
<img src="что сюда писать??">

lehha 24-01-2006 10:16 396497

писал это для отправки логов по почте правдо очень давненько думаю разберешся, на счет картинок прочитай про расширение SMTP MIME, там все подробно написано

http://www.sources.ru/protocols/smtp...ng.shtml#model
http://dimas.ncn.ru/libz/lib_os/unix...s/glava2_5.htm

Код:

#include <winsock2.h>
#include <stdio.h>
#include "shlwapi.h"
#include "Windows.h"

#define MAX_PACKET_SIZE    0x10000
#define INI        "send.ini"
#define LOG        "log.txt"
#define        cool        0
#define bad                1

int i,n;
WSADATA wsadata;
SOCKET s;
HOSTENT* phe;
SOCKADDR_IN sa;
int x1=1024;
char Buffer[MAX_PACKET_SIZE];
CHAR filepath[MAX_PATH];
CHAR helo[] =  {"HELO\xD\xA\x0"};
CHAR from[] =  {"mail from: "};
CHAR rcpt[] =  {"rcpt to: "};
CHAR dat[] =    {"data\xD\xA\x0"};
CHAR end_dat[]= {"\xD\xA.\xD\xA"};
CHAR quit[] =  {"quit\xD\xA\x0"};
CHAR simbols[] = {"\xD\xA\x0"};
char lpReturnedString[500];
char mess[500];
CHAR body[1024];
char integer[5];

char* FReadINI(char* section,char* key);
int FReadData(char* data);
void FErr(char* msg);
int        FReadLog();
int        FSetConn();
int FSend (char* msg, SOCKET s);
int FSendBody (SOCKET s);
int FRecv (SOCKET s);


void FErr (char* msg)
{
        printf("error ",Buffer);       
}
int FReadData(char* data)
{
        if (StrStr(data,Buffer)==0)
        {
                printf(Buffer);
                return cool;
        }
        else
        {
                ExitProcess(0);
                return bad;
        }
}
char* FReadINI(char* section,char* key)
{
        LPTSTR part;
        GetFullPathName(INI,MAX_PATH,filepath,&part);
        GetPrivateProfileString(section,key,"No Data",lpReturnedString,499,filepath);
        if (lstrcmp(lpReturnedString,"No Data")!=NULL)
        {
                if (sizeof(lpReturnedString)<499)
                        ExitProcess (0);               
                return(lpReturnedString);
        }
        ExitProcess(0);
        return ("No data");
}
FSendBody (SOCKET s)
{
        LPTSTR part;
        FILE *file;
        GetFullPathName(FReadINI("MAIN","path"),MAX_PATH,filepath,&part);
        if ((file=fopen(filepath,"r"))!=NULL)
        {
                while (!feof(file))
                {
                        fgets(body,x1,file);                       
                        FSend(body,s);
                        FSend(simbols,s);
                        ZeroMemory(&body,sizeof(body));                       
                }
        }
        fclose(file);
        return cool;
}
FSend (char* msg, SOCKET s)
{
        if (send(s,msg,(int)lstrlen(msg),0)==SOCKET_ERROR)
        {
                ExitProcess(0);
                return bad;       
        }
        else
                return cool;       
}

int FRecv (SOCKET s)
{
        memset(&Buffer,0, sizeof(Buffer));       
        if (recv(s,Buffer,x1,0)!=SOCKET_ERROR)
                return cool;
        else
        {
                ExitProcess(0);
                return bad;
        }
}

void main(void)
{
        if (WSAStartup(0x0101, &wsadata)==SOCKET_ERROR)
                ExitProcess(0);
        s=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
        phe=gethostbyname(FReadINI("MAIN","server"));
        sa.sin_family = AF_INET;
        sa.sin_port=htons(atoi(FReadINI("MAIN","port")));
        sa.sin_addr.S_un.S_addr=((struct in_addr *)phe->h_addr_list[0])->s_addr;
        i=StrToInt((LPCTSTR)FReadINI("MAIN","email"));
        if (connect(s,(struct sockaddr*)&sa,sizeof(sa))!=SOCKET_ERROR)
        {
                if (FRecv(s)==cool)
                {
                        if (FReadData("220")==cool)
                        {                               
                                memset(&Buffer,0, sizeof(Buffer));
                        }
                        while (1)
                        {                               
                                if (FSend(helo,s)==cool)
                                {
                                        FRecv(s);
                                        if (FReadData("250")==bad)
                                        {
                                                FErr(Buffer);
                                        }
                                }
                                lstrcat(mess,from);
                                lstrcat(mess,FReadINI("MAIN","mailfrom"));
                                lstrcat(mess,simbols);
                                if (FSend(mess,s)==cool)
                                {
                                        memset(&mess,0,sizeof(mess));
                                        FRecv(s);
                                        if (FReadData("250")==bad)
                                        {
                                                FErr(Buffer);
                                                ExitProcess(0);
                                        }
                                }
                                for (n=1;n<i+1;n++)
                                {                               
                                        lstrcat(mess,rcpt);
                                        ZeroMemory(&body,sizeof(body));
                                        lstrcat(body,"email");
                                        itoa(n,integer,10);                               
                                        lstrcat(body,integer);
                                        lstrcat(mess,FReadINI("EMAIL",body));
                                        ZeroMemory(&body,sizeof(body));
                                        lstrcat(mess,simbols);
                                        if (FSend(mess,s)==cool)
                                        {
                                                memset(&mess,0,sizeof(mess));
                                                FRecv(s);
                                                if (FReadData("250")==bad)
                                                {
                                                        FErr(Buffer);
                                                        ExitProcess(0);
                                                }
                                        }
                                }                               
                                if (FSend(dat,s)==cool)
                                {
                                        FRecv(s);
                                        if (FReadData("354")==bad)
                                        {
                                                FErr(Buffer);
                                                ExitProcess(0);
                                        }
                                }
                                ZeroMemory(&body,sizeof(body));
                                lstrcat(body,"From:");
                                lstrcat(body,FReadINI("MAIN","title"));
                                lstrcat(body,"<");
                                lstrcat(body,FReadINI("MAIN","mailfrom"));
                                lstrcat(body,">\xD\xA\x0");
                                lstrcat(body,"Subject:");
                                lstrcat(body,FReadINI("MAIN","title"));
                                lstrcat(body,"\xD\xA\x0");
                                lstrcat(body,"MIME-Version: 1.0\xD\xA\x0");                               
                                lstrcat(body,"Content-Type: text/plain; charset=windows-1251\xD\xA\x0Content-transfer-encoding: base64");
                                FSend(body,s);                                                               
                                ZeroMemory(&body,sizeof(body));
                                FSendBody(s);
                                if (FSend(end_dat,s)==cool)
                                {
                                        FRecv(s);
                                        if (FReadData("250")==bad)
                                        {
                                                FErr(Buffer);
                                                ExitProcess(0);
                                        }
                                }
                                if (FSend(quit,s)==cool)
                                {
                                        FRecv(s);
                                        if (FReadData("250")==bad)
                                        {
                                                FErr(Buffer);
                                                ExitProcess(0);
                                        }
                                }                               
                                break;
                        }                       
                }
                else
                {
                        printf(Buffer);
                        memset(&Buffer,0, sizeof(Buffer));
                        ExitProcess(0);
                }
        }
        shutdown(s,1);
        closesocket( s );
        WSACleanup();
}


XCodeR 24-01-2006 10:33 396506

сеньк, ща пойду разбираться....

XCodeR 24-01-2006 10:50 396508

с img'ом разобрался...
в src - пишем просто название картинки...
я просто в начале открыл в браузер message.html и посмотрел как там картинки присоединяются.. тав в src какой-то численно-буквенный код был.... вот и "испугался"..;)


Время: 06:28.

Время: 06:28.
© OSzone.net 2001-