Новичок
Профиль
Группа: Участник
Сообщений: 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
|