Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » отправка писем

Ответить
Настройки темы
отправка писем

Аватара для XCodeR

Ветеран


Сообщения: 878
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 23:51, 23-01-2006

 

Аватара для XCodeR

Ветеран


Сообщения: 878
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 23:52, 23-01-2006 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

lehha


Сообщения: n/a

Профиль | Цитировать


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

Отправлено: 00:40, 24-01-2006 | #3


Аватара для XCodeR

Ветеран


Сообщения: 878
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


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

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

Отправлено: 09:31, 24-01-2006 | #4

lehha


Сообщения: n/a

Профиль | Цитировать


писал это для отправки логов по почте правдо очень давненько думаю разберешся, на счет картинок прочитай про расширение 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();
}

Отправлено: 10:16, 24-01-2006 | #5


Аватара для XCodeR

Ветеран


Сообщения: 878
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 10:33, 24-01-2006 | #6


Аватара для XCodeR

Ветеран


Сообщения: 878
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 10:50, 24-01-2006 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » отправка писем

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
отправка писем через почтовый клиент rivera Хочу все знать 1 09-01-2010 14:05
Почта - Отправка писем на определённое количество адрессов NemesisSOAD Программное обеспечение Windows 0 02-04-2009 15:39
отсылка писем Strannick60 Сетевые технологии 3 09-11-2005 17:06
Преобразование писем из ОЕ badze Хочу все знать 2 16-09-2005 08:02
читать загловки писем IZOprogman Хочу все знать 7 19-08-2003 19:47




 
Переход