Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отправка почты с использованием MIME, С какого момента отсылать заголовки MIME 
:(
    Опции темы
Luchi
Дата 3.10.2012, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 21.8.2012

Репутация: нет
Всего: нет



Код для отправки почты
Код

#include <conio.h>
#include <iostream>
#include <string>
#include <winsock.h>

int main()
{
    WSADATA ws;
    
    SOCKET s;
    struct sockaddr_in addr;
    hostent *d_addr;
    
    int bytes;
    char text[1024];
    
    //инициализируем сокеты
    if (FAILED (WSAStartup (MAKEWORD(1, 1), &ws)))
    {
        printf("Error in WSAStartup(...)\n");
        return -1;
    }
    
    //создаем сокет
    if (INVALID_SOCKET == (s = socket (AF_INET,
                        SOCK_STREAM,
                        0
                        )
                )
        )
    {
        //сообщение с номером ошибки
        printf("Error in socket(...)\n");
        WSACleanup();
        return -1;
    }
    
    //получаем адрес сервера
    d_addr = gethostbyname ("smtp.yandex.ru");
    if (d_addr == NULL)
    {
        printf("Error in gethostbyname(...)\n");
        closesocket(s);
        WSACleanup();
        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");
        closesocket(s);
        WSACleanup();
        return -1;
    }
    
    //ждем ответ от сервера
    ZeroMemory(text, strlen(text));
    bytes = recv(s, text, sizeof(text)-1, 0);
    text[bytes] = '\0';
    printf("recv (%d) %s\n", bytes, text);
    
    //приветствуем сервер
    ZeroMemory(text, strlen(text));
    strcpy(text, "EHLO smtp.yandex.ru\r\n");
    bytes = send(s, text, strlen(text), 0);
    printf("send (%d) %s", bytes, text);
    //ждем подтверждения от сервера
    ZeroMemory(text, strlen(text));
    bytes = recv(s, text, sizeof(text)-1, 0);
    text[bytes] = '\0';
    printf("recv (%d) %s\n", bytes, text);
    
    //дата ???????????????????????????
    ZeroMemory(text, strlen(text));
    strcpy(text, "Date: Thu, 24 Nov 2005 11:36:20 +0200");
    bytes = send(s, text, strlen(text), 0);
    printf("send (%d) %s\n", bytes, text);
    
    //версия ?????????????????????????
    ZeroMemory(text, strlen(text));
    strcpy(text, "MIME-Version: 1.0");
    bytes = send(s, text, strlen(text), 0);
    printf("send (%d) %s\n", bytes, text);
    
    //дальнейшие заголовки не вставлял, т.к. уже идут ошибки
    
    //авторизуемся
    ZeroMemory(text, strlen(text));
    strcpy(text, "AUTH LOGIN\r\n");
    bytes = send(s, text, strlen(text), 0);
    printf("send (%d) %s", bytes, text);
    //ждем подтверждения от сервера
    ZeroMemory(text, strlen(text));
    bytes = recv(s, text, sizeof(text)-1, 0);
    text[bytes] = '\0';
    printf("recv (%d) %s\n", bytes, text);
    
    //отправляем логин
    ZeroMemory(text, strlen(text));
    strcpy(text,"логин в base64\r\n");
    bytes = send(s, text, strlen(text), 0);
    printf("send (%d) %s", bytes, text);
    //ждем подтверждения от сервера
    ZeroMemory(text, strlen(text));
    bytes = recv(s, text, sizeof(text)-1, 0);
    text[bytes] = '\0';
    printf("recv (%d) %s\n", bytes, text);
    
    //отправляем пароль
    ZeroMemory(text, strlen(text));
    strcpy(text, "пароль в base64\r\n");
    bytes = send(s, text, strlen(text), 0);
    printf("send (%d) %s", bytes, text);
    //ждем подтверждение от сервера
    ZeroMemory(text, strlen(text));
    bytes = recv(s, text, sizeof(text)-1, 0);
    text[bytes] = '\0';
    printf("recv (%d) %s\n", bytes, text);
    
    //начинаем отправлять конверт состоящий из полей
    //MAIL FROM: и RCPT TO: После каждого поля ждем
    //подтверждение
    
    //сообщаем отправителя
    ZeroMemory(text, strlen(text));
    strcpy(text, "откого\r\n");
    bytes = send(s, text, strlen(text), 0);
    printf("send (%d) %s", bytes, text);
    //ждем подтверждение от сервера
    ZeroMemory(text, strlen(text));
    bytes = recv(s, text, sizeof(text)-1, 0);
    text[bytes] = '\0';
    printf("recv (%d) %s\n", bytes, text);
    
    //сообщаем получателя
    ZeroMemory(text, strlen(text));
    strcpy(text, "кому\r\n");
    bytes = send(s, text, strlen(text), 0);
    printf("send (%d) %s", bytes, text);
    //ждем подтверждение от сервера
    ZeroMemory(text, strlen(text));
    bytes = recv(s, text, sizeof(text)-1, 0);
    printf("recv (%d) %s\n", bytes, text);
    
    //подаем команду, что готовы начать передачу письма
    ZeroMemory(text, strlen(text));
    strcpy(text, "DATA\r\n");
    bytes = send(s, text, strlen(text), 0);
    printf("send (%d) %s", bytes, text);
    //ждем подтверждение от сервера
    ZeroMemory(text, strlen(text));
    recv(s,text,sizeof(text)-1,0);
    printf("recv (%d) %s\n", bytes, text);
    
    //передаем заголовок
    
    //с этого места тоже пробовал отправлять заголовки
    
    //от кого письмо
    ZeroMemory(text, strlen(text));
    strcpy(text, "откого\r\n");
    bytes = send(s, text, strlen(text), 0);
    printf("send (%d) %s\n", bytes, text);
    
    //кому письмо
    ZeroMemory(text, strlen(text));
    strcpy(text, "кому\r\n");
    bytes = send(s, text, strlen(text), 0);
    printf("send (%d) %s\n", bytes, text);
    
    //тема письма
    ZeroMemory(text, strlen(text));
    strcpy(text, "SUBJECT: 1\r\n\r\n");
    bytes = send(s, text, strlen(text), 0);
    printf("send (%d) %s", bytes, text);
    
    //текст письма
    ZeroMemory(text, strlen(text));
    strcpy(text, "1");
    bytes = send(s, text, strlen(text), 0);
    printf("send (%d) %s\n", bytes, text);
    
    //говорим, что закончили
    ZeroMemory(text, strlen(text));
    strcpy(text, "\r\n.\r\n");
    bytes = send(s, text, strlen(text), 0);
    printf("send (%d) %s", bytes, text);
    //ждем подтверждение от сервера
    ZeroMemory(text, strlen(text));
    bytes = recv(s, text, sizeof(text)-1, 0);
    printf("recv (%d) %s\n", bytes, text);
    
    //прощаемся с сервером
    ZeroMemory(text, strlen(text));
    strcpy(text, "QUIT");
    bytes = send(s, text, strlen(text), 0);
    printf("send (%d) %s\n", bytes, text);
    
    //закрываем сокет
    closesocket(s);
    
    //деинициализирует сервис
    WSACleanup();
    
    printf("\n");
    printf("Press any key\n");
    getch();
    
    return 0;
}

Данный код упрощен и нет проверок ошибок, т.к. интересует конкретно отправка вложений с использованием MIME, даже не сами заголовки, а их оформление. Вставлял заголовки в разные месты, но сервер выдает ошибки (в основном 502, 503). Не понятно с какого момента вставлять заголовки и нужно ли их заключать в кавычки. Отправлять ли их в кодировке base64.

Это сообщение отредактировал(а) Luchi - 3.10.2012, 22:02
PM MAIL   Вверх
feodorv
Дата 4.10.2012, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Гм. Берётся почтовая программа, берётся сниффер. В почтовой программе оформляется письмо (с вложением или без), отправляется через какой-нибудь SMТP сервер. Сниффером смотрятся заголовки.

Впрочем, для начала стоит изучить SMTP протокол.

Это сообщение отредактировал(а) feodorv - 4.10.2012, 19:12


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0440 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.