C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Пример, связи с smtp-сервером / Сокеты / Сеть


Пример, связи с smtp-сервером.

#include <windows.h>
#include <winsock.h>
#include <stdio.h>

WSADATA ws;
SOCKET s;
struct sockaddr_in addr;
hostent *d_addr;
char text[1024];

int main()
{
  // инициализируем сокеты
  if (FAILED (WSAStartup (MAKEWORD( 1,1 ), &ws))) 
  { 
    printf("Error in WSAStartup(...)\n");
    return 1; }

  // создаем сокет
  s = socket (AF_INET, SOCK_STREAM, 0);
  if (s == INVALID_SOCKET) 
  { 
    printf("Error in socket(...)\n");
    return 1;  }

  // получаем адрес сервера
  d_addr = gethostbyname ("smtp.mail.ru");
  if (d_addr==NULL)
  {
    printf("Error in gethostbyname(...)\n");
    return 1;  };

  // заполняем параметры адреса
  addr.sin_family = AF_INET; 
  addr.sin_addr.s_addr = *((unsigned long *) d_addr->h_addr);
  addr.sin_port = htons (25);

  // устанавливаем соединение
  if (SOCKET_ERROR == (connect (s, (sockaddr *) &addr,
                       sizeof (addr)))) 
  { 
    printf("Error in connect(...)\n");
    return 1; }

  // ждем ответ от сервера
  recv(s,text,sizeof(text),0);
  printf("recv - %s", text);

  // приветствуем сервер
  strcpy(text,"HELO smtp.mail.ru\r\n");
  send(s,text,strlen(text),0);
  printf("send - %s", text);

  // ждем подтверждение от сервера
  recv(s,text,sizeof(text),0);
  printf("recv - %s", text);

  // начинаем отправлять конверт состоящий из полей
  // MAIL FROM: и RCPT TO: После каждого поля ждем
  // подтверждение

  // сообщаем отправителя
  strcpy(text,"MAIL FROM: sender@mail.ru\r\n");
  send(s,text,strlen(text),0);
  printf("send - %s", text);

  // ждем подтверждение от сервера
  recv(s,text,sizeof(text),0);
  printf("recv - %s", text);

  // сообщаем получателя
  strcpy(text,"RCPT TO: receiver@mtu-net.ru\r\n");
  send(s,text,strlen(text),0);
  printf("send - %s", text);

  // ждем подтверждение от сервера
  recv(s,text,sizeof(text),0);
  printf("recv - %s", text);

  // подаем команду, что готовы начать передачу письма
  strcpy(text,"DATA\r\n");
  send(s,text,strlen(text),0);
  printf("send - %s", text);

  // ждем подтверждение от сервера
  recv(s,text,sizeof(text),0);
  printf("recv - %s", text);

  // передаем заголовок

  // от кого письмо
  strcpy(text,"FROM: sender@mail.ru\r\n");
  send(s,text,strlen(text),0);
  printf("send - %s", text);

  // кому письмо
  strcpy(text,"TO: receiver@mtu-net.ru\r\n");
  send(s,text,strlen(text),0);
  printf("send - %s", text);
        
  // тема письма
  strcpy(text,"SUBJECT: test\r\n");
  send(s,text,strlen(text),0);
  printf("send - %s", text);

  // текст письма
  strcpy(text,"Hi!\nIt is a message for you\n");
  send(s,text,strlen(text),0);
  printf("send - %s", text);

  // говорим, что закончили
  strcpy(text,"\r\n.\r\n");
  send(s,text,strlen(text),0);
  printf("send - %s", text);
  recv(s,text,sizeof(text),0);
  printf("recv - %s", text);

  // прощаемся с сервером
  strcpy(text,"QUIT");
  send(s,text,strlen(text),0);
  printf("send - %s", text);

  // закрываем сокет
  closesocket(s);

  return 0;
}